*/
-#undef LOOP_TEST
#undef RX_DONT_PASS_UL
#undef DEBUG_EPROM
#undef DEBUG_RX_VERBOSE
#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"
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");
.resume = rtl8192E_resume, /* PM resume fn */
#else
.suspend = NULL, /* PM suspend fn */
- .resume = NULL, /* PM resume fn */
+ .resume = NULL, /* PM resume fn */
#endif
};
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);
}
return read_nic_dword(dev, 0xa8);
}
-////////////////////////////////////////////////////////////
#ifdef CONFIG_RTL8180_IO_MAP
u8 read_nic_byte(struct net_device *dev, int x)
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;
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;
{
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:
}
write_nic_byte(dev, MSR, btMsr);
-
- //priv->ieee80211->LedControlHandler(dev, LedAction);
}
break;
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;
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;
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]);
}
-
-///////////////////////////////////////////////////////////
-
-//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)
-{
-}
-
-
-//static struct net_device_stats *rtl8192_stats(struct net_device *dev);
-//void rtl8192_rq_tx_ack(struct work_struct *work);
-
-/****************************************************************************
- -----------------------------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)
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) {
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 */
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)
dev->name);
}
}
-/****************************************************************************
- -----------------------------MISC STUFF-------------------------
-*****************************************************************************/
short check_nic_enough_desc(struct net_device *dev, int prio)
{
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);
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);
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
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
void rtl8192_halt_adapter(struct net_device *dev, bool reset)
{
- //u8 cmd;
struct r8192_priv *priv = ieee80211_priv(dev);
int i;
u8 OpMode;
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);
}
-#else
- cmd=read_nic_byte(dev,CMDR);
- write_nic_byte(dev, CMDR, cmd &~ (CR_TE|CR_RE));
-#endif
mdelay(20);
skb_queue_purge(&priv->skb_queue);
}
-#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)
{
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 ||(!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;
+ 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).
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 ||(!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_stop_beacon(struct net_device *dev)
{
- //rtl8192_beacon_disable(dev);
}
static void rtl8192_config_rate(struct net_device* dev, u16* rate_config)
/*
* 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
* 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);
}
}
-#if 1
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);
write_nic_dword(dev, RCR, reg);
}
}
-#endif
static const struct ieee80211_qos_parameters def_qos_parameters = {
ieee->pHTInfo->bCurrentRT2RTLongSlotTime = net->bssht.bdRT2RTLongSlotTime;
rtl8192_update_cap(dev, net->capability);
}
+
/*
* background support to run QoS activate functionality
*/
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;
}
/*
-* 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)
{
}
-//updateRATRTabel for MCS only. Basic rate is not implement.
+/* updateRATRTabel for MCS only. Basic rate is not implemented. */
static void rtl8192_update_ratr_table(struct net_device* dev)
- // POCTET_STRING posLegacyRate,
- // u8* pMcsRate)
- // PRT_WLAN_STA pEntry)
{
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:
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
#endif
}
-//init priv variables here
static bool GetHalfNmodeSupportByAPs819xPci(struct net_device* dev)
{
}
return 1;
}
+
static void rtl8192_hw_sleep_down(struct net_device *dev)
{
struct r8192_priv *priv = ieee80211_priv(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;
}
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;
spin_unlock_irqrestore(&priv->ps_lock,flags);
}
+
static void rtl8192_init_priv_variable(struct net_device* dev)
{
struct r8192_priv *priv = ieee80211_priv(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;
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);
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)
{
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;
}
/*
- * 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);
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};
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;
// 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
#endif
u32 tmpRegA, tmpRegC, TempCCk;
int i =0;
-// u32 dwRegRead = 0;
RT_TRACE(COMP_INIT, "====>%s()\n", __FUNCTION__);
priv->being_init_adapter = true;
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;
}
-/* 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
*/
/* enable the interrupt for ad-hoc process */
rtl8192_irq_enable(dev);
}
-/***************************************************************************
- -------------------------------NET STUFF---------------------------
-***************************************************************************/
-
-
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)
{
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 .
* 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);
{
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");
//
}
#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)
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);
}
-//
-// 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)
#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)
{
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
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);
RT_TRACE(COMP_DOWN, "<==========%s()\n", __FUNCTION__);
- return 0;
+ return 0;
}
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);
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,
}
-/*-----------------------------------------------------------------------------
- * 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
)
return (100+antpower);
}
-} /* QueryRxPwrPercentage */
+}
static u8
rtl819x_evm_dbtopercentage(
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;
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(
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
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)
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,
.ndo_start_xmit = ieee80211_rtl_xmit,
};
-/****************************************************************************
- ---------------------------- PCI_STUFF---------------------------
-*****************************************************************************/
-
static int __devinit rtl8192_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *id)
{
rtl8192_try_wake_queue(dev, VO_QUEUE);
}
- force_pci_posting(dev);
spin_unlock_irqrestore(&priv->irq_th_lock,flags);
return IRQ_HANDLED;
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))
//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) {
// <3> Enable Interrupt
rtl8192_irq_enable(dev);
priv->bdisable_nic = false;
- //RT_TRACE(COMP_PS,"<===========%s()\n",__FUNCTION__);
+
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;
// <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);