diff options
Diffstat (limited to 'drivers/staging/rtl8192e/r8192E_core.c')
-rw-r--r-- | drivers/staging/rtl8192e/r8192E_core.c | 1423 |
1 files changed, 466 insertions, 957 deletions
diff --git a/drivers/staging/rtl8192e/r8192E_core.c b/drivers/staging/rtl8192e/r8192E_core.c index 17a806f9ee77..a202194b5cbb 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); |