diff options
| author | Artur Artamonov <freeartman@wechall.net> | 2013-08-21 16:52:55 +0300 |
|---|---|---|
| committer | Artur Artamonov <freeartman@wechall.net> | 2013-08-21 16:52:55 +0300 |
| commit | d4bc867ac3afd260e4256e1463b273083769a363 (patch) | |
| tree | 81c868f33d397d9b61de9ef00c8303fecc9195ca /target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_rx.h | |
| parent | 2789830761da86a4537ab198203138c082b3058e (diff) | |
| parent | 6e8428d78c98c653f625aa0839437359306f99db (diff) | |
Merge branch 'realtek-unstable' of git://213.175.90.206/openwrt-realtek into realtek-unstable
Diffstat (limited to 'target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_rx.h')
| -rw-r--r-- | target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_rx.h | 110 |
1 files changed, 108 insertions, 2 deletions
diff --git a/target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_rx.h b/target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_rx.h index d85f80965..4e65f9dcf 100644 --- a/target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_rx.h +++ b/target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_rx.h @@ -30,6 +30,69 @@ INIT_LIST_HEAD(&(pinfo->rx_list)); \ } while(0) + +#ifdef CONFIG_WLAN_HAL +#define ALIGN_OFFSET_SKB_DATA 32 //It is necessary to be power of 2 +#define GetOffsetStartToRXDESC(priv, pskb) (ALIGN_OFFSET_SKB_DATA - ((((unsigned long)pskb->data) + sizeof(struct rx_frinfo)) & (ALIGN_OFFSET_SKB_DATA-1))) + + +static __inline__ +__MIPS16 +__IRAM_IN_865X +void init_rxdesc_88XX( + struct rtl8192cd_priv *priv, + struct sk_buff *pskb, + u2Byte i, + pu4Byte pBufAddr, // output + pu4Byte pBufLen // output + ) +{ + struct rtl8192cd_hw *phw; + struct rx_frinfo *pfrinfo; + u4Byte offset; + + phw = GET_HW(priv); + + offset = GetOffsetStartToRXDESC(priv, pskb); + skb_reserve(pskb, sizeof(struct rx_frinfo) + offset); + pfrinfo = get_pfrinfo(pskb); + init_frinfo(pfrinfo); + +#if defined(UNIVERSAL_REPEATER) || defined(MBSSID) + pfrinfo->is_br_mgnt = 0; +#endif +#ifdef RX_BUFFER_GATHER + pfrinfo->gather_flag = 0; +#endif + phw->rx_infoL[i].pbuf = (void *)pskb; + phw->rx_infoL[i].paddr = get_physical_addr(priv, pskb->data, (RX_BUF_LEN - sizeof(struct rx_frinfo) - offset), PCI_DMA_FROMDEVICE); + + *pBufAddr = (u4Byte)pskb->data; +#if 0 + *pBufLen = RX_BUF_LEN - sizeof(struct rx_frinfo) - offset; +#else + + //3 this buf len must be 32 byte alignment in 8881A !!!!, If not, the fs/ls mechanism will be fail + *pBufLen = RX_BUF_LEN - sizeof(struct rx_frinfo) - 64; +#ifdef CONFIG_WLAN_HAL_8881A + if(GET_CHIP_VER(priv) == VERSION_8881A) { + if ((*pBufLen & 0x1f) != 0) { + *pBufLen = (((*pBufLen) >> 5) << 5); // *pBufLen = *pBufLen / 32 * 32; + //printk("%s(%d): RX_BUF_LEN(%d) must be 32 byte alignment !!! \n", __FUNCTION__, __LINE__, *pBufLen); + } + } +#endif + +#endif + +#if defined(CONFIG_NET_PCI) && !defined(USE_RTL8186_SDK) + rtl_cache_sync_wback(priv, bus_to_virt(phw->rx_infoL[i].paddr), RX_BUF_LEN - sizeof(struct rx_frinfo) - offset, PCI_DMA_FROMDEVICE); +#else + rtl_cache_sync_wback(priv, phw->rx_infoL[i].paddr, RX_BUF_LEN - sizeof(struct rx_frinfo) - offset, PCI_DMA_FROMDEVICE); +#endif +} +#endif //CONFIG_WLAN_HAL + static __inline__ void init_rxdesc(struct sk_buff *pskb, int i, struct rtl8192cd_priv *priv) { struct rtl8192cd_hw *phw; @@ -52,7 +115,11 @@ static __inline__ void init_rxdesc(struct sk_buff *pskb, int i, struct rtl8192cd phw->rx_infoL[i].pbuf = (void *)pskb; phw->rx_infoL[i].paddr = get_physical_addr(priv, pskb->data, (RX_BUF_LEN - sizeof(struct rx_frinfo)), PCI_DMA_FROMDEVICE); phw->rx_descL[i].Dword6 = set_desc(phw->rx_infoL[i].paddr); - rtl_cache_sync_wback(priv, phw->rx_infoL[i].paddr, RX_BUF_LEN - sizeof(struct rx_frinfo)-64, PCI_DMA_FROMDEVICE); +#if defined(CONFIG_NET_PCI) && !defined(USE_RTL8186_SDK) + rtl_cache_sync_wback(priv, (unsigned long)bus_to_virt(phw->rx_infoL[i].paddr), RX_BUF_LEN - sizeof(struct rx_frinfo)-64, PCI_DMA_FROMDEVICE); +#else + rtl_cache_sync_wback(priv, (unsigned long)(phw->rx_infoL[i].paddr), RX_BUF_LEN - sizeof(struct rx_frinfo)-64, PCI_DMA_FROMDEVICE); +#endif phw->rx_descL[i].Dword0 = set_desc((i == (NUM_RX_DESC - 1)? RX_EOR : 0) | RX_OWN |((RX_BUF_LEN - sizeof(struct rx_frinfo)-64) & RX_PktLenMask)); //32 for alignment, 32 for TKIP MIC } @@ -84,10 +151,27 @@ static __inline__ void update_sta_rssi(struct rtl8192cd_priv *priv, if (priv->pshare->rf_ft_var.rssi_dump) { priv->pshare->mp_rssi = cal_rssi_avg(priv->pshare->mp_rssi, pfrinfo->rssi); priv->pshare->mp_sq = pfrinfo->sq; +#ifdef USE_OUT_SRC +#ifdef _OUTSRC_COEXIST + if(IS_OUTSRC_CHIP(priv)) +#endif + { + for (i=0; i<2; i++) + priv->pshare->mp_rf_info.mimorssi[i] = cal_rssi_avg(priv->pshare->mp_rf_info.mimorssi[i], pfrinfo->rf_info.mimorssi[i]); + memcpy(&priv->pshare->mp_rf_info.mimosq[0], &pfrinfo->rf_info.mimosq[0], sizeof(struct rf_misc_info) - 2); + } +#endif +#if !defined(USE_OUT_SRC) || defined(_OUTSRC_COEXIST) +#ifdef _OUTSRC_COEXIST + if(!IS_OUTSRC_CHIP(priv)) +#endif + { for (i=0; i<2; i++) priv->pshare->mp_rf_info.mimorssi[i] = cal_rssi_avg(priv->pshare->mp_rf_info.mimorssi[i], pfrinfo->rf_info.mimorssi[i]); memcpy(&priv->pshare->mp_rf_info.mimosq[0], &pfrinfo->rf_info.mimosq[0], sizeof(struct rf_misc_info) - 2); } +#endif + } return; } #endif @@ -95,7 +179,7 @@ static __inline__ void update_sta_rssi(struct rtl8192cd_priv *priv, if (pfrinfo->physt) { if (pfrinfo->rssi) { -#if defined(HW_ANT_SWITCH) +#if defined(HW_ANT_SWITCH)&& (defined(CONFIG_RTL_92C_SUPPORT) || defined(CONFIG_RTL_92D_SUPPORT)) if (pfrinfo->driver_info_size > 0) { unsigned char *phystatus = (unsigned char*)pfrinfo->driver_info; int i = 1&(phystatus[27]>>7); @@ -123,12 +207,34 @@ static __inline__ void update_sta_rssi(struct rtl8192cd_priv *priv, pstat->rx_bw = pfrinfo->rx_bw; pstat->rx_splcp = pfrinfo->rx_splcp; + +#ifdef USE_OUT_SRC +#ifdef _OUTSRC_COEXIST + if(IS_OUTSRC_CHIP(priv)) +#endif + { + if (pfrinfo->rf_info.mimorssi[0] != 0) + for (i=0; i<2; i++) + pstat->rf_info.mimorssi[i] = cal_rssi_avg(pstat->rf_info.mimorssi[i], pfrinfo->rf_info.mimorssi[i]); + + if (priv->pshare->rf_ft_var.rssi_dump) + memcpy(&pstat->rf_info.mimosq[0], &pfrinfo->rf_info.mimosq[0], sizeof(struct rf_misc_info) - 2); + } +#endif + +#if !defined(USE_OUT_SRC) || defined(_OUTSRC_COEXIST) +#ifdef _OUTSRC_COEXIST + if(!IS_OUTSRC_CHIP(priv)) +#endif + { if (pfrinfo->rf_info.mimorssi[0] != 0) for (i=0; i<2; i++) pstat->rf_info.mimorssi[i] = cal_rssi_avg(pstat->rf_info.mimorssi[i], pfrinfo->rf_info.mimorssi[i]); if (priv->pshare->rf_ft_var.rssi_dump) memcpy(&pstat->rf_info.mimosq[0], &pfrinfo->rf_info.mimosq[0], sizeof(struct rf_misc_info) - 2); + } +#endif if (pstat->highest_rx_rate < pstat->rx_rate) pstat->highest_rx_rate = pstat->rx_rate; |
