summaryrefslogtreecommitdiffstats
path: root/drivers/staging/rtl8192e/r8192E_core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/rtl8192e/r8192E_core.c')
-rw-r--r--drivers/staging/rtl8192e/r8192E_core.c1423
1 files changed, 466 insertions, 957 deletions
diff --git a/drivers/staging/rtl8192e/r8192E_core.c b/drivers/staging/rtl8192e/r8192E_core.c
index 17a806f..a202194 100644
--- a/drivers/staging/rtl8192e/r8192E_core.c
+++ b/drivers/staging/rtl8192e/r8192E_core.c
@@ -25,7 +25,6 @@
*/
-#undef LOOP_TEST
#undef RX_DONT_PASS_UL
#undef DEBUG_EPROM
#undef DEBUG_RX_VERBOSE
@@ -58,9 +57,6 @@
#include "r819xE_phyreg.h"
#include "r819xE_cmdpkt.h"
#include "r8192E_dm.h"
-//#include "r8192xU_phyreg.h"
-//#include <linux/usb.h>
-// FIXME: check if 2.6.7 is ok
#ifdef CONFIG_PM
#include "r8192_pm.h"
@@ -71,7 +67,7 @@
#endif
//set here to open your trace code. //WB
-u32 rt_global_debug_component = \
+u32 rt_global_debug_component =
// COMP_INIT |
// COMP_EPROM |
// COMP_PHY |
@@ -124,12 +120,10 @@ MODULE_DESCRIPTION("Linux driver for Realtek RTL819x WiFi cards");
module_param_string(ifname, ifname, sizeof(ifname), S_IRUGO|S_IWUSR);
-//module_param(hwseqnum,int, S_IRUGO|S_IWUSR);
module_param(hwwep,int, S_IRUGO|S_IWUSR);
module_param(channels,int, S_IRUGO|S_IWUSR);
MODULE_PARM_DESC(ifname," Net interface name, wlan%d=default");
-//MODULE_PARM_DESC(hwseqnum," Try to use hardware 802.11 header sequence numbers. Zero=default");
MODULE_PARM_DESC(hwwep," Try to use hardware WEP support. Still broken and not available on all cards");
MODULE_PARM_DESC(channels," Channel bitmask for specific locales. NYI");
@@ -147,7 +141,7 @@ static struct pci_driver rtl8192_pci_driver = {
.resume = rtl8192E_resume, /* PM resume fn */
#else
.suspend = NULL, /* PM suspend fn */
- .resume = NULL, /* PM resume fn */
+ .resume = NULL, /* PM resume fn */
#endif
};
@@ -160,6 +154,11 @@ static void rtl8192_prepare_beacon(struct r8192_priv *priv);
static irqreturn_t rtl8192_interrupt(int irq, void *netdev);
static void rtl8192_try_wake_queue(struct net_device *dev, int pri);
static void rtl819xE_tx_cmd(struct net_device *dev, struct sk_buff *skb);
+static void rtl8192_update_ratr_table(struct net_device* dev);
+static void rtl8192_restart(struct work_struct *work);
+static void watch_dog_timer_callback(unsigned long data);
+static int _rtl8192_up(struct net_device *dev);
+static void rtl8192_cancel_deferred_work(struct r8192_priv* priv);
#ifdef ENABLE_DOT11D
@@ -238,34 +237,18 @@ static void rtl819x_set_channel_map(u8 channel_plan, struct r8192_priv* priv)
}
#endif
-
-#define eqMacAddr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 )
-/* 2007/07/25 MH Defien temp tx fw info. */
-static TX_FWINFO_T Tmp_TxFwInfo;
-
-
-#define rx_hal_is_cck_rate(_pdrvinfo)\
- (_pdrvinfo->RxRate == DESC90_RATE1M ||\
- _pdrvinfo->RxRate == DESC90_RATE2M ||\
- _pdrvinfo->RxRate == DESC90_RATE5_5M ||\
- _pdrvinfo->RxRate == DESC90_RATE11M) &&\
- !_pdrvinfo->RxHT\
-
+static inline bool rx_hal_is_cck_rate(prx_fwinfo_819x_pci pdrvinfo)
+{
+ return (pdrvinfo->RxRate == DESC90_RATE1M ||
+ pdrvinfo->RxRate == DESC90_RATE2M ||
+ pdrvinfo->RxRate == DESC90_RATE5_5M ||
+ pdrvinfo->RxRate == DESC90_RATE11M) &&
+ !pdrvinfo->RxHT;
+}
void CamResetAllEntry(struct net_device *dev)
{
- //u8 ucIndex;
- u32 ulcommand = 0;
-
-#if 1
- ulcommand |= BIT31|BIT30;
- write_nic_dword(dev, RWCAM, ulcommand);
-#else
- for(ucIndex=0;ucIndex<TOTAL_CAM_ENTRY;ucIndex++)
- CAM_mark_invalid(dev, ucIndex);
- for(ucIndex=0;ucIndex<TOTAL_CAM_ENTRY;ucIndex++)
- CAM_empty_entry(dev, ucIndex);
-#endif
+ write_nic_dword(dev, RWCAM, BIT31|BIT30);
}
@@ -280,7 +263,6 @@ u32 read_cam(struct net_device *dev, u8 addr)
return read_nic_dword(dev, 0xa8);
}
-////////////////////////////////////////////////////////////
#ifdef CONFIG_RTL8180_IO_MAP
u8 read_nic_byte(struct net_device *dev, int x)
@@ -352,9 +334,6 @@ void write_nic_word(struct net_device *dev, int x,u16 y)
u8 rtl8192e_ap_sec_type(struct ieee80211_device *ieee)
{
- //struct r8192_priv* priv = ieee80211_priv(dev);
- //struct ieee80211_device *ieee = priv->ieee80211;
-
static const u8 ccmp_ie[4] = {0x00,0x50,0xf2,0x04};
static const u8 ccmp_rsn_ie[4] = {0x00, 0x0f, 0xac, 0x04};
int wpa_ie_len= ieee->wpa_ie_len;
@@ -363,8 +342,8 @@ u8 rtl8192e_ap_sec_type(struct ieee80211_device *ieee)
crypt = ieee->crypt[ieee->tx_keyidx];
- encrypt = (ieee->current_network.capability & WLAN_CAPABILITY_PRIVACY) ||\
- (ieee->host_encrypt && crypt && crypt->ops && \
+ encrypt = (ieee->current_network.capability & WLAN_CAPABILITY_PRIVACY) ||
+ (ieee->host_encrypt && crypt && crypt->ops &&
(0 == strcmp(crypt->ops->name,"WEP")));
/* simply judge */
@@ -399,7 +378,6 @@ rtl8192e_SetHwReg(struct net_device *dev,u8 variable,u8* val)
case HW_VAR_MEDIA_STATUS:
{
RT_OP_MODE OpMode = *((RT_OP_MODE *)(val));
- //LED_CTL_MODE LedAction = LED_CTL_NO_LINK;
u8 btMsr = read_nic_byte(dev, MSR);
btMsr &= 0xfc;
@@ -408,17 +386,14 @@ rtl8192e_SetHwReg(struct net_device *dev,u8 variable,u8* val)
{
case RT_OP_MODE_INFRASTRUCTURE:
btMsr |= MSR_INFRA;
- //LedAction = LED_CTL_LINK;
break;
case RT_OP_MODE_IBSS:
btMsr |= MSR_ADHOC;
- // led link set separate
break;
case RT_OP_MODE_AP:
btMsr |= MSR_AP;
- //LedAction = LED_CTL_LINK;
break;
default:
@@ -427,8 +402,6 @@ rtl8192e_SetHwReg(struct net_device *dev,u8 variable,u8* val)
}
write_nic_byte(dev, MSR, btMsr);
-
- //priv->ieee80211->LedControlHandler(dev, LedAction);
}
break;
@@ -437,7 +410,6 @@ rtl8192e_SetHwReg(struct net_device *dev,u8 variable,u8* val)
u32 RegRCR, Type;
Type = ((u8*)(val))[0];
- //priv->ieee80211->GetHwRegHandler(dev, HW_VAR_RCR, (u8*)(&RegRCR));
RegRCR = read_nic_dword(dev,RCR);
priv->ReceiveConfig = RegRCR;
@@ -446,7 +418,6 @@ rtl8192e_SetHwReg(struct net_device *dev,u8 variable,u8* val)
else if (Type == false)
RegRCR &= (~RCR_CBSSID);
- //priv->ieee80211->SetHwRegHandler( dev, HW_VAR_RCR, (u8*)(&RegRCR) );
write_nic_dword(dev, RCR,RegRCR);
priv->ReceiveConfig = RegRCR;
@@ -455,9 +426,6 @@ rtl8192e_SetHwReg(struct net_device *dev,u8 variable,u8* val)
case HW_VAR_SLOT_TIME:
{
- //PSTA_QOS pStaQos = Adapter->MgntInfo.pStaQos;
- //AC_CODING eACI;
-
priv->slot_time = val[0];
write_nic_byte(dev, SLOT_TIME, val[0]);
@@ -485,34 +453,8 @@ rtl8192e_SetHwReg(struct net_device *dev,u8 variable,u8* val)
}
-
-///////////////////////////////////////////////////////////
-
-//u8 read_phy_cck(struct net_device *dev, u8 adr);
-//u8 read_phy_ofdm(struct net_device *dev, u8 adr);
-/* this might still called in what was the PHY rtl8185/rtl8192 common code
- * plans are to possibilty turn it again in one common code...
- */
-void force_pci_posting(struct net_device *dev)
-{
-}
-
-
-//warning message WB
-//static struct net_device_stats *rtl8192_stats(struct net_device *dev);
-//void rtl8192_restart(struct net_device *dev);
-void rtl8192_restart(struct work_struct *work);
-//void rtl8192_rq_tx_ack(struct work_struct *work);
-
-void watch_dog_timer_callback(unsigned long data);
-/****************************************************************************
- -----------------------------PROCFS STUFF-------------------------
-*****************************************************************************/
-
static struct proc_dir_entry *rtl8192_proc = NULL;
-
-
static int proc_get_stats_ap(char *page, char **start,
off_t offset, int count,
int *eof, void *data)
@@ -521,7 +463,6 @@ static int proc_get_stats_ap(char *page, char **start,
struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
struct ieee80211_device *ieee = priv->ieee80211;
struct ieee80211_network *target;
-
int len = 0;
list_for_each_entry(target, &ieee->network_list, list) {
@@ -549,11 +490,8 @@ static int proc_get_registers(char *page, char **start,
int *eof, void *data)
{
struct net_device *dev = data;
-// struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
-
int len = 0;
int i,n;
-
int max=0xff;
/* This dump the current register page */
@@ -562,55 +500,43 @@ static int proc_get_registers(char *page, char **start,
for(n=0;n<=max;)
{
- //printk( "\nD: %2x> ", n);
len += snprintf(page + len, count - len,
"\nD: %2x > ",n);
for(i=0;i<16 && n<=max;i++,n++)
len += snprintf(page + len, count - len,
"%2x ",read_nic_byte(dev,n));
-
- // printk("%2x ",read_nic_byte(dev,n));
}
len += snprintf(page + len, count - len,"\n");
len += snprintf(page + len, count - len,
"\n####################page 1##################\n ");
for(n=0;n<=max;)
{
- //printk( "\nD: %2x> ", n);
len += snprintf(page + len, count - len,
"\nD: %2x > ",n);
for(i=0;i<16 && n<=max;i++,n++)
len += snprintf(page + len, count - len,
"%2x ",read_nic_byte(dev,0x100|n));
-
- // printk("%2x ",read_nic_byte(dev,n));
}
len += snprintf(page + len, count - len,
"\n####################page 3##################\n ");
for(n=0;n<=max;)
{
- //printk( "\nD: %2x> ", n);
len += snprintf(page + len, count - len,
"\nD: %2x > ",n);
for(i=0;i<16 && n<=max;i++,n++)
len += snprintf(page + len, count - len,
"%2x ",read_nic_byte(dev,0x300|n));
-
- // printk("%2x ",read_nic_byte(dev,n));
}
-
*eof = 1;
return len;
}
-
-
static int proc_get_stats_tx(char *page, char **start,
off_t offset, int count,
int *eof, void *data)
@@ -800,9 +726,6 @@ static void rtl8192_proc_init_one(struct net_device *dev)
dev->name);
}
}
-/****************************************************************************
- -----------------------------MISC STUFF-------------------------
-*****************************************************************************/
short check_nic_enough_desc(struct net_device *dev, int prio)
{
@@ -812,28 +735,17 @@ short check_nic_enough_desc(struct net_device *dev, int prio)
/* for now we reserve two free descriptor as a safety boundary
* between the tail and the head
*/
- if (ring->entries - skb_queue_len(&ring->queue) >= 2) {
- return 1;
- } else {
- return 0;
- }
+ return (ring->entries - skb_queue_len(&ring->queue) >= 2);
}
static void tx_timeout(struct net_device *dev)
{
struct r8192_priv *priv = ieee80211_priv(dev);
- //rtl8192_commit(dev);
schedule_work(&priv->reset_wq);
printk("TXTIMEOUT");
}
-
-/****************************************************************************
- ------------------------------HW STUFF---------------------------
-*****************************************************************************/
-
-
static void rtl8192_irq_enable(struct net_device *dev)
{
struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
@@ -841,30 +753,14 @@ static void rtl8192_irq_enable(struct net_device *dev)
write_nic_dword(dev,INTA_MASK, priv->irq_mask);
}
-
void rtl8192_irq_disable(struct net_device *dev)
{
struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
write_nic_dword(dev,INTA_MASK,0);
- force_pci_posting(dev);
priv->irq_enabled = 0;
}
-
-#if 0
-static void rtl8192_set_mode(struct net_device *dev,int mode)
-{
- u8 ecmd;
- ecmd=read_nic_byte(dev, EPROM_CMD);
- ecmd=ecmd &~ EPROM_CMD_OPERATING_MODE_MASK;
- ecmd=ecmd | (mode<<EPROM_CMD_OPERATING_MODE_SHIFT);
- ecmd=ecmd &~ (1<<EPROM_CS_SHIFT);
- ecmd=ecmd &~ (1<<EPROM_CK_SHIFT);
- write_nic_byte(dev, EPROM_CMD, ecmd);
-}
-#endif
-
void rtl8192_update_msr(struct net_device *dev)
{
struct r8192_priv *priv = ieee80211_priv(dev);
@@ -895,42 +791,21 @@ void rtl8192_update_msr(struct net_device *dev)
void rtl8192_set_chan(struct net_device *dev,short ch)
{
- struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
- RT_TRACE(COMP_RF, "=====>%s()====ch:%d\n", __FUNCTION__, ch);
- priv->chan=ch;
-#if 0
- if(priv->ieee80211->iw_mode == IW_MODE_ADHOC ||
- priv->ieee80211->iw_mode == IW_MODE_MASTER){
-
- priv->ieee80211->link_state = WLAN_LINK_ASSOCIATED;
- priv->ieee80211->master_chan = ch;
- rtl8192_update_beacon_ch(dev);
- }
-#endif
-
- /* this hack should avoid frame TX during channel setting*/
-
-
- // tx = read_nic_dword(dev,TX_CONF);
- // tx &= ~TX_LOOPBACK_MASK;
+ struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
-#ifndef LOOP_TEST
- //TODO
- // write_nic_dword(dev,TX_CONF, tx |( TX_LOOPBACK_MAC<<TX_LOOPBACK_SHIFT));
+ priv->chan = ch;
- //need to implement rf set channel here WB
+ /* need to implement rf set channel here WB */
- if (priv->rf_set_chan)
- priv->rf_set_chan(dev,priv->chan);
- // mdelay(10);
- // write_nic_dword(dev,TX_CONF,tx | (TX_LOOPBACK_NONE<<TX_LOOPBACK_SHIFT));
-#endif
+ if (priv->rf_set_chan)
+ priv->rf_set_chan(dev, priv->chan);
}
void rtl8192_rx_enable(struct net_device *dev)
{
- struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
- write_nic_dword(dev, RDQDA,priv->rx_ring_dma);
+ struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
+
+ write_nic_dword(dev, RDQDA,priv->rx_ring_dma);
}
/* the TX_DESC_BASE setting is according to the following queue index
@@ -947,74 +822,59 @@ void rtl8192_rx_enable(struct net_device *dev)
static const u32 TX_DESC_BASE[] = {BKQDA, BEQDA, VIQDA, VOQDA, HCCAQDA, CQDA, MQDA, HQDA, BQDA};
void rtl8192_tx_enable(struct net_device *dev)
{
- struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
- u32 i;
- for (i = 0; i < MAX_TX_QUEUE_COUNT; i++)
- write_nic_dword(dev, TX_DESC_BASE[i], priv->tx_ring[i].dma);
+ struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
+ u32 i;
+
+ for (i = 0; i < MAX_TX_QUEUE_COUNT; i++)
+ write_nic_dword(dev, TX_DESC_BASE[i], priv->tx_ring[i].dma);
- ieee80211_reset_queue(priv->ieee80211);
+ ieee80211_reset_queue(priv->ieee80211);
}
static void rtl8192_free_rx_ring(struct net_device *dev)
{
- struct r8192_priv *priv = ieee80211_priv(dev);
- int i;
+ struct r8192_priv *priv = ieee80211_priv(dev);
+ int i;
- for (i = 0; i < priv->rxringcount; i++) {
- struct sk_buff *skb = priv->rx_buf[i];
- if (!skb)
- continue;
+ for (i = 0; i < priv->rxringcount; i++) {
+ struct sk_buff *skb = priv->rx_buf[i];
+ if (!skb)
+ continue;
- pci_unmap_single(priv->pdev,
- *((dma_addr_t *)skb->cb),
- priv->rxbuffersize, PCI_DMA_FROMDEVICE);
- kfree_skb(skb);
- }
+ pci_unmap_single(priv->pdev,
+ *((dma_addr_t *)skb->cb),
+ priv->rxbuffersize, PCI_DMA_FROMDEVICE);
+ kfree_skb(skb);
+ }
- pci_free_consistent(priv->pdev, sizeof(*priv->rx_ring) * priv->rxringcount,
- priv->rx_ring, priv->rx_ring_dma);
- priv->rx_ring = NULL;
+ pci_free_consistent(priv->pdev, sizeof(*priv->rx_ring) * priv->rxringcount,
+ priv->rx_ring, priv->rx_ring_dma);
+ priv->rx_ring = NULL;
}
static void rtl8192_free_tx_ring(struct net_device *dev, unsigned int prio)
{
- struct r8192_priv *priv = ieee80211_priv(dev);
- struct rtl8192_tx_ring *ring = &priv->tx_ring[prio];
-
- while (skb_queue_len(&ring->queue)) {
- tx_desc_819x_pci *entry = &ring->desc[ring->idx];
- struct sk_buff *skb = __skb_dequeue(&ring->queue);
-
- pci_unmap_single(priv->pdev, le32_to_cpu(entry->TxBuffAddr),
- skb->len, PCI_DMA_TODEVICE);
- kfree_skb(skb);
- ring->idx = (ring->idx + 1) % ring->entries;
- }
-
- pci_free_consistent(priv->pdev, sizeof(*ring->desc)*ring->entries,
- ring->desc, ring->dma);
- ring->desc = NULL;
-}
+ struct r8192_priv *priv = ieee80211_priv(dev);
+ struct rtl8192_tx_ring *ring = &priv->tx_ring[prio];
-#if 0
-static void rtl8192_beacon_disable(struct net_device *dev)
-{
- struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
- u32 reg;
+ while (skb_queue_len(&ring->queue)) {
+ tx_desc_819x_pci *entry = &ring->desc[ring->idx];
+ struct sk_buff *skb = __skb_dequeue(&ring->queue);
- reg = read_nic_dword(priv->ieee80211->dev,INTA_MASK);
+ pci_unmap_single(priv->pdev, le32_to_cpu(entry->TxBuffAddr),
+ skb->len, PCI_DMA_TODEVICE);
+ kfree_skb(skb);
+ ring->idx = (ring->idx + 1) % ring->entries;
+ }
- /* disable Beacon realted interrupt signal */
- reg &= ~(IMR_BcnInt | IMR_BcnInt | IMR_TBDOK | IMR_TBDER);
- write_nic_dword(priv->ieee80211->dev, INTA_MASK, reg);
+ pci_free_consistent(priv->pdev, sizeof(*ring->desc)*ring->entries,
+ ring->desc, ring->dma);
+ ring->desc = NULL;
}
-#endif
-void PHY_SetRtl8192eRfOff(struct net_device* dev )
+void PHY_SetRtl8192eRfOff(struct net_device* dev)
{
- //struct r8192_priv *priv = ieee80211_priv(dev);
-
//disable RF-Chip A/B
rtl8192_setBBreg(dev, rFPGA0_XA_RFInterfaceOE, BIT4, 0x0);
//analog to digital off, for power save
@@ -1035,68 +895,49 @@ void PHY_SetRtl8192eRfOff(struct net_device* dev )
void rtl8192_halt_adapter(struct net_device *dev, bool reset)
{
- //u8 cmd;
struct r8192_priv *priv = ieee80211_priv(dev);
int i;
- u8 OpMode;
- u8 u1bTmp;
- u32 ulRegRead;
+ u8 OpMode;
+ u32 ulRegRead;
OpMode = RT_OP_MODE_NO_LINK;
priv->ieee80211->SetHwRegHandler(dev, HW_VAR_MEDIA_STATUS, &OpMode);
-#if 1
- if(!priv->ieee80211->bSupportRemoteWakeUp)
- {
- u1bTmp = 0x0; // disable tx/rx. In 8185 we write 0x10 (Reset bit), but here we make reference to WMAC and wirte 0x0. 2006.11.21 Emily
- //priv->ieee80211->SetHwRegHandler(dev, HW_VAR_COMMAND, &u1bTmp ); // Using HW_VAR_COMMAND instead of writing CMDR directly. Rewrited by Annie, 2006-04-07.
- write_nic_byte(dev, CMDR, u1bTmp);
+ if (!priv->ieee80211->bSupportRemoteWakeUp) {
+ /*
+ * disable tx/rx. In 8185 we write 0x10 (Reset bit),
+ * but here we make reference to WMAC and wirte 0x0
+ */
+ write_nic_byte(dev, CMDR, 0);
}
-#else
- cmd=read_nic_byte(dev,CMDR);
- write_nic_byte(dev, CMDR, cmd &~ (CR_TE|CR_RE));
-#endif
mdelay(20);
- if(!reset)
- {
- //PlatformStallExecution(150000);
+ if (!reset) {
mdelay(150);
#ifdef RTL8192E
- priv->bHwRfOffAction = 2;
+ priv->bHwRfOffAction = 2;
#endif
- //
- // Call MgntActSet_RF_State instead to prevent RF config race condition.
- // By Bruce, 2008-01-17.
- //
- if(!priv->ieee80211->bSupportRemoteWakeUp)
- {
- //MgntActSet_RF_State(Adapter, eRfOff, RF_CHANGE_BY_INIT);
- //MgntActSet_RF_State(Adapter, eRfOff, Adapter->MgntInfo.RfOffReason);
- //if(Adapter->HardwareType == HARDWARE_TYPE_RTL8190P)
-
+ /*
+ * Call MgntActSet_RF_State instead to
+ * prevent RF config race condition.
+ */
+ if (!priv->ieee80211->bSupportRemoteWakeUp) {
PHY_SetRtl8192eRfOff(dev);
-
- // 2006.11.30. System reset bit
- //priv->ieee80211->GetHwRegHandler(dev, HW_VAR_CPU_RST, (u32*)(&ulRegRead) );
ulRegRead = read_nic_dword(dev,CPU_GEN);
- ulRegRead|=CPU_GEN_SYSTEM_RESET;
- //priv->ieee80211->SetHwRegHandler(dev, HW_VAR_CPU_RST, &ulRegRead);
+ ulRegRead |= CPU_GEN_SYSTEM_RESET;
write_nic_dword(dev,CPU_GEN, ulRegRead);
- }
- else
- {
- //2008.06.03 for WOL
+ } else {
+ /* for WOL */
write_nic_dword(dev, WFCRC0, 0xffffffff);
write_nic_dword(dev, WFCRC1, 0xffffffff);
write_nic_dword(dev, WFCRC2, 0xffffffff);
- //Write PMR register
+ /* Write PMR register */
write_nic_byte(dev, PMR, 0x5);
- //Disable tx, enanble rx
+ /* Disable tx, enanble rx */
write_nic_byte(dev, MacBlkCtrl, 0xa);
}
}
@@ -1109,16 +950,7 @@ void rtl8192_halt_adapter(struct net_device *dev, bool reset)
}
skb_queue_purge(&priv->skb_queue);
- return;
-}
-
-#if 0
-static void rtl8192_reset(struct net_device *dev)
-{
- rtl8192_irq_disable(dev);
- printk("This is RTL819xP Reset procedure\n");
}
-#endif
static const u16 rtl_rate[] = {10,20,55,110,60,90,120,180,240,360,480,540};
inline u16 rtl8192_rate2rate(short rate)
@@ -1127,81 +959,50 @@ inline u16 rtl8192_rate2rate(short rate)
return rtl_rate[rate];
}
-
-
-
static void rtl8192_data_hard_stop(struct net_device *dev)
{
- //FIXME !!
- #if 0
- struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
- priv->dma_poll_mask |= (1<<TX_DMA_STOP_LOWPRIORITY_SHIFT);
- rtl8192_set_mode(dev,EPROM_CMD_CONFIG);
- write_nic_byte(dev,TX_DMA_POLLING,priv->dma_poll_mask);
- rtl8192_set_mode(dev,EPROM_CMD_NORMAL);
- #endif
}
-
static void rtl8192_data_hard_resume(struct net_device *dev)
{
- // FIXME !!
- #if 0
- struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
- priv->dma_poll_mask &= ~(1<<TX_DMA_STOP_LOWPRIORITY_SHIFT);
- rtl8192_set_mode(dev,EPROM_CMD_CONFIG);
- write_nic_byte(dev,TX_DMA_POLLING,priv->dma_poll_mask);
- rtl8192_set_mode(dev,EPROM_CMD_NORMAL);
- #endif
}
-/* this function TX data frames when the ieee80211 stack requires this.
+/*
+ * this function TX data frames when the ieee80211 stack requires this.
* It checks also if we need to stop the ieee tx queue, eventually do it
*/
static void rtl8192_hard_data_xmit(struct sk_buff *skb, struct net_device *dev, int rate)
{
struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
int ret;
- //unsigned long flags;
cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
u8 queue_index = tcb_desc->queue_index;
+
/* shall not be referred by command packet */
assert(queue_index != TXCMD_QUEUE);
- if((priv->bHwRadioOff == true)||(!priv->up))
+ if (priv->bHwRadioOff || (!priv->up))
{
kfree_skb(skb);
return;
}
- //spin_lock_irqsave(&priv->tx_lock,flags);
+ memcpy(skb->cb, &dev, sizeof(dev));
- memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev));
-#if 0
- tcb_desc->RATRIndex = 7;
- tcb_desc->bTxDisableRateFallBack = 1;
- tcb_desc->bTxUseDriverAssingedRate = 1;
- tcb_desc->bTxEnableFwCalcDur = 1;
-#endif
skb_push(skb, priv->ieee80211->tx_headroom);
ret = rtl8192_tx(dev, skb);
- if(ret != 0) {
+ if (ret != 0) {
kfree_skb(skb);
- };
-
-//
- if(queue_index!=MGNT_QUEUE) {
- priv->ieee80211->stats.tx_bytes+=(skb->len - priv->ieee80211->tx_headroom);
- priv->ieee80211->stats.tx_packets++;
}
- //spin_unlock_irqrestore(&priv->tx_lock,flags);
-
-// return ret;
- return;
+ if (queue_index != MGNT_QUEUE) {
+ priv->ieee80211->stats.tx_bytes += (skb->len - priv->ieee80211->tx_headroom);
+ priv->ieee80211->stats.tx_packets++;
+ }
}
-/* This is a rough attempt to TX a frame
+/*
+ * This is a rough attempt to TX a frame
* This is called by the ieee 80211 stack to TX management frames.
* If the ring is full packet are dropped (for data frame the queue
* is stopped before this can happen).
@@ -1209,97 +1010,81 @@ static void rtl8192_hard_data_xmit(struct sk_buff *skb, struct net_device *dev,
static int rtl8192_hard_start_xmit(struct sk_buff *skb,struct net_device *dev)
{
struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
-
-
int ret;
- //unsigned long flags;
cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
u8 queue_index = tcb_desc->queue_index;
- if(queue_index != TXCMD_QUEUE){
- if((priv->bHwRadioOff == true)||(!priv->up))
+ if (queue_index != TXCMD_QUEUE) {
+ if (priv->bHwRadioOff || (!priv->up))
{
- kfree_skb(skb);
- return 0;
- }
+ kfree_skb(skb);
+ return 0;
+ }
}
- //spin_lock_irqsave(&priv->tx_lock,flags);
-
- memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev));
- if(queue_index == TXCMD_QUEUE) {
- // skb_push(skb, USB_HWDESC_HEADER_LEN);
+ memcpy(skb->cb, &dev, sizeof(dev));
+ if (queue_index == TXCMD_QUEUE) {
rtl819xE_tx_cmd(dev, skb);
ret = 0;
- //spin_unlock_irqrestore(&priv->tx_lock,flags);
return ret;
} else {
- // RT_TRACE(COMP_SEND, "To send management packet\n");
tcb_desc->RATRIndex = 7;
tcb_desc->bTxDisableRateFallBack = 1;
tcb_desc->bTxUseDriverAssingedRate = 1;
tcb_desc->bTxEnableFwCalcDur = 1;
skb_push(skb, priv->ieee80211->tx_headroom);
ret = rtl8192_tx(dev, skb);
- if(ret != 0) {
+ if (ret != 0) {
kfree_skb(skb);
- };
+ }
}
-// priv->ieee80211->stats.tx_bytes+=skb->len;
-// priv->ieee80211->stats.tx_packets++;
-
- //spin_unlock_irqrestore(&priv->tx_lock,flags);
-
return ret;
-
}
static void rtl8192_tx_isr(struct net_device *dev, int prio)
{
- struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
-
- struct rtl8192_tx_ring *ring = &priv->tx_ring[prio];
-
- while (skb_queue_len(&ring->queue)) {
- tx_desc_819x_pci *entry = &ring->desc[ring->idx];
- struct sk_buff *skb;
-
- /* beacon packet will only use the first descriptor defaultly,
- * and the OWN may not be cleared by the hardware
- * */
- if(prio != BEACON_QUEUE) {
- if(entry->OWN)
- return;
- ring->idx = (ring->idx + 1) % ring->entries;
- }
+ struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
+ struct rtl8192_tx_ring *ring = &priv->tx_ring[prio];
+
+ while (skb_queue_len(&ring->queue)) {
+ tx_desc_819x_pci *entry = &ring->desc[ring->idx];
+ struct sk_buff *skb;
+
+ /*
+ * beacon packet will only use the first descriptor defaultly,
+ * and the OWN may not be cleared by the hardware
+ */
+ if (prio != BEACON_QUEUE) {
+ if (entry->OWN)
+ return;
+ ring->idx = (ring->idx + 1) % ring->entries;
+ }
- skb = __skb_dequeue(&ring->queue);
- pci_unmap_single(priv->pdev, le32_to_cpu(entry->TxBuffAddr),
- skb->len, PCI_DMA_TODEVICE);
+ skb = __skb_dequeue(&ring->queue);
+ pci_unmap_single(priv->pdev, le32_to_cpu(entry->TxBuffAddr),
+ skb->len, PCI_DMA_TODEVICE);
- kfree_skb(skb);
- }
- if (prio == MGNT_QUEUE){
- if (priv->ieee80211->ack_tx_to_ieee){
- if (rtl8192_is_tx_queue_empty(dev)){
- priv->ieee80211->ack_tx_to_ieee = 0;
- ieee80211_ps_tx_ack(priv->ieee80211, 1);
- }
- }
- }
-
- if(prio != BEACON_QUEUE) {
- /* try to deal with the pending packets */
- tasklet_schedule(&priv->irq_tx_tasklet);
- }
+ kfree_skb(skb);
+ }
+ if (prio == MGNT_QUEUE) {
+ if (priv->ieee80211->ack_tx_to_ieee) {
+ if (rtl8192_is_tx_queue_empty(dev)) {
+ priv->ieee80211->ack_tx_to_ieee = 0;
+ ieee80211_ps_tx_ack(priv->ieee80211, 1);
+ }
+ }
+ }
+ if (prio != BEACON_QUEUE) {
+ /* try to deal with the pending packets */
+ tasklet_schedule(&priv->irq_tx_tasklet);
+ }
}
static void rtl8192_stop_beacon(struct net_device *dev)
{
- //rtl8192_beacon_disable(dev);
}
static void rtl8192_config_rate(struct net_device* dev, u16* rate_config)
@@ -1381,47 +1166,44 @@ static void rtl8192_update_cap(struct net_device* dev, u16 cap)
static void rtl8192_net_update(struct net_device *dev)
{
-
struct r8192_priv *priv = ieee80211_priv(dev);
struct ieee80211_network *net;
u16 BcnTimeCfg = 0, BcnCW = 6, BcnIFS = 0xf;
u16 rate_config = 0;
net = &priv->ieee80211->current_network;
- //update Basic rate: RR, BRSR
+
+ /* update Basic rate: RR, BRSR */
rtl8192_config_rate(dev, &rate_config);
- // 2007.01.16, by Emily
- // Select RRSR (in Legacy-OFDM and CCK)
- // For 8190, we select only 24M, 12M, 6M, 11M, 5.5M, 2M, and 1M from the Basic rate.
- // We do not use other rates.
- priv->basic_rate = rate_config &= 0x15f;
- //BSSID
- write_nic_dword(dev,BSSIDR,((u32*)net->bssid)[0]);
- write_nic_word(dev,BSSIDR+4,((u16*)net->bssid)[2]);
-#if 0
- //MSR
- rtl8192_update_msr(dev);
-#endif
+ /*
+ * Select RRSR (in Legacy-OFDM and CCK)
+ * For 8190, we select only 24M, 12M, 6M, 11M, 5.5M,
+ * 2M, and 1M from the Basic rate.
+ * We do not use other rates.
+ */
+ priv->basic_rate = rate_config &= 0x15f;
+
+ /* BSSID */
+ write_nic_dword(dev, BSSIDR, ((u32 *)net->bssid)[0]);
+ write_nic_word(dev, BSSIDR+4, ((u16 *)net->bssid)[2]);
-// rtl8192_update_cap(dev, net->capability);
if (priv->ieee80211->iw_mode == IW_MODE_ADHOC)
{
write_nic_word(dev, ATIMWND, 2);
write_nic_word(dev, BCN_DMATIME, 256);
write_nic_word(dev, BCN_INTERVAL, net->beacon_interval);
- // write_nic_word(dev, BcnIntTime, 100);
- //BIT15 of BCN_DRV_EARLY_INT will indicate whether software beacon or hw beacon is applied.
+ /*
+ * BIT15 of BCN_DRV_EARLY_INT will indicate
+ * whether software beacon or hw beacon is applied.
+ */
write_nic_word(dev, BCN_DRV_EARLY_INT, 10);
write_nic_byte(dev, BCN_ERR_THRESH, 100);
BcnTimeCfg |= (BcnCW<<BCN_TCFG_CW_SHIFT);
- // TODO: BcnIFS may required to be changed on ASIC
- BcnTimeCfg |= BcnIFS<<BCN_TCFG_IFS;
-
+ /* TODO: BcnIFS may required to be changed on ASIC */
+ BcnTimeCfg |= BcnIFS<<BCN_TCFG_IFS;
write_nic_word(dev, BCN_TCFG, BcnTimeCfg);
}
-
-
}
void rtl819xE_tx_cmd(struct net_device *dev, struct sk_buff *skb)
@@ -1481,52 +1263,44 @@ void rtl819xE_tx_cmd(struct net_device *dev, struct sk_buff *skb)
/*
* Mapping Software/Hardware descriptor queue id to "Queue Select Field"
* in TxFwInfo data structure
- * 2006.10.30 by Emily
- *
- * \param QUEUEID Software Queue
-*/
+ */
static u8 MapHwQueueToFirmwareQueue(u8 QueueID)
{
- u8 QueueSelect = 0x0; //defualt set to
+ u8 QueueSelect = 0;
- switch(QueueID) {
- case BE_QUEUE:
- QueueSelect = QSLT_BE; //or QSelect = pTcb->priority;
- break;
+ switch (QueueID) {
+ case BE_QUEUE:
+ QueueSelect = QSLT_BE;
+ break;
- case BK_QUEUE:
- QueueSelect = QSLT_BK; //or QSelect = pTcb->priority;
- break;
+ case BK_QUEUE:
+ QueueSelect = QSLT_BK;
+ break;
- case VO_QUEUE:
- QueueSelect = QSLT_VO; //or QSelect = pTcb->priority;
- break;
+ case VO_QUEUE:
+ QueueSelect = QSLT_VO;
+ break;
- case VI_QUEUE:
- QueueSelect = QSLT_VI; //or QSelect = pTcb->priority;
- break;
- case MGNT_QUEUE:
- QueueSelect = QSLT_MGNT;
- break;
+ case VI_QUEUE:
+ QueueSelect = QSLT_VI;
+ break;
- case BEACON_QUEUE:
- QueueSelect = QSLT_BEACON;
- break;
+ case MGNT_QUEUE:
+ QueueSelect = QSLT_MGNT;
+ break;
- // TODO: 2006.10.30 mark other queue selection until we verify it is OK
- // TODO: Remove Assertions
-//#if (RTL819X_FPGA_VER & RTL819X_FPGA_GUANGAN_070502)
- case TXCMD_QUEUE:
- QueueSelect = QSLT_CMD;
- break;
-//#endif
- case HIGH_QUEUE:
- //QueueSelect = QSLT_HIGH;
- //break;
+ case BEACON_QUEUE:
+ QueueSelect = QSLT_BEACON;
+ break;
- default:
- RT_TRACE(COMP_ERR, "TransmitTCB(): Impossible Queue Selection: %d \n", QueueID);
- break;
+ case TXCMD_QUEUE:
+ QueueSelect = QSLT_CMD;
+ break;
+
+ case HIGH_QUEUE:
+ default:
+ RT_TRACE(COMP_ERR, "Impossible Queue Selection: %d\n", QueueID);
+ break;
}
return QueueSelect;
}
@@ -1590,194 +1364,168 @@ static u8 QueryIsShort(u8 TxHT, u8 TxRate, cb_desc *tcb_desc)
* The tx procedure is just as following,
* skb->cb will contain all the following information,
* priority, morefrag, rate, &dev.
- * */
+ */
short rtl8192_tx(struct net_device *dev, struct sk_buff* skb)
{
- struct r8192_priv *priv = ieee80211_priv(dev);
- struct rtl8192_tx_ring *ring;
- unsigned long flags;
- cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
- tx_desc_819x_pci *pdesc = NULL;
- TX_FWINFO_8190PCI *pTxFwInfo = NULL;
- dma_addr_t mapping;
- bool multi_addr=false,broad_addr=false,uni_addr=false;
- u8* pda_addr = NULL;
- int idx;
-
- if(priv->bdisable_nic){
- RT_TRACE(COMP_ERR,"%s: ERR!! Nic is disabled! Can't tx packet len=%d qidx=%d!!!\n", __FUNCTION__, skb->len, tcb_desc->queue_index);
+ struct r8192_priv *priv = ieee80211_priv(dev);
+ struct rtl8192_tx_ring *ring;
+ unsigned long flags;
+ cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE);
+ tx_desc_819x_pci *pdesc = NULL;
+ TX_FWINFO_8190PCI *pTxFwInfo = NULL;
+ dma_addr_t mapping;
+ bool multi_addr = false, broad_addr = false, uni_addr = false;
+ u8 *pda_addr = NULL;
+ int idx;
+
+ if (priv->bdisable_nic) {
+ RT_TRACE(COMP_ERR, "Nic is disabled! Can't tx packet len=%d qidx=%d!!!\n",
+ skb->len, tcb_desc->queue_index);
return skb->len;
- }
+ }
#ifdef ENABLE_LPS
priv->ieee80211->bAwakePktSent = true;
#endif
- mapping = pci_map_single(priv->pdev, skb->data, skb->len, PCI_DMA_TODEVICE);
- /* collect the tx packets statitcs */
- pda_addr = ((u8*)skb->data) + sizeof(TX_FWINFO_8190PCI);
- if(is_multicast_ether_addr(pda_addr))
- multi_addr = true;
- else if(is_broadcast_ether_addr(pda_addr))
- broad_addr = true;
- else
- uni_addr = true;
-
- if(uni_addr)
- priv->stats.txbytesunicast += (u8)(skb->len) - sizeof(TX_FWINFO_8190PCI);
- else if(multi_addr)
- priv->stats.txbytesmulticast +=(u8)(skb->len) - sizeof(TX_FWINFO_8190PCI);
- else
- priv->stats.txbytesbroadcast += (u8)(skb->len) - sizeof(TX_FWINFO_8190PCI);
-
- /* fill tx firmware */
- pTxFwInfo = (PTX_FWINFO_8190PCI)skb->data;
- memset(pTxFwInfo,0,sizeof(TX_FWINFO_8190PCI));
- pTxFwInfo->TxHT = (tcb_desc->data_rate&0x80)?1:0;
- pTxFwInfo->TxRate = MRateToHwRate8190Pci((u8)tcb_desc->data_rate);
- pTxFwInfo->EnableCPUDur = tcb_desc->bTxEnableFwCalcDur;
- pTxFwInfo->Short = QueryIsShort(pTxFwInfo->TxHT, pTxFwInfo->TxRate, tcb_desc);
-
- /* Aggregation related */
- if(tcb_desc->bAMPDUEnable) {
- pTxFwInfo->AllowAggregation = 1;
- pTxFwInfo->RxMF = tcb_desc->ampdu_factor;
- pTxFwInfo->RxAMD = tcb_desc->ampdu_density;
- } else {
- pTxFwInfo->AllowAggregation = 0;
- pTxFwInfo->RxMF = 0;
- pTxFwInfo->RxAMD = 0;
- }
+ mapping = pci_map_single(priv->pdev, skb->data, skb->len, PCI_DMA_TODEVICE);
- //
- // Protection mode related
- //
- pTxFwInfo->RtsEnable = (tcb_desc->bRTSEnable)?1:0;
- pTxFwInfo->CtsEnable = (tcb_desc->bCTSEnable)?1:0;
- pTxFwInfo->RtsSTBC = (tcb_desc->bRTSSTBC)?1:0;
- pTxFwInfo->RtsHT= (tcb_desc->rts_rate&0x80)?1:0;
- pTxFwInfo->RtsRate = MRateToHwRate8190Pci((u8)tcb_desc->rts_rate);
- pTxFwInfo->RtsBandwidth = 0;
- pTxFwInfo->RtsSubcarrier = tcb_desc->RTSSC;
- pTxFwInfo->RtsShort = (pTxFwInfo->RtsHT==0)?(tcb_desc->bRTSUseShortPreamble?1:0):(tcb_desc->bRTSUseShortGI?1:0);
- //
- // Set Bandwidth and sub-channel settings.
- //
- if(priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40)
- {
- if(tcb_desc->bPacketBW)
- {
- pTxFwInfo->TxBandwidth = 1;
+ /* collect the tx packets statitcs */
+ pda_addr = ((u8 *)skb->data) + sizeof(TX_FWINFO_8190PCI);
+ if (is_multicast_ether_addr(pda_addr))
+ multi_addr = true;
+ else if (is_broadcast_ether_addr(pda_addr))
+ broad_addr = true;
+ else
+ uni_addr = true;
+
+ if (uni_addr)
+ priv->stats.txbytesunicast += (u8)(skb->len) - sizeof(TX_FWINFO_8190PCI);
+ else if (multi_addr)
+ priv->stats.txbytesmulticast += (u8)(skb->len) - sizeof(TX_FWINFO_8190PCI);
+ else
+ priv->stats.txbytesbroadcast += (u8)(skb->len) - sizeof(TX_FWINFO_8190PCI);
+
+ /* fill tx firmware */
+ pTxFwInfo = (PTX_FWINFO_8190PCI)skb->data;
+ memset(pTxFwInfo, 0, sizeof(TX_FWINFO_8190PCI));
+ pTxFwInfo->TxHT = (tcb_desc->data_rate&0x80) ? 1 : 0;
+ pTxFwInfo->TxRate = MRateToHwRate8190Pci((u8)tcb_desc->data_rate);
+ pTxFwInfo->EnableCPUDur = tcb_desc->bTxEnableFwCalcDur;
+ pTxFwInfo->Short = QueryIsShort(pTxFwInfo->TxHT, pTxFwInfo->TxRate, tcb_desc);
+
+ /* Aggregation related */
+ if (tcb_desc->bAMPDUEnable) {
+ pTxFwInfo->AllowAggregation = 1;
+ pTxFwInfo->RxMF = tcb_desc->ampdu_factor;
+ pTxFwInfo->RxAMD = tcb_desc->ampdu_density;
+ } else {
+ pTxFwInfo->AllowAggregation = 0;
+ pTxFwInfo->RxMF = 0;
+ pTxFwInfo->RxAMD = 0;
+ }
+
+ /* Protection mode related */
+ pTxFwInfo->RtsEnable = (tcb_desc->bRTSEnable) ? 1 : 0;
+ pTxFwInfo->CtsEnable = (tcb_desc->bCTSEnable) ? 1 : 0;
+ pTxFwInfo->RtsSTBC = (tcb_desc->bRTSSTBC) ? 1 : 0;
+ pTxFwInfo->RtsHT = (tcb_desc->rts_rate&0x80) ? 1 : 0;
+ pTxFwInfo->RtsRate = MRateToHwRate8190Pci((u8)tcb_desc->rts_rate);
+ pTxFwInfo->RtsBandwidth = 0;
+ pTxFwInfo->RtsSubcarrier = tcb_desc->RTSSC;
+ pTxFwInfo->RtsShort = (pTxFwInfo->RtsHT == 0) ? (tcb_desc->bRTSUseShortPreamble ? 1 : 0) : (tcb_desc->bRTSUseShortGI? 1 : 0);
+
+ /* Set Bandwidth and sub-channel settings. */
+ if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40) {
+ if (tcb_desc->bPacketBW) {
+ pTxFwInfo->TxBandwidth = 1;
#ifdef RTL8190P
- pTxFwInfo->TxSubCarrier = 3;
+ pTxFwInfo->TxSubCarrier = 3;
#else
- pTxFwInfo->TxSubCarrier = 0; //By SD3's Jerry suggestion, use duplicated mode, cosa 04012008
+ /* use duplicated mode */
+ pTxFwInfo->TxSubCarrier = 0;
#endif
- }
- else
- {
- pTxFwInfo->TxBandwidth = 0;
- pTxFwInfo->TxSubCarrier = priv->nCur40MhzPrimeSC;
- }
- } else {
- pTxFwInfo->TxBandwidth = 0;
- pTxFwInfo->TxSubCarrier = 0;
- }
+ } else {
+ pTxFwInfo->TxBandwidth = 0;
+ pTxFwInfo->TxSubCarrier = priv->nCur40MhzPrimeSC;
+ }
+ } else {
+ pTxFwInfo->TxBandwidth = 0;
+ pTxFwInfo->TxSubCarrier = 0;
+ }
- if (0)
- {
- /* 2007/07/25 MH Copy current TX FW info.*/
- memcpy((void*)(&Tmp_TxFwInfo), (void*)(pTxFwInfo), sizeof(TX_FWINFO_8190PCI));
- printk("&&&&&&&&&&&&&&&&&&&&&&====>print out fwinf\n");
- printk("===>enable fwcacl:%d\n", Tmp_TxFwInfo.EnableCPUDur);
- printk("===>RTS STBC:%d\n", Tmp_TxFwInfo.RtsSTBC);
- printk("===>RTS Subcarrier:%d\n", Tmp_TxFwInfo.RtsSubcarrier);
- printk("===>Allow Aggregation:%d\n", Tmp_TxFwInfo.AllowAggregation);
- printk("===>TX HT bit:%d\n", Tmp_TxFwInfo.TxHT);
- printk("===>Tx rate:%d\n", Tmp_TxFwInfo.TxRate);
- printk("===>Received AMPDU Density:%d\n", Tmp_TxFwInfo.RxAMD);
- printk("===>Received MPDU Factor:%d\n", Tmp_TxFwInfo.RxMF);
- printk("===>TxBandwidth:%d\n", Tmp_TxFwInfo.TxBandwidth);
- printk("===>TxSubCarrier:%d\n", Tmp_TxFwInfo.TxSubCarrier);
-
- printk("<=====**********************out of print\n");
+ spin_lock_irqsave(&priv->irq_th_lock, flags);
+ ring = &priv->tx_ring[tcb_desc->queue_index];
+ if (tcb_desc->queue_index != BEACON_QUEUE)
+ idx = (ring->idx + skb_queue_len(&ring->queue)) % ring->entries;
+ else
+ idx = 0;
- }
- spin_lock_irqsave(&priv->irq_th_lock,flags);
- ring = &priv->tx_ring[tcb_desc->queue_index];
- if (tcb_desc->queue_index != BEACON_QUEUE) {
- idx = (ring->idx + skb_queue_len(&ring->queue)) % ring->entries;
- } else {
- idx = 0;
- }
+ pdesc = &ring->desc[idx];
+ if ((pdesc->OWN == 1) && (tcb_desc->queue_index != BEACON_QUEUE)) {
+ RT_TRACE(COMP_ERR, "No more TX desc@%d, ring->idx = %d,idx = %d,%x",
+ tcb_desc->queue_index, ring->idx, idx, skb->len);
+ spin_unlock_irqrestore(&priv->irq_th_lock, flags);
+ return skb->len;
+ }
- pdesc = &ring->desc[idx];
- if((pdesc->OWN == 1) && (tcb_desc->queue_index != BEACON_QUEUE)) {
- RT_TRACE(COMP_ERR,"No more TX desc@%d, ring->idx = %d,idx = %d,%x", \
- tcb_desc->queue_index,ring->idx, idx,skb->len);
- spin_unlock_irqrestore(&priv->irq_th_lock,flags);
- return skb->len;
- }
+ /* fill tx descriptor */
+ memset(pdesc, 0, 12);
- /* fill tx descriptor */
- memset((u8*)pdesc,0,12);
- /*DWORD 0*/
- pdesc->LINIP = 0;
- pdesc->CmdInit = 1;
- pdesc->Offset = sizeof(TX_FWINFO_8190PCI) + 8; //We must add 8!! Emily
- pdesc->PktSize = (u16)skb->len-sizeof(TX_FWINFO_8190PCI);
-
- /*DWORD 1*/
- pdesc->SecCAMID= 0;
- pdesc->RATid = tcb_desc->RATRIndex;
-
-
- pdesc->NoEnc = 1;
- pdesc->SecType = 0x0;
- if (tcb_desc->bHwSec) {
- switch (priv->ieee80211->pairwise_key_type) {
- case KEY_TYPE_WEP40:
- case KEY_TYPE_WEP104:
- pdesc->SecType = 0x1;
- pdesc->NoEnc = 0;
- break;
- case KEY_TYPE_TKIP:
- pdesc->SecType = 0x2;
- pdesc->NoEnc = 0;
- break;
- case KEY_TYPE_CCMP:
- pdesc->SecType = 0x3;
- pdesc->NoEnc = 0;
- break;
- case KEY_TYPE_NA:
- pdesc->SecType = 0x0;
- pdesc->NoEnc = 1;
- break;
- }
- }
+ /*DWORD 0*/
+ pdesc->LINIP = 0;
+ pdesc->CmdInit = 1;
+ pdesc->Offset = sizeof(TX_FWINFO_8190PCI) + 8; /* We must add 8!! */
+ pdesc->PktSize = (u16)skb->len-sizeof(TX_FWINFO_8190PCI);
- //
- // Set Packet ID
- //
- pdesc->PktId = 0x0;
+ /*DWORD 1*/
+ pdesc->SecCAMID = 0;
+ pdesc->RATid = tcb_desc->RATRIndex;
- pdesc->QueueSelect = MapHwQueueToFirmwareQueue(tcb_desc->queue_index);
- pdesc->TxFWInfoSize = sizeof(TX_FWINFO_8190PCI);
+ pdesc->NoEnc = 1;
+ pdesc->SecType = 0x0;
+ if (tcb_desc->bHwSec) {
+ switch (priv->ieee80211->pairwise_key_type) {
+ case KEY_TYPE_WEP40:
+ case KEY_TYPE_WEP104:
+ pdesc->SecType = 0x1;
+ pdesc->NoEnc = 0;
+ break;
+ case KEY_TYPE_TKIP:
+ pdesc->SecType = 0x2;
+ pdesc->NoEnc = 0;
+ break;
+ case KEY_TYPE_CCMP:
+ pdesc->SecType = 0x3;
+ pdesc->NoEnc = 0;
+ break;
+ case KEY_TYPE_NA:
+ pdesc->SecType = 0x0;
+ pdesc->NoEnc = 1;
+ break;
+ }
+ }
- pdesc->DISFB = tcb_desc->bTxDisableRateFallBack;
- pdesc->USERATE = tcb_desc->bTxUseDriverAssingedRate;
+ /* Set Packet ID */
+ pdesc->PktId = 0x0;
- pdesc->FirstSeg =1;
- pdesc->LastSeg = 1;
- pdesc->TxBufferSize = skb->len;
+ pdesc->QueueSelect = MapHwQueueToFirmwareQueue(tcb_desc->queue_index);
+ pdesc->TxFWInfoSize = sizeof(TX_FWINFO_8190PCI);
- pdesc->TxBuffAddr = cpu_to_le32(mapping);
- __skb_queue_tail(&ring->queue, skb);
- pdesc->OWN = 1;
- spin_unlock_irqrestore(&priv->irq_th_lock,flags);
- dev->trans_start = jiffies;
- write_nic_word(dev,TPPoll,0x01<<tcb_desc->queue_index);
- return 0;
+ pdesc->DISFB = tcb_desc->bTxDisableRateFallBack;
+ pdesc->USERATE = tcb_desc->bTxUseDriverAssingedRate;
+
+ pdesc->FirstSeg = 1;
+ pdesc->LastSeg = 1;
+ pdesc->TxBufferSize = skb->len;
+
+ pdesc->TxBuffAddr = cpu_to_le32(mapping);
+ __skb_queue_tail(&ring->queue, skb);
+ pdesc->OWN = 1;
+ spin_unlock_irqrestore(&priv->irq_th_lock, flags);
+ dev->trans_start = jiffies;
+ write_nic_word(dev, TPPoll, 0x01<<tcb_desc->queue_index);
+ return 0;
}
static short rtl8192_alloc_rx_desc_ring(struct net_device *dev)
@@ -1846,41 +1594,31 @@ static int rtl8192_alloc_tx_desc_ring(struct net_device *dev,
return 0;
}
-
static short rtl8192_pci_initdescring(struct net_device *dev)
{
- u32 ret;
- int i;
- struct r8192_priv *priv = ieee80211_priv(dev);
-
- ret = rtl8192_alloc_rx_desc_ring(dev);
- if (ret) {
- return ret;
- }
-
+ u32 ret;
+ int i;
+ struct r8192_priv *priv = ieee80211_priv(dev);
- /* general process for other queue */
- for (i = 0; i < MAX_TX_QUEUE_COUNT; i++) {
- ret = rtl8192_alloc_tx_desc_ring(dev, i, priv->txringcount);
- if (ret)
- goto err_free_rings;
- }
+ ret = rtl8192_alloc_rx_desc_ring(dev);
+ if (ret)
+ return ret;
-#if 0
- /* specific process for hardware beacon process */
- ret = rtl8192_alloc_tx_desc_ring(dev, MAX_TX_QUEUE_COUNT - 1, 2);
- if (ret)
- goto err_free_rings;
-#endif
+ /* general process for other queue */
+ for (i = 0; i < MAX_TX_QUEUE_COUNT; i++) {
+ ret = rtl8192_alloc_tx_desc_ring(dev, i, priv->txringcount);
+ if (ret)
+ goto err_free_rings;
+ }
- return 0;
+ return 0;
err_free_rings:
- rtl8192_free_rx_ring(dev);
- for (i = 0; i < MAX_TX_QUEUE_COUNT; i++)
- if (priv->tx_ring[i].desc)
- rtl8192_free_tx_ring(dev, i);
- return 1;
+ rtl8192_free_rx_ring(dev);
+ for (i = 0; i < MAX_TX_QUEUE_COUNT; i++)
+ if (priv->tx_ring[i].desc)
+ rtl8192_free_tx_ring(dev, i);
+ return 1;
}
static void rtl8192_pci_resetdescring(struct net_device *dev)
@@ -1918,12 +1656,8 @@ static void rtl8192_pci_resetdescring(struct net_device *dev)
}
}
-#if 1
-extern void rtl8192_update_ratr_table(struct net_device* dev);
static void rtl8192_link_change(struct net_device *dev)
{
-// int i;
-
struct r8192_priv *priv = ieee80211_priv(dev);
struct ieee80211_device* ieee = priv->ieee80211;
//write_nic_word(dev, BCN_INTR_ITV, net->beacon_interval);
@@ -1959,10 +1693,9 @@ static void rtl8192_link_change(struct net_device *dev)
write_nic_dword(dev, RCR, reg);
}
}
-#endif
-static struct ieee80211_qos_parameters def_qos_parameters = {
+static const struct ieee80211_qos_parameters def_qos_parameters = {
{3,3,3,3},/* cw_min */
{7,7,7,7},/* cw_max */
{2,2,2,2},/* aifs */
@@ -1982,6 +1715,7 @@ static void rtl8192_update_beacon(struct work_struct * work)
ieee->pHTInfo->bCurrentRT2RTLongSlotTime = net->bssht.bdRT2RTLongSlotTime;
rtl8192_update_cap(dev, net->capability);
}
+
/*
* background support to run QoS activate functionality
*/
@@ -1992,7 +1726,6 @@ static void rtl8192_qos_activate(struct work_struct * work)
struct net_device *dev = priv->ieee80211->dev;
struct ieee80211_qos_parameters *qos_parameters = &priv->ieee80211->current_network.qos_data.parameters;
u8 mode = priv->ieee80211->current_network.mode;
-// u32 size = sizeof(struct ieee80211_qos_parameters);
u8 u1bAIFS;
u32 u4bAcParam;
int i;
@@ -2049,7 +1782,7 @@ static int rtl8192_qos_handle_probe_response(struct r8192_priv *priv,
"qos_activate\n");
}
} else {
- memcpy(&priv->ieee80211->current_network.qos_data.parameters,\
+ memcpy(&priv->ieee80211->current_network.qos_data.parameters,
&def_qos_parameters, size);
if ((network->qos_data.active == 1) && (active_network == 1)) {
@@ -2078,60 +1811,55 @@ static int rtl8192_handle_beacon(struct net_device * dev,
}
/*
-* handling the beaconing responses. if we get different QoS setting
-* off the network from the associated setting, adjust the QoS
-* setting
-*/
+ * handling the beaconing responses. if we get different QoS setting
+ * off the network from the associated setting, adjust the QoS setting
+ */
static int rtl8192_qos_association_resp(struct r8192_priv *priv,
struct ieee80211_network *network)
{
- int ret = 0;
- unsigned long flags;
- u32 size = sizeof(struct ieee80211_qos_parameters);
- int set_qos_param = 0;
+ int ret = 0;
+ unsigned long flags;
+ u32 size = sizeof(struct ieee80211_qos_parameters);
+ int set_qos_param = 0;
- if ((priv == NULL) || (network == NULL))
- return ret;
+ if ((priv == NULL) || (network == NULL))
+ return ret;
- if(priv->ieee80211->state !=IEEE80211_LINKED)
- return ret;
+ if (priv->ieee80211->state != IEEE80211_LINKED)
+ return ret;
- if ((priv->ieee80211->iw_mode != IW_MODE_INFRA))
- return ret;
+ if ((priv->ieee80211->iw_mode != IW_MODE_INFRA))
+ return ret;
- spin_lock_irqsave(&priv->ieee80211->lock, flags);
- if(network->flags & NETWORK_HAS_QOS_PARAMETERS) {
- memcpy(&priv->ieee80211->current_network.qos_data.parameters,\
- &network->qos_data.parameters,\
+ spin_lock_irqsave(&priv->ieee80211->lock, flags);
+ if (network->flags & NETWORK_HAS_QOS_PARAMETERS) {
+ memcpy(&priv->ieee80211->current_network.qos_data.parameters,
+ &network->qos_data.parameters,
sizeof(struct ieee80211_qos_parameters));
priv->ieee80211->current_network.qos_data.active = 1;
-#if 0
- if((priv->ieee80211->current_network.qos_data.param_count != \
- network->qos_data.param_count))
-#endif
- {
- set_qos_param = 1;
- /* update qos parameter for current network */
- priv->ieee80211->current_network.qos_data.old_param_count = \
- priv->ieee80211->current_network.qos_data.param_count;
- priv->ieee80211->current_network.qos_data.param_count = \
- network->qos_data.param_count;
- }
- } else {
- memcpy(&priv->ieee80211->current_network.qos_data.parameters,\
+ set_qos_param = 1;
+ /* update qos parameter for current network */
+ priv->ieee80211->current_network.qos_data.old_param_count =
+ priv->ieee80211->current_network.qos_data.param_count;
+ priv->ieee80211->current_network.qos_data.param_count =
+ network->qos_data.param_count;
+
+ } else {
+ memcpy(&priv->ieee80211->current_network.qos_data.parameters,
&def_qos_parameters, size);
priv->ieee80211->current_network.qos_data.active = 0;
priv->ieee80211->current_network.qos_data.supported = 0;
- set_qos_param = 1;
- }
+ set_qos_param = 1;
+ }
- spin_unlock_irqrestore(&priv->ieee80211->lock, flags);
+ spin_unlock_irqrestore(&priv->ieee80211->lock, flags);
- RT_TRACE(COMP_QOS, "%s: network->flags = %d,%d\n",__FUNCTION__,network->flags ,priv->ieee80211->current_network.qos_data.active);
+ RT_TRACE(COMP_QOS, "%s: network->flags = %d,%d\n", __FUNCTION__,
+ network->flags, priv->ieee80211->current_network.qos_data.active);
if (set_qos_param == 1)
queue_work(priv->priv_wq, &priv->qos_activate);
- return ret;
+ return ret;
}
@@ -2145,22 +1873,18 @@ static int rtl8192_handle_assoc_response(struct net_device *dev,
}
-//updateRATRTabel for MCS only. Basic rate is not implement.
-void rtl8192_update_ratr_table(struct net_device* dev)
- // POCTET_STRING posLegacyRate,
- // u8* pMcsRate)
- // PRT_WLAN_STA pEntry)
+/* updateRATRTabel for MCS only. Basic rate is not implemented. */
+static void rtl8192_update_ratr_table(struct net_device* dev)
{
struct r8192_priv* priv = ieee80211_priv(dev);
struct ieee80211_device* ieee = priv->ieee80211;
u8* pMcsRate = ieee->dot11HTOperationalRateSet;
- //struct ieee80211_network *net = &ieee->current_network;
u32 ratr_value = 0;
u8 rate_index = 0;
rtl8192_config_rate(dev, (u16*)(&ratr_value));
ratr_value |= (*(u16*)(pMcsRate)) << 12;
-// switch (net->mode)
+
switch (ieee->mode)
{
case IEEE_A:
@@ -2196,52 +1920,13 @@ void rtl8192_update_ratr_table(struct net_device* dev)
write_nic_byte(dev, UFWP, 1);
}
-#if 0
-static u8 ccmp_ie[4] = {0x00,0x50,0xf2,0x04};
-static u8 ccmp_rsn_ie[4] = {0x00, 0x0f, 0xac, 0x04};
-#endif
-
static bool GetNmodeSupportBySecCfg8190Pci(struct net_device*dev)
{
-#if 1
-
struct r8192_priv *priv = ieee80211_priv(dev);
struct ieee80211_device *ieee = priv->ieee80211;
- if (ieee->rtllib_ap_sec_type &&
- (ieee->rtllib_ap_sec_type(ieee)&(SEC_ALG_WEP|SEC_ALG_TKIP))) {
- return false;
- } else {
- return true;
- }
-#else
- struct r8192_priv* priv = ieee80211_priv(dev);
- struct ieee80211_device* ieee = priv->ieee80211;
- int wpa_ie_len= ieee->wpa_ie_len;
- struct ieee80211_crypt_data* crypt;
- int encrypt;
-
- crypt = ieee->crypt[ieee->tx_keyidx];
- encrypt = (ieee->current_network.capability & WLAN_CAPABILITY_PRIVACY) || (ieee->host_encrypt && crypt && crypt->ops && (0 == strcmp(crypt->ops->name,"WEP")));
- /* simply judge */
- if(encrypt && (wpa_ie_len == 0)) {
- /* wep encryption, no N mode setting */
- return false;
-// } else if((wpa_ie_len != 0)&&(memcmp(&(ieee->wpa_ie[14]),ccmp_ie,4))) {
- } else if((wpa_ie_len != 0)) {
- /* parse pairwise key type */
- //if((pairwisekey = WEP40)||(pairwisekey = WEP104)||(pairwisekey = TKIP))
- if (((ieee->wpa_ie[0] == 0xdd) && (!memcmp(&(ieee->wpa_ie[14]),ccmp_ie,4))) || ((ieee->wpa_ie[0] == 0x30) && (!memcmp(&ieee->wpa_ie[10],ccmp_rsn_ie, 4))))
- return true;
- else
- return false;
- } else {
- //RT_TRACE(COMP_ERR,"In %s The GroupEncAlgorithm is [4]\n",__FUNCTION__ );
- return true;
- }
-
- return true;
-#endif
+ return !(ieee->rtllib_ap_sec_type &&
+ (ieee->rtllib_ap_sec_type(ieee)&(SEC_ALG_WEP|SEC_ALG_TKIP)));
}
static void rtl8192_refresh_supportrate(struct r8192_priv* priv)
@@ -2256,7 +1941,6 @@ static void rtl8192_refresh_supportrate(struct r8192_priv* priv)
}
else
memset(ieee->Regdot11HTOperationalRateSet, 0, 16);
- return;
}
static u8 rtl8192_getSupportedWireleeMode(struct net_device*dev)
@@ -2327,20 +2011,13 @@ static void rtl8192_SetWirelessMode(struct net_device* dev, u8 wireless_mode)
#endif
}
-//init priv variables here
static bool GetHalfNmodeSupportByAPs819xPci(struct net_device* dev)
{
- bool Reval;
struct r8192_priv* priv = ieee80211_priv(dev);
struct ieee80211_device* ieee = priv->ieee80211;
- if(ieee->bHalfWirelessN24GMode == true)
- Reval = true;
- else
- Reval = false;
-
- return Reval;
+ return ieee->bHalfWirelessN24GMode;
}
short rtl8192_is_tx_queue_empty(struct net_device *dev)
@@ -2358,6 +2035,7 @@ short rtl8192_is_tx_queue_empty(struct net_device *dev)
}
return 1;
}
+
static void rtl8192_hw_sleep_down(struct net_device *dev)
{
struct r8192_priv *priv = ieee80211_priv(dev);
@@ -2371,15 +2049,12 @@ static void rtl8192_hw_sleep_down(struct net_device *dev)
return;
}
spin_unlock_irqrestore(&priv->rf_ps_lock,flags);
- //RT_TRACE(COMP_PS, "%s()============>come to sleep down\n", __FUNCTION__);
MgntActSet_RF_State(dev, eRfSleep, RF_CHANGE_BY_PS);
}
+
static void rtl8192_hw_sleep_wq (struct work_struct *work)
{
-// struct r8180_priv *priv = container_of(work, struct r8180_priv, watch_dog_wq);
-// struct ieee80211_device * ieee = (struct ieee80211_device*)
-// container_of(work, struct ieee80211_device, watch_dog_wq);
struct delayed_work *dwork = container_of(work,struct delayed_work,work);
struct ieee80211_device *ieee = container_of(dwork,struct ieee80211_device,hw_sleep_wq);
struct net_device *dev = ieee->dev;
@@ -2402,15 +2077,11 @@ static void rtl8192_hw_wakeup(struct net_device* dev)
}
spin_unlock_irqrestore(&priv->rf_ps_lock,flags);
- //RT_TRACE(COMP_PS, "%s()============>come to wake up\n", __FUNCTION__);
MgntActSet_RF_State(dev, eRfOn, RF_CHANGE_BY_PS);
}
void rtl8192_hw_wakeup_wq (struct work_struct *work)
{
-// struct r8180_priv *priv = container_of(work, struct r8180_priv, watch_dog_wq);
-// struct ieee80211_device * ieee = (struct ieee80211_device*)
-// container_of(work, struct ieee80211_device, watch_dog_wq);
struct delayed_work *dwork = container_of(work,struct delayed_work,work);
struct ieee80211_device *ieee = container_of(dwork,struct ieee80211_device,hw_wakeup_wq);
struct net_device *dev = ieee->dev;
@@ -2463,6 +2134,7 @@ static void rtl8192_hw_to_sleep(struct net_device *dev, u32 th, u32 tl)
spin_unlock_irqrestore(&priv->ps_lock,flags);
}
+
static void rtl8192_init_priv_variable(struct net_device* dev)
{
struct r8192_priv *priv = ieee80211_priv(dev);
@@ -2583,7 +2255,7 @@ static void rtl8192_init_priv_variable(struct net_device* dev)
#endif
#ifdef ENABLE_LPS
priv->ieee80211->LeisurePSLeave = LeisurePSLeave;
-#endif//ENABL
+#endif
priv->ieee80211->SetHwRegHandler = rtl8192e_SetHwReg;
priv->ieee80211->rtllib_ap_sec_type = rtl8192e_ap_sec_type;
@@ -2605,9 +2277,9 @@ static void rtl8192_init_priv_variable(struct net_device* dev)
RCR_AAP | ((u32)7<<RCR_MXDMA_OFFSET) |
((u32)7 << RCR_FIFO_OFFSET) | RCR_ONLYERLPKT;
- priv->irq_mask = (u32)(IMR_ROK | IMR_VODOK | IMR_VIDOK | IMR_BEDOK | IMR_BKDOK |\
- IMR_HCCADOK | IMR_MGNTDOK | IMR_COMDOK | IMR_HIGHDOK |\
- IMR_BDOK | IMR_RXCMDOK | IMR_TIMEOUT0 | IMR_RDU | IMR_RXFOVW |\
+ priv->irq_mask = (u32)(IMR_ROK | IMR_VODOK | IMR_VIDOK | IMR_BEDOK | IMR_BKDOK |
+ IMR_HCCADOK | IMR_MGNTDOK | IMR_COMDOK | IMR_HIGHDOK |
+ IMR_BDOK | IMR_RXCMDOK | IMR_TIMEOUT0 | IMR_RDU | IMR_RXFOVW |
IMR_TXFOVW | IMR_BcnInt | IMR_TBDOK | IMR_TBDER);
priv->AcmControl = 0;
@@ -2629,7 +2301,6 @@ static void rtl8192_init_priv_variable(struct net_device* dev)
priv->rf_set_chan = rtl8192_phy_SwChnl;
}
-//init lock here
static void rtl8192_init_priv_lock(struct r8192_priv* priv)
{
spin_lock_init(&priv->tx_lock);
@@ -2643,7 +2314,7 @@ static void rtl8192_init_priv_lock(struct r8192_priv* priv)
mutex_init(&priv->mutex);
}
-//init tasklet and wait_queue here. only 2.6 above kernel is considered
+/* init tasklet and wait_queue here */
#define DRV_NAME "wlan0"
static void rtl8192_init_priv_task(struct net_device* dev)
{
@@ -2695,7 +2366,10 @@ static void rtl8192_get_eeprom_size(struct net_device* dev)
RT_TRACE(COMP_INIT, "<===========%s(), epromtype:%d\n", __FUNCTION__, priv->epromtype);
}
-//used to swap endian. as ntohl & htonl are not neccessary to swap endian, so use this instead.
+/*
+ * used to swap endian. as ntohl & htonl are not
+ * neccessary to swap endian, so use this instead.
+ */
static inline u16 endian_swap(u16* data)
{
u16 tmp = *data;
@@ -2704,9 +2378,9 @@ static inline u16 endian_swap(u16* data)
}
/*
- * Note: Adapter->EEPROMAddressSize should be set before this function call.
- * EEPROM address size can be got through GetEEPROMSize8185()
-*/
+ * Adapter->EEPROMAddressSize should be set before this function call.
+ * EEPROM address size can be got through GetEEPROMSize8185()
+ */
static void rtl8192_read_eeprom_info(struct net_device* dev)
{
struct r8192_priv *priv = ieee80211_priv(dev);
@@ -2718,7 +2392,7 @@ static void rtl8192_read_eeprom_info(struct net_device* dev)
u16 i,usValue, IC_Version;
u16 EEPROMId;
#ifdef RTL8190P
- u8 offset;//, tmpAFR;
+ u8 offset;
u8 EepromTxPower[100];
#endif
u8 bMac_Tmp_Addr[6] = {0x00, 0xe0, 0x4c, 0x00, 0x00, 0x01};
@@ -3263,14 +2937,11 @@ static short rtl8192_init(struct net_device *dev)
return 0;
}
-/******************************************************************************
- *function: This function actually only set RRSR, RATR and BW_OPMODE registers
- * not to do all the hw config as its name says
- * input: net_device dev
- * output: none
- * return: none
- * notice: This part need to modified according to the rate set we filtered
- * ****************************************************************************/
+/*
+ * Actually only set RRSR, RATR and BW_OPMODE registers
+ * not to do all the hw config as its name says
+ * This part need to modified according to the rate set we filtered
+ */
static void rtl8192_hwconfig(struct net_device* dev)
{
u32 regRATR = 0, regRRSR = 0;
@@ -3330,7 +3001,7 @@ static void rtl8192_hwconfig(struct net_device* dev)
// Set Retry Limit here
//
write_nic_word(dev, RETRY_LIMIT,
- priv->ShortRetryLimit << RETRY_LIMIT_SHORT_SHIFT | \
+ priv->ShortRetryLimit << RETRY_LIMIT_SHORT_SHIFT |
priv->LongRetryLimit << RETRY_LIMIT_LONG_SHIFT);
// Set Contention Window here
@@ -3350,8 +3021,6 @@ static RT_STATUS rtl8192_adapter_start(struct net_device *dev)
// struct ieee80211_device *ieee = priv->ieee80211;
u32 ulRegRead;
RT_STATUS rtStatus = RT_STATUS_SUCCESS;
-// static char szMACPHYRegFile[] = RTL819X_PHY_MACPHY_REG;
-// static char szMACPHYRegPGFile[] = RTL819X_PHY_MACPHY_REG_PG;
//u8 eRFPath;
u8 tmpvalue;
#ifdef RTL8192E
@@ -3363,7 +3032,6 @@ static RT_STATUS rtl8192_adapter_start(struct net_device *dev)
#endif
u32 tmpRegA, tmpRegC, TempCCk;
int i =0;
-// u32 dwRegRead = 0;
RT_TRACE(COMP_INIT, "====>%s()\n", __FUNCTION__);
priv->being_init_adapter = true;
@@ -3485,12 +3153,12 @@ static RT_STATUS rtl8192_adapter_start(struct net_device *dev)
//2Set Tx dma burst
#ifdef RTL8190P
- write_nic_byte(dev, PCIF, ((MXDMA2_NoLimit<<MXDMA2_RX_SHIFT) | \
- (MXDMA2_NoLimit<<MXDMA2_TX_SHIFT) | \
- (1<<MULRW_SHIFT)));
+ write_nic_byte(dev, PCIF, ((MXDMA2_NoLimit<<MXDMA2_RX_SHIFT) |
+ (MXDMA2_NoLimit<<MXDMA2_TX_SHIFT) |
+ (1<<MULRW_SHIFT)));
#else
#ifdef RTL8192E
- write_nic_byte(dev, PCIF, ((MXDMA2_NoLimit<<MXDMA2_RX_SHIFT) |\
+ write_nic_byte(dev, PCIF, ((MXDMA2_NoLimit<<MXDMA2_RX_SHIFT) |
(MXDMA2_NoLimit<<MXDMA2_TX_SHIFT) ));
#endif
#endif
@@ -3504,25 +3172,25 @@ static RT_STATUS rtl8192_adapter_start(struct net_device *dev)
#ifdef TO_DO_LIST
if(priv->bInHctTest)
{
- PlatformEFIOWrite4Byte(Adapter, RQPN1, NUM_OF_PAGE_IN_FW_QUEUE_BK_DTM << RSVD_FW_QUEUE_PAGE_BK_SHIFT |\
- NUM_OF_PAGE_IN_FW_QUEUE_BE_DTM << RSVD_FW_QUEUE_PAGE_BE_SHIFT | \
- NUM_OF_PAGE_IN_FW_QUEUE_VI_DTM << RSVD_FW_QUEUE_PAGE_VI_SHIFT | \
+ PlatformEFIOWrite4Byte(Adapter, RQPN1, NUM_OF_PAGE_IN_FW_QUEUE_BK_DTM << RSVD_FW_QUEUE_PAGE_BK_SHIFT |
+ NUM_OF_PAGE_IN_FW_QUEUE_BE_DTM << RSVD_FW_QUEUE_PAGE_BE_SHIFT |
+ NUM_OF_PAGE_IN_FW_QUEUE_VI_DTM << RSVD_FW_QUEUE_PAGE_VI_SHIFT |
NUM_OF_PAGE_IN_FW_QUEUE_VO_DTM <<RSVD_FW_QUEUE_PAGE_VO_SHIFT);
PlatformEFIOWrite4Byte(Adapter, RQPN2, NUM_OF_PAGE_IN_FW_QUEUE_MGNT << RSVD_FW_QUEUE_PAGE_MGNT_SHIFT);
- PlatformEFIOWrite4Byte(Adapter, RQPN3, APPLIED_RESERVED_QUEUE_IN_FW| \
- NUM_OF_PAGE_IN_FW_QUEUE_BCN<<RSVD_FW_QUEUE_PAGE_BCN_SHIFT|\
+ PlatformEFIOWrite4Byte(Adapter, RQPN3, APPLIED_RESERVED_QUEUE_IN_FW|
+ NUM_OF_PAGE_IN_FW_QUEUE_BCN<<RSVD_FW_QUEUE_PAGE_BCN_SHIFT|
NUM_OF_PAGE_IN_FW_QUEUE_PUB_DTM<<RSVD_FW_QUEUE_PAGE_PUB_SHIFT);
}
else
#endif
{
- write_nic_dword(dev, RQPN1, NUM_OF_PAGE_IN_FW_QUEUE_BK << RSVD_FW_QUEUE_PAGE_BK_SHIFT |\
- NUM_OF_PAGE_IN_FW_QUEUE_BE << RSVD_FW_QUEUE_PAGE_BE_SHIFT | \
- NUM_OF_PAGE_IN_FW_QUEUE_VI << RSVD_FW_QUEUE_PAGE_VI_SHIFT | \
+ write_nic_dword(dev, RQPN1, NUM_OF_PAGE_IN_FW_QUEUE_BK << RSVD_FW_QUEUE_PAGE_BK_SHIFT |
+ NUM_OF_PAGE_IN_FW_QUEUE_BE << RSVD_FW_QUEUE_PAGE_BE_SHIFT |
+ NUM_OF_PAGE_IN_FW_QUEUE_VI << RSVD_FW_QUEUE_PAGE_VI_SHIFT |
NUM_OF_PAGE_IN_FW_QUEUE_VO <<RSVD_FW_QUEUE_PAGE_VO_SHIFT);
write_nic_dword(dev, RQPN2, NUM_OF_PAGE_IN_FW_QUEUE_MGNT << RSVD_FW_QUEUE_PAGE_MGNT_SHIFT);
- write_nic_dword(dev, RQPN3, APPLIED_RESERVED_QUEUE_IN_FW| \
- NUM_OF_PAGE_IN_FW_QUEUE_BCN<<RSVD_FW_QUEUE_PAGE_BCN_SHIFT|\
+ write_nic_dword(dev, RQPN3, APPLIED_RESERVED_QUEUE_IN_FW|
+ NUM_OF_PAGE_IN_FW_QUEUE_BCN<<RSVD_FW_QUEUE_PAGE_BCN_SHIFT|
NUM_OF_PAGE_IN_FW_QUEUE_PUB<<RSVD_FW_QUEUE_PAGE_PUB_SHIFT);
}
@@ -3807,7 +3475,6 @@ static void rtl8192_prepare_beacon(struct r8192_priv *priv)
skb = ieee80211_get_beacon(priv->ieee80211);
tcb_desc = (cb_desc *)(skb->cb + 8);
- //printk("===========> %s\n", __FUNCTION__);
//spin_lock_irqsave(&priv->tx_lock,flags);
/* prepare misc info for the beacon xmit */
tcb_desc->queue_index = BEACON_QUEUE;
@@ -3825,7 +3492,8 @@ static void rtl8192_prepare_beacon(struct r8192_priv *priv)
}
-/* this configures registers for beacon tx and enables it via
+/*
+ * configure registers for beacon tx and enables it via
* rtl8192_beacon_tx_enable(). rtl8192_beacon_tx_disable() might
* be used to stop beacon transmission
*/
@@ -3876,11 +3544,6 @@ static void rtl8192_start_beacon(struct net_device *dev)
/* enable the interrupt for ad-hoc process */
rtl8192_irq_enable(dev);
}
-/***************************************************************************
- -------------------------------NET STUFF---------------------------
-***************************************************************************/
-
-
static bool HalTxCheckStuck8190Pci(struct net_device *dev)
{
@@ -3897,9 +3560,8 @@ static bool HalTxCheckStuck8190Pci(struct net_device *dev)
}
/*
-* <Assumption: RT_TX_SPINLOCK is acquired.>
-* First added: 2006.11.19 by emily
-*/
+ * Assumption: RT_TX_SPINLOCK is acquired.
+ */
static RESET_TYPE
TxCheckStuck(struct net_device *dev)
{
@@ -3908,12 +3570,10 @@ TxCheckStuck(struct net_device *dev)
ptx_ring head=NULL,tail=NULL,txring = NULL;
u8 ResetThreshold = NIC_SEND_HANG_THRESHOLD_POWERSAVE;
bool bCheckFwTxCnt = false;
- //unsigned long flags;
//
// Decide Stuch threshold according to current power save mode
//
- //printk("++++++++++++>%s()\n",__FUNCTION__);
switch (priv->ieee80211->dot11PowerSaveMode)
{
// The threshold value may required to be adjusted .
@@ -4246,15 +3906,12 @@ static void CamRestoreAllEntry(struct net_device *dev)
}
}
-void rtl8192_cancel_deferred_work(struct r8192_priv* priv);
-int _rtl8192_up(struct net_device *dev);
-
/*
* This function is used to fix Tx/Rx stop bug temporarily.
* This function will do "system reset" to NIC when Tx or Rx is stuck.
* The method checking Tx/Rx stuck of this function is supported by FW,
* which reports Tx and Rx counter to register 0x128 and 0x130.
- * */
+ */
static void rtl819x_ifsilentreset(struct net_device *dev)
{
struct r8192_priv *priv = ieee80211_priv(dev);
@@ -4387,7 +4044,6 @@ void InactivePsWorkItemCallback(struct net_device *dev)
{
struct r8192_priv *priv = ieee80211_priv(dev);
PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->ieee80211->PowerSaveControl));
- //u8 index = 0;
RT_TRACE(COMP_POWER, "InactivePsWorkItemCallback() ---------> \n");
//
@@ -4400,7 +4056,7 @@ void InactivePsWorkItemCallback(struct net_device *dev)
//
pPSC->bSwRfProcessing = TRUE;
- RT_TRACE(COMP_RF, "InactivePsWorkItemCallback(): Set RF to %s.\n", \
+ RT_TRACE(COMP_RF, "InactivePsWorkItemCallback(): Set RF to %s.\n",
pPSC->eInactivePowerState == eRfOff?"OFF":"ON");
@@ -4414,15 +4070,10 @@ void InactivePsWorkItemCallback(struct net_device *dev)
}
#ifdef ENABLE_LPS
-//
-// Change current and default preamble mode.
-// 2005.01.06, by rcnjko.
-//
+/* Change current and default preamble mode. */
bool MgntActSet_802_11_PowerSaveMode(struct net_device *dev, u8 rtPsMode)
{
struct r8192_priv *priv = ieee80211_priv(dev);
- //PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->ieee80211->PowerSaveControl));
- //u8 RpwmVal, FwPwrMode;
// Currently, we do not change power save mode on IBSS mode.
if(priv->ieee80211->iw_mode == IW_MODE_ADHOC)
@@ -4464,14 +4115,7 @@ bool MgntActSet_802_11_PowerSaveMode(struct net_device *dev, u8 rtPsMode)
return true;
}
-//================================================================================
-// Leisure Power Save in linked state.
-//================================================================================
-
-//
-// Description:
-// Enter the leisure power save mode.
-//
+/* Enter the leisure power save mode. */
void LeisurePSEnter(struct net_device *dev)
{
struct r8192_priv *priv = ieee80211_priv(dev);
@@ -4507,20 +4151,12 @@ void LeisurePSEnter(struct net_device *dev)
}
-//
-// Description:
-// Leave the leisure power save mode.
-//
+/* Leave leisure power save mode. */
void LeisurePSLeave(struct net_device *dev)
{
struct r8192_priv *priv = ieee80211_priv(dev);
PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->ieee80211->PowerSaveControl));
-
- //RT_TRACE(COMP_PS, "LeisurePSLeave()...\n");
- //RT_TRACE(COMP_PS, "pPSC->bLeisurePs = %d, ieee->ps = %d\n",
- // pPSC->bLeisurePs, priv->ieee80211->ps);
-
if (pPSC->bLeisurePs)
{
if(priv->ieee80211->ps != IEEE80211_PS_DISABLED)
@@ -4535,11 +4171,7 @@ void LeisurePSLeave(struct net_device *dev)
#endif
-//
-// Description:
-// Enter the inactive power save mode. RF will be off
-// 2007.08.17, by shien chang.
-//
+/* Enter the inactive power save mode. RF will be off */
void
IPSEnter(struct net_device *dev)
{
@@ -4673,7 +4305,7 @@ static void rtl819x_watchdog_wqcallback(struct work_struct *work)
static u8 last_time = 0;
bool bEnterPS = false;
- if((!priv->up) || (priv->bHwRadioOff == true))
+ if ((!priv->up) || priv->bHwRadioOff)
return;
if(!priv->up)
@@ -4683,8 +4315,8 @@ static void rtl819x_watchdog_wqcallback(struct work_struct *work)
// printk("watch_dog ENABLE_IPS\n");
if(ieee->actscanning == false){
//printk("%d,%d,%d,%d\n", ieee->eRFPowerState, ieee->is_set_key, ieee->proto_stoppping, ieee->wx_set_enc);
- if((ieee->iw_mode == IW_MODE_INFRA) && (ieee->state == IEEE80211_NOLINK) &&\
- (ieee->eRFPowerState == eRfOn)&&!ieee->is_set_key &&\
+ if((ieee->iw_mode == IW_MODE_INFRA) && (ieee->state == IEEE80211_NOLINK) &&
+ (ieee->eRFPowerState == eRfOn)&&!ieee->is_set_key &&
(!ieee->proto_stoppping) && !ieee->wx_set_enc){
if(ieee->PowerSaveControl.ReturnPoint == IPS_CALLBACK_NONE){
//printk("====================>haha:IPSEnter()\n");
@@ -4811,7 +4443,8 @@ void watch_dog_timer_callback(unsigned long data)
mod_timer(&priv->watch_dog_timer, jiffies + MSECS(IEEE80211_WATCH_DOG_TIME));
}
-int _rtl8192_up(struct net_device *dev)
+
+static int _rtl8192_up(struct net_device *dev)
{
struct r8192_priv *priv = ieee80211_priv(dev);
//int i;
@@ -4886,11 +4519,7 @@ static int rtl8192_close(struct net_device *dev)
int rtl8192_down(struct net_device *dev)
{
struct r8192_priv *priv = ieee80211_priv(dev);
-// int i;
-#if 0
- u8 ucRegRead;
- u32 ulRegRead;
-#endif
+
if (priv->up == 0) return -1;
#ifdef ENABLE_LPS
@@ -4907,31 +4536,6 @@ int rtl8192_down(struct net_device *dev)
netif_stop_queue(dev);
rtl8192_irq_disable(dev);
-#if 0
- if(!priv->ieee80211->bSupportRemoteWakeUp) {
- MgntActSet_RF_State(dev, eRfOff, RF_CHANGE_BY_INIT);
- // 2006.11.30. System reset bit
- ulRegRead = read_nic_dword(dev, CPU_GEN);
- ulRegRead|=CPU_GEN_SYSTEM_RESET;
- write_nic_dword(dev, CPU_GEN, ulRegRead);
- } else {
- //2008.06.03 for WOL
- write_nic_dword(dev, WFCRC0, 0xffffffff);
- write_nic_dword(dev, WFCRC1, 0xffffffff);
- write_nic_dword(dev, WFCRC2, 0xffffffff);
-#ifdef RTL8190P
- //GPIO 0 = TRUE
- ucRegRead = read_nic_byte(dev, GPO);
- ucRegRead |= BIT0;
- write_nic_byte(dev, GPO, ucRegRead);
-#endif
- //Write PMR register
- write_nic_byte(dev, PMR, 0x5);
- //Disable tx, enanble rx
- write_nic_byte(dev, MacBlkCtrl, 0xa);
- }
-#endif
-// flush_scheduled_work();
rtl8192_cancel_deferred_work(priv);
deinit_hal_dm(dev);
del_timer_sync(&priv->watch_dog_timer);
@@ -4943,7 +4547,7 @@ int rtl8192_down(struct net_device *dev)
RT_TRACE(COMP_DOWN, "<==========%s()\n", __FUNCTION__);
- return 0;
+ return 0;
}
@@ -4961,7 +4565,7 @@ void rtl8192_commit(struct net_device *dev)
_rtl8192_up(dev);
}
-void rtl8192_restart(struct work_struct *work)
+static void rtl8192_restart(struct work_struct *work)
{
struct r8192_priv *priv = container_of(work, struct r8192_priv, reset_wq);
struct net_device *dev = priv->ieee80211->dev;
@@ -5187,21 +4791,7 @@ static u8 HwRateToMRate90(bool bIsHT, u8 rate)
return ret_rate;
}
-/**
- * Function: UpdateRxPktTimeStamp
- * Overview: Recored down the TSF time stamp when receiving a packet
- *
- * Input:
- * PADAPTER Adapter
- * PRT_RFD pRfd,
- *
- * Output:
- * PRT_RFD pRfd
- * (pRfd->Status.TimeStampHigh is updated)
- * (pRfd->Status.TimeStampLow is updated)
- * Return:
- * None
- */
+/* Record the TSF time stamp when receiving a packet */
static void UpdateRxPktTimeStamp8190 (struct net_device *dev, struct ieee80211_rx_stats *stats)
{
struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
@@ -5226,16 +4816,14 @@ static long rtl819x_translate_todbm(u8 signal_strength_index)// 0-100 index.
return signal_power;
}
-//
-// Description:
-// Update Rx signal related information in the packet reeived
-// to RxStats. User application can query RxStats to realize
-// current Rx signal status.
-//
-// Assumption:
-// In normal operation, user only care about the information of the BSS
-// and we shall invoke this function if the packet received is from the BSS.
-//
+/*
+ * Update Rx signal related information in the packet reeived
+ * to RxStats. User application can query RxStats to realize
+ * current Rx signal status.
+ *
+ * In normal operation, user only care about the information of the BSS
+ * and we shall invoke this function if the packet received is from the BSS.
+ */
static void
rtl819x_update_rxsignalstatistics8190pci(
struct r8192_priv * priv,
@@ -5577,22 +5165,6 @@ static void rtl8192_process_phyinfo(struct r8192_priv * priv, u8* buffer,struct
}
-/*-----------------------------------------------------------------------------
- * Function: rtl819x_query_rxpwrpercentage()
- *
- * Overview:
- *
- * Input: char antpower
- *
- * Output: NONE
- *
- * Return: 0-100 percentage
- *
- * Revised History:
- * When Who Remark
- * 05/26/2008 amy Create Version 0 porting from windows code.
- *
- *---------------------------------------------------------------------------*/
static u8 rtl819x_query_rxpwrpercentage(
char antpower
)
@@ -5610,7 +5182,7 @@ static u8 rtl819x_query_rxpwrpercentage(
return (100+antpower);
}
-} /* QueryRxPwrPercentage */
+}
static u8
rtl819x_evm_dbtopercentage(
@@ -5629,14 +5201,10 @@ rtl819x_evm_dbtopercentage(
ret_val*=3;
if(ret_val == 99)
ret_val = 100;
- return(ret_val);
+ return ret_val;
}
-//
-// Description:
-// We want good-looking for signal strength/quality
-// 2007/7/19 01:09, by cosa.
-//
+/* We want good-looking for signal strength/quality */
static long rtl819x_signal_scale_mapping(long currsig)
{
long retsig;
@@ -5962,7 +5530,7 @@ static void rtl8192_query_rxphystatus(
if (rf_rx_num != 0)
pstats->SignalStrength = precord_stats->SignalStrength = (u8)(rtl819x_signal_scale_mapping((long)(total_rssi/=rf_rx_num)));
}
-} /* QueryRxPhyStatus8190Pci */
+}
static void
rtl8192_record_rxdesc_forlateruse(
@@ -6072,20 +5640,7 @@ static void rtl8192_irq_tx_tasklet(struct r8192_priv *priv)
rtl8192_tx_resume(priv->ieee80211->dev);
}
-/**
-* Function: UpdateReceivedRateHistogramStatistics
-* Overview: Recored down the received data rate
-*
-* Input:
-* PADAPTER Adapter
-* PRT_RFD pRfd,
-*
-* Output:
-* PRT_TCB Adapter
-* (Adapter->RxStats.ReceivedRateHistogram[] is updated)
-* Return:
-* None
-*/
+/* Record the received data rate */
static void UpdateReceivedRateHistogramStatistics8190(
struct net_device *dev,
struct ieee80211_rx_stats* pstats
@@ -6096,11 +5651,6 @@ static void UpdateReceivedRateHistogramStatistics8190(
u32 rateIndex;
u32 preamble_guardinterval; //1: short preamble/GI, 0: long preamble/GI
- /* 2007/03/09 MH We will not update rate of packet from rx cmd queue. */
- #if 0
- if (pRfd->queue_id == CMPK_RX_QUEUE_ID)
- return;
- #endif
if(pstats->bCRC)
rcvType = 2;
else if(pstats->bICV)
@@ -6306,7 +5856,6 @@ static void rtl8192_irq_rx_tasklet(struct r8192_priv *priv)
static const struct net_device_ops rtl8192_netdev_ops = {
.ndo_open = rtl8192_open,
.ndo_stop = rtl8192_close,
-/* .ndo_get_stats = rtl8192_stats, */
.ndo_tx_timeout = tx_timeout,
.ndo_do_ioctl = rtl8192_ioctl,
.ndo_set_multicast_list = r8192_set_multicast,
@@ -6314,10 +5863,6 @@ static const struct net_device_ops rtl8192_netdev_ops = {
.ndo_start_xmit = ieee80211_rtl_xmit,
};
-/****************************************************************************
- ---------------------------- PCI_STUFF---------------------------
-*****************************************************************************/
-
static int __devinit rtl8192_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *id)
{
@@ -6325,6 +5870,7 @@ static int __devinit rtl8192_pci_probe(struct pci_dev *pdev,
struct net_device *dev = NULL;
struct r8192_priv *priv= NULL;
u8 unit = 0;
+ int ret = -ENODEV;
#ifdef CONFIG_RTL8192_IO_MAP
unsigned long pio_start, pio_len, pio_flags;
@@ -6344,8 +5890,10 @@ static int __devinit rtl8192_pci_probe(struct pci_dev *pdev,
pci_set_dma_mask(pdev, 0xffffff00ULL);
pci_set_consistent_dma_mask(pdev,0xffffff00ULL);
dev = alloc_ieee80211(sizeof(struct r8192_priv));
- if (!dev)
- return -ENOMEM;
+ if (!dev) {
+ ret = -ENOMEM;
+ goto fail_free;
+ }
pci_set_drvdata(pdev, dev);
SET_NETDEV_DEV(dev, &pdev->dev);
@@ -6494,18 +6042,19 @@ fail:
free_ieee80211(dev);
}
+fail_free:
pci_disable_device(pdev);
DMESG("wlan driver load failed\n");
pci_set_drvdata(pdev, NULL);
- return -ENODEV;
+ return ret;
}
/* detach all the work and timer structure declared or inititialized
* in r8192_init function.
* */
-void rtl8192_cancel_deferred_work(struct r8192_priv* priv)
+static void rtl8192_cancel_deferred_work(struct r8192_priv* priv)
{
/* call cancel_work_sync instead of cancel_delayed_work if and only if Linux_version_code
* is or is newer than 2.6.20 and work structure is defined to be struct work_struct.
@@ -6769,7 +6318,6 @@ static irqreturn_t rtl8192_interrupt(int irq, void *netdev)
rtl8192_try_wake_queue(dev, VO_QUEUE);
}
- force_pci_posting(dev);
spin_unlock_irqrestore(&priv->irq_th_lock,flags);
return IRQ_HANDLED;
@@ -6777,29 +6325,15 @@ static irqreturn_t rtl8192_interrupt(int irq, void *netdev)
static void rtl8192_try_wake_queue(struct net_device *dev, int pri)
{
-#if 0
- unsigned long flags;
- short enough_desc;
- struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
-
- spin_lock_irqsave(&priv->tx_lock,flags);
- enough_desc = check_nic_enough_desc(dev,pri);
- spin_unlock_irqrestore(&priv->tx_lock,flags);
-
- if(enough_desc)
- ieee80211_rtl_wake_queue(priv->ieee80211);
-#endif
}
void EnableHWSecurityConfig8192(struct net_device *dev)
{
u8 SECR_value = 0x0;
- // struct ieee80211_device* ieee1 = container_of(&dev, struct ieee80211_device, dev);
- //printk("==>ieee1:%p, dev:%p\n", ieee1, dev);
struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
- struct ieee80211_device* ieee = priv->ieee80211;
- //printk("==>ieee:%p, dev:%p\n", ieee, dev);
+ struct ieee80211_device* ieee = priv->ieee80211;
+
SECR_value = SCR_TxEncEnable | SCR_RxDecEnable;
#if 1
if (((KEY_TYPE_WEP40 == ieee->pairwise_key_type) || (KEY_TYPE_WEP104 == ieee->pairwise_key_type)) && (priv->ieee80211->auth_mode != 2))
@@ -6825,7 +6359,7 @@ void EnableHWSecurityConfig8192(struct net_device *dev)
SECR_value &= ~SCR_RxDecEnable;
}
- RT_TRACE(COMP_SEC,"%s:, hwsec:%d, pairwise_key:%d, SECR_value:%x\n", __FUNCTION__, \
+ RT_TRACE(COMP_SEC,"%s:, hwsec:%d, pairwise_key:%d, SECR_value:%x\n", __FUNCTION__,
ieee->hwsec_active, ieee->pairwise_key_type, SECR_value);
{
write_nic_byte(dev, SECR, SECR_value);//SECR_value | SCR_UseDK );
@@ -6910,26 +6444,6 @@ void setKey( struct net_device *dev,
}
RT_TRACE(COMP_SEC,"=========>after set key, usconfig:%x\n", usConfig);
}
-// This function seems not ready! WB
-void CamPrintDbgReg(struct net_device* dev)
-{
- unsigned long rvalue;
- unsigned char ucValue;
- write_nic_dword(dev, DCAM, 0x80000000);
- msleep(40);
- rvalue = read_nic_dword(dev, DCAM); //delay_ms(40);
- RT_TRACE(COMP_SEC, " TX CAM=%8lX ",rvalue);
- if((rvalue & 0x40000000) != 0x4000000)
- RT_TRACE(COMP_SEC, "-->TX Key Not Found ");
- msleep(20);
- write_nic_dword(dev, DCAM, 0x00000000); //delay_ms(40);
- rvalue = read_nic_dword(dev, DCAM); //delay_ms(40);
- RT_TRACE(COMP_SEC, "RX CAM=%8lX ",rvalue);
- if((rvalue & 0x40000000) != 0x4000000)
- RT_TRACE(COMP_SEC, "-->CAM Key Not Found ");
- ucValue = read_nic_byte(dev, SECR);
- RT_TRACE(COMP_SEC, "WPA_Config=%x \n",ucValue);
-}
bool NicIFEnableNIC(struct net_device* dev)
{
@@ -6947,7 +6461,6 @@ bool NicIFEnableNIC(struct net_device* dev)
//NicIFResetMemory(Adapter);
// <2> Enable Adapter
- //printk("===========>%s()\n",__FUNCTION__);
//priv->bfirst_init = true;
init_status = rtl8192_adapter_start(dev);
if (init_status != RT_STATUS_SUCCESS) {
@@ -6962,16 +6475,17 @@ bool NicIFEnableNIC(struct net_device* dev)
// <3> Enable Interrupt
rtl8192_irq_enable(dev);
priv->bdisable_nic = false;
- //RT_TRACE(COMP_PS,"<===========%s()\n",__FUNCTION__);
- return (init_status == RT_STATUS_SUCCESS) ? true:false;
+
+ return (init_status == RT_STATUS_SUCCESS);
}
+
bool NicIFDisableNIC(struct net_device* dev)
{
bool status = true;
struct r8192_priv* priv = ieee80211_priv(dev);
u8 tmp_state = 0;
// <1> Disable Interrupt
- //RT_TRACE(COMP_PS, "=========>%s()\n",__FUNCTION__);
+
priv->bdisable_nic = true; //YJ,move,091109
tmp_state = priv->ieee80211->state;
@@ -6985,14 +6499,9 @@ bool NicIFDisableNIC(struct net_device* dev)
// <3> Disable Adapter
rtl8192_halt_adapter(dev, false);
// priv->bdisable_nic = true;
- //RT_TRACE(COMP_PS, "<=========%s()\n",__FUNCTION__);
return status;
}
-
-/***************************************************************************
- ------------------- module init / exit stubs ----------------
-****************************************************************************/
module_init(rtl8192_pci_module_init);
module_exit(rtl8192_pci_module_exit);
OpenPOWER on IntegriCloud