mirror of
https://github.com/lwfinger/rtl8188eu.git
synced 2025-02-08 07:42:49 +00:00
rtl8188eu: Fix some sparse warnings
The driver did not work on PowerPC, which is big endian. This patch fixes all the sparse warnings concerning improper use of __le16 and __le32 variables. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
This commit is contained in:
parent
77e8b5de91
commit
7c7f632ac7
25 changed files with 502 additions and 684 deletions
|
@ -96,7 +96,7 @@ static void update_BCNTIM(struct adapter *padapter)
|
||||||
if(true)
|
if(true)
|
||||||
{
|
{
|
||||||
u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
|
u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
|
||||||
u16 tim_bitmap_le;
|
__le16 tim_bitmap_le;
|
||||||
uint offset, tmp_len, tim_ielen, tim_ie_offset, remainder_ielen;
|
uint offset, tmp_len, tim_ielen, tim_ie_offset, remainder_ielen;
|
||||||
|
|
||||||
tim_bitmap_le = cpu_to_le16(pstapriv->tim_bitmap);
|
tim_bitmap_le = cpu_to_le16(pstapriv->tim_bitmap);
|
||||||
|
@ -932,7 +932,7 @@ static void update_hw_ht_param(struct adapter *padapter)
|
||||||
//
|
//
|
||||||
// Config SM Power Save setting
|
// Config SM Power Save setting
|
||||||
//
|
//
|
||||||
pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & 0x0C) >> 2;
|
pmlmeinfo->SM_PS = (le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info) & 0x0C) >> 2;
|
||||||
if(pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
|
if(pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
|
||||||
{
|
{
|
||||||
/*u8 i;
|
/*u8 i;
|
||||||
|
@ -2008,7 +2008,7 @@ static int rtw_ht_operation_update(struct adapter *padapter)
|
||||||
if (pmlmepriv->num_sta_no_ht ||
|
if (pmlmepriv->num_sta_no_ht ||
|
||||||
(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT))
|
(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT))
|
||||||
new_op_mode = OP_MODE_MIXED;
|
new_op_mode = OP_MODE_MIXED;
|
||||||
else if ((phtpriv_ap->ht_cap.cap_info & IEEE80211_HT_CAP_SUP_WIDTH)
|
else if ((le16_to_cpu(phtpriv_ap->ht_cap.cap_info) & IEEE80211_HT_CAP_SUP_WIDTH)
|
||||||
&& pmlmepriv->num_sta_ht_20mhz)
|
&& pmlmepriv->num_sta_ht_20mhz)
|
||||||
new_op_mode = OP_MODE_20MHZ_HT_STA_ASSOCED;
|
new_op_mode = OP_MODE_20MHZ_HT_STA_ASSOCED;
|
||||||
else if (pmlmepriv->olbc_ht)
|
else if (pmlmepriv->olbc_ht)
|
||||||
|
|
|
@ -785,6 +785,7 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
{
|
{
|
||||||
unsigned short protocol;
|
unsigned short protocol;
|
||||||
unsigned char networkAddr[MAX_NETWORK_ADDR_LEN];
|
unsigned char networkAddr[MAX_NETWORK_ADDR_LEN];
|
||||||
|
u32 tmp;
|
||||||
|
|
||||||
if(skb == NULL)
|
if(skb == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -792,7 +793,7 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
if((method <= NAT25_MIN) || (method >= NAT25_MAX))
|
if((method <= NAT25_MIN) || (method >= NAT25_MAX))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
protocol = *((unsigned short *)(skb->data + 2 * ETH_ALEN));
|
protocol = be16_to_cpu(*((__be16 *)(skb->data + 2 * ETH_ALEN)));
|
||||||
|
|
||||||
/*---------------------------------------------------*/
|
/*---------------------------------------------------*/
|
||||||
/* Handle IP frame */
|
/* Handle IP frame */
|
||||||
|
@ -807,61 +808,61 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(method)
|
switch(method) {
|
||||||
{
|
case NAT25_CHECK:
|
||||||
case NAT25_CHECK:
|
return -1;
|
||||||
return -1;
|
|
||||||
|
|
||||||
case NAT25_INSERT:
|
case NAT25_INSERT:
|
||||||
{
|
{
|
||||||
//some muticast with source IP is all zero, maybe other case is illegal
|
tmp = be32_to_cpu(iph->saddr);
|
||||||
//in class A, B, C, host address is all zero or all one is illegal
|
//some muticast with source IP is all zero, maybe other case is illegal
|
||||||
if (iph->saddr == 0)
|
//in class A, B, C, host address is all zero or all one is illegal
|
||||||
return 0;
|
if (iph->saddr == 0)
|
||||||
DEBUG_INFO("NAT25: Insert IP, SA=%08x, DA=%08x\n", iph->saddr, iph->daddr);
|
return 0;
|
||||||
__nat25_generate_ipv4_network_addr(networkAddr, &iph->saddr);
|
DEBUG_INFO("NAT25: Insert IP, SA=%08x, DA=%08x\n", iph->saddr, iph->daddr);
|
||||||
//record source IP address and , source mac address into db
|
__nat25_generate_ipv4_network_addr(networkAddr, &tmp);
|
||||||
__nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr);
|
//record source IP address and , source mac address into db
|
||||||
|
__nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr);
|
||||||
|
|
||||||
__nat25_db_print(priv);
|
__nat25_db_print(priv);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case NAT25_LOOKUP:
|
case NAT25_LOOKUP:
|
||||||
{
|
{
|
||||||
DEBUG_INFO("NAT25: Lookup IP, SA=%08x, DA=%08x\n", iph->saddr, iph->daddr);
|
DEBUG_INFO("NAT25: Lookup IP, SA=%08x, DA=%08x\n", iph->saddr, iph->daddr);
|
||||||
#ifdef SUPPORT_TX_MCAST2UNI
|
#ifdef SUPPORT_TX_MCAST2UNI
|
||||||
if (priv->pshare->rf_ft_var.mc2u_disable ||
|
if (priv->pshare->rf_ft_var.mc2u_disable ||
|
||||||
((((OPMODE & (WIFI_STATION_STATE|WIFI_ASOC_STATE))
|
((((OPMODE & (WIFI_STATION_STATE|WIFI_ASOC_STATE)) ==
|
||||||
== (WIFI_STATION_STATE|WIFI_ASOC_STATE)) &&
|
(WIFI_STATION_STATE|WIFI_ASOC_STATE)) &&
|
||||||
!checkIPMcAndReplace(priv, skb, &iph->daddr)) ||
|
!checkIPMcAndReplace(priv, skb, &iph->daddr)) ||
|
||||||
(OPMODE & WIFI_ADHOC_STATE)))
|
(OPMODE & WIFI_ADHOC_STATE)))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
__nat25_generate_ipv4_network_addr(networkAddr, &iph->daddr);
|
tmp = be32_to_cpu(iph->daddr);
|
||||||
|
__nat25_generate_ipv4_network_addr(networkAddr, &tmp);
|
||||||
|
|
||||||
if (!__nat25_db_network_lookup_and_replace(priv, skb, networkAddr)) {
|
if (!__nat25_db_network_lookup_and_replace(priv, skb, networkAddr)) {
|
||||||
if (*((unsigned char *)&iph->daddr + 3) == 0xff) {
|
if (*((unsigned char *)&iph->daddr + 3) == 0xff) {
|
||||||
// L2 is unicast but L3 is broadcast, make L2 bacome broadcast
|
// L2 is unicast but L3 is broadcast, make L2 bacome broadcast
|
||||||
DEBUG_INFO("NAT25: Set DA as boardcast\n");
|
DEBUG_INFO("NAT25: Set DA as boardcast\n");
|
||||||
memset(skb->data, 0xff, ETH_ALEN);
|
memset(skb->data, 0xff, ETH_ALEN);
|
||||||
}
|
} else {
|
||||||
else {
|
// forward unknow IP packet to upper TCP/IP
|
||||||
// forward unknow IP packet to upper TCP/IP
|
DEBUG_INFO("NAT25: Replace DA with BR's MAC\n");
|
||||||
DEBUG_INFO("NAT25: Replace DA with BR's MAC\n");
|
if ( (*(u32 *)priv->br_mac) == 0 && (*(u16 *)(priv->br_mac+4)) == 0 ) {
|
||||||
if ( (*(u32 *)priv->br_mac) == 0 && (*(u16 *)(priv->br_mac+4)) == 0 ) {
|
printk("Re-init netdev_br_init() due to br_mac==0!\n");
|
||||||
printk("Re-init netdev_br_init() due to br_mac==0!\n");
|
netdev_br_init(priv->pnetdev);
|
||||||
netdev_br_init(priv->pnetdev);
|
|
||||||
}
|
|
||||||
memcpy(skb->data, priv->br_mac, ETH_ALEN);
|
|
||||||
}
|
}
|
||||||
|
memcpy(skb->data, priv->br_mac, ETH_ALEN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1598,7 +1599,7 @@ void dhcp_flag_bcast(struct adapter *priv, struct sk_buff *skb)
|
||||||
|
|
||||||
if(!priv->ethBrExtInfo.dhcp_bcst_disable)
|
if(!priv->ethBrExtInfo.dhcp_bcst_disable)
|
||||||
{
|
{
|
||||||
unsigned short protocol = *((unsigned short *)(skb->data + 2 * ETH_ALEN));
|
__be16 protocol = *((__be16 *)(skb->data + 2 * ETH_ALEN));
|
||||||
|
|
||||||
if(protocol == __constant_htons(ETH_P_IP)) // IP
|
if(protocol == __constant_htons(ETH_P_IP)) // IP
|
||||||
{
|
{
|
||||||
|
|
|
@ -417,20 +417,20 @@ int rtw_generate_ie(struct registry_priv *pregistrypriv)
|
||||||
ie += sz;
|
ie += sz;
|
||||||
|
|
||||||
//beacon interval : 2bytes
|
//beacon interval : 2bytes
|
||||||
*(u16*)ie = cpu_to_le16((u16)pdev_network->Configuration.BeaconPeriod);//BCN_INTERVAL;
|
*(__le16*)ie = cpu_to_le16((u16)pdev_network->Configuration.BeaconPeriod);//BCN_INTERVAL;
|
||||||
sz += 2;
|
sz += 2;
|
||||||
ie += 2;
|
ie += 2;
|
||||||
|
|
||||||
//capability info
|
//capability info
|
||||||
*(u16*)ie = 0;
|
*(u16*)ie = 0;
|
||||||
|
|
||||||
*(u16*)ie |= cpu_to_le16(cap_IBSS);
|
*(__le16*)ie |= cpu_to_le16(cap_IBSS);
|
||||||
|
|
||||||
if(pregistrypriv->preamble == PREAMBLE_SHORT)
|
if(pregistrypriv->preamble == PREAMBLE_SHORT)
|
||||||
*(u16*)ie |= cpu_to_le16(cap_ShortPremble);
|
*(__le16*)ie |= cpu_to_le16(cap_ShortPremble);
|
||||||
|
|
||||||
if (pdev_network->Privacy)
|
if (pdev_network->Privacy)
|
||||||
*(u16*)ie |= cpu_to_le16(cap_Privacy);
|
*(__le16*)ie |= cpu_to_le16(cap_Privacy);
|
||||||
|
|
||||||
sz += 2;
|
sz += 2;
|
||||||
ie += 2;
|
ie += 2;
|
||||||
|
@ -501,6 +501,7 @@ unsigned char *rtw_get_wpa_ie(unsigned char *pie, int *wpa_ie_len, int limit)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
u16 val16;
|
u16 val16;
|
||||||
|
__le16 le_tmp;
|
||||||
unsigned char wpa_oui_type[] = {0x00, 0x50, 0xf2, 0x01};
|
unsigned char wpa_oui_type[] = {0x00, 0x50, 0xf2, 0x01};
|
||||||
u8 *pbuf = pie;
|
u8 *pbuf = pie;
|
||||||
int limit_new = limit;
|
int limit_new = limit;
|
||||||
|
@ -518,9 +519,9 @@ unsigned char *rtw_get_wpa_ie(unsigned char *pie, int *wpa_ie_len, int limit)
|
||||||
}
|
}
|
||||||
|
|
||||||
//check version...
|
//check version...
|
||||||
_rtw_memcpy((u8 *)&val16, (pbuf + 6), sizeof(val16));
|
memcpy((u8 *)&le_tmp, (pbuf + 6), sizeof(val16));
|
||||||
|
|
||||||
val16 = le16_to_cpu(val16);
|
val16 = le16_to_cpu(le_tmp);
|
||||||
if (val16 != 0x0001)
|
if (val16 != 0x0001)
|
||||||
goto check_next_ie;
|
goto check_next_ie;
|
||||||
|
|
||||||
|
@ -1983,9 +1984,10 @@ void rtw_get_bcn_info(struct wlan_network *pnetwork)
|
||||||
struct rtw_ieee80211_ht_cap *pht_cap = NULL;
|
struct rtw_ieee80211_ht_cap *pht_cap = NULL;
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
|
__le16 le_tmp;
|
||||||
|
|
||||||
_rtw_memcpy((u8 *)&cap, rtw_get_capability_from_ie(pnetwork->network.IEs), 2);
|
memcpy((u8 *)&le_tmp, rtw_get_capability_from_ie(pnetwork->network.IEs), 2);
|
||||||
cap = le16_to_cpu(cap);
|
cap = le16_to_cpu(le_tmp);
|
||||||
if (cap & WLAN_CAPABILITY_PRIVACY) {
|
if (cap & WLAN_CAPABILITY_PRIVACY) {
|
||||||
bencrypt = 1;
|
bencrypt = 1;
|
||||||
pnetwork->network.Privacy = 1;
|
pnetwork->network.Privacy = 1;
|
||||||
|
@ -2017,7 +2019,7 @@ void rtw_get_bcn_info(struct wlan_network *pnetwork)
|
||||||
p = rtw_get_ie(pnetwork->network.IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, pnetwork->network.IELength - _FIXED_IE_LENGTH_);
|
p = rtw_get_ie(pnetwork->network.IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, pnetwork->network.IELength - _FIXED_IE_LENGTH_);
|
||||||
if(p && len>0) {
|
if(p && len>0) {
|
||||||
pht_cap = (struct rtw_ieee80211_ht_cap *)(p + 2);
|
pht_cap = (struct rtw_ieee80211_ht_cap *)(p + 2);
|
||||||
pnetwork->BcnInfo.ht_cap_info = pht_cap->cap_info;
|
pnetwork->BcnInfo.ht_cap_info = le16_to_cpu(pht_cap->cap_info);
|
||||||
} else {
|
} else {
|
||||||
pnetwork->BcnInfo.ht_cap_info = 0;
|
pnetwork->BcnInfo.ht_cap_info = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ u16 _rtw_read16(struct adapter *adapter, u32 addr)
|
||||||
_read16 = pintfhdl->io_ops._read16;
|
_read16 = pintfhdl->io_ops._read16;
|
||||||
|
|
||||||
r_val = _read16(pintfhdl, addr);
|
r_val = _read16(pintfhdl, addr);
|
||||||
return le16_to_cpu(r_val);
|
return r_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 _rtw_read32(struct adapter *adapter, u32 addr)
|
u32 _rtw_read32(struct adapter *adapter, u32 addr)
|
||||||
|
@ -80,7 +80,7 @@ u32 _rtw_read32(struct adapter *adapter, u32 addr)
|
||||||
_read32 = pintfhdl->io_ops._read32;
|
_read32 = pintfhdl->io_ops._read32;
|
||||||
|
|
||||||
r_val = _read32(pintfhdl, addr);
|
r_val = _read32(pintfhdl, addr);
|
||||||
return le32_to_cpu(r_val);
|
return r_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
int _rtw_write8(struct adapter *adapter, u32 addr, u8 val)
|
int _rtw_write8(struct adapter *adapter, u32 addr, u8 val)
|
||||||
|
@ -106,7 +106,6 @@ int _rtw_write16(struct adapter *adapter, u32 addr, u16 val)
|
||||||
|
|
||||||
_write16 = pintfhdl->io_ops._write16;
|
_write16 = pintfhdl->io_ops._write16;
|
||||||
|
|
||||||
val = cpu_to_le16(val);
|
|
||||||
ret = _write16(pintfhdl, addr, val);
|
ret = _write16(pintfhdl, addr, val);
|
||||||
|
|
||||||
return RTW_STATUS_CODE(ret);
|
return RTW_STATUS_CODE(ret);
|
||||||
|
@ -120,7 +119,6 @@ int _rtw_write32(struct adapter *adapter, u32 addr, u32 val)
|
||||||
int ret;
|
int ret;
|
||||||
_write32 = pintfhdl->io_ops._write32;
|
_write32 = pintfhdl->io_ops._write32;
|
||||||
|
|
||||||
val = cpu_to_le32(val);
|
|
||||||
ret = _write32(pintfhdl, addr, val);
|
ret = _write32(pintfhdl, addr, val);
|
||||||
|
|
||||||
return RTW_STATUS_CODE(ret);
|
return RTW_STATUS_CODE(ret);
|
||||||
|
@ -161,7 +159,6 @@ int _rtw_write16_async(struct adapter *adapter, u32 addr, u16 val)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
_write16_async = pintfhdl->io_ops._write16_async;
|
_write16_async = pintfhdl->io_ops._write16_async;
|
||||||
val = cpu_to_le16(val);
|
|
||||||
ret = _write16_async(pintfhdl, addr, val);
|
ret = _write16_async(pintfhdl, addr, val);
|
||||||
|
|
||||||
return RTW_STATUS_CODE(ret);
|
return RTW_STATUS_CODE(ret);
|
||||||
|
@ -175,7 +172,6 @@ int _rtw_write32_async(struct adapter *adapter, u32 addr, u32 val)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
_write32_async = pintfhdl->io_ops._write32_async;
|
_write32_async = pintfhdl->io_ops._write32_async;
|
||||||
val = cpu_to_le32(val);
|
|
||||||
ret = _write32_async(pintfhdl, addr, val);
|
ret = _write32_async(pintfhdl, addr, val);
|
||||||
|
|
||||||
return RTW_STATUS_CODE(ret);
|
return RTW_STATUS_CODE(ret);
|
||||||
|
|
|
@ -1259,8 +1259,8 @@ u16 rtw_get_cur_max_rate(struct adapter *adapter)
|
||||||
bw_40MHz = (pmlmeext->cur_bwmode && (HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH & pmlmeinfo->HT_info.infos[0])) ? 1:0;
|
bw_40MHz = (pmlmeext->cur_bwmode && (HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH & pmlmeinfo->HT_info.infos[0])) ? 1:0;
|
||||||
|
|
||||||
//short_GI = (pht_capie->cap_info&(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1:0;
|
//short_GI = (pht_capie->cap_info&(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1:0;
|
||||||
short_GI_20 = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info&IEEE80211_HT_CAP_SGI_20) ? 1:0;
|
short_GI_20 = (le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info) & IEEE80211_HT_CAP_SGI_20) ? 1 : 0;
|
||||||
short_GI_40 = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info&IEEE80211_HT_CAP_SGI_40) ? 1:0;
|
short_GI_40 = (le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info) & IEEE80211_HT_CAP_SGI_40) ? 1 : 0;
|
||||||
|
|
||||||
rtw_hal_get_hwreg(adapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
|
rtw_hal_get_hwreg(adapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
|
||||||
max_rate = rtw_mcs_rate(
|
max_rate = rtw_mcs_rate(
|
||||||
|
|
|
@ -186,7 +186,7 @@ int _rtw_IOL_append_WRF_cmd(struct xmit_frame *xmit_frame, u8 rf_path, u16 addr,
|
||||||
|
|
||||||
//RTW_PUT_LE16((u8*)&cmd.address, addr);
|
//RTW_PUT_LE16((u8*)&cmd.address, addr);
|
||||||
//RTW_PUT_LE32((u8*)&cmd.value, (u32)value);
|
//RTW_PUT_LE32((u8*)&cmd.value, (u32)value);
|
||||||
cmd.address = (rf_path<<8) |((addr) &0xFF);
|
cmd.address = cpu_to_le16((rf_path<<8) |((addr) &0xFF));
|
||||||
cmd.data = cpu_to_le32(value);
|
cmd.data = cpu_to_le32(value);
|
||||||
|
|
||||||
if(mask!=0x000FFFFF)
|
if(mask!=0x000FFFFF)
|
||||||
|
@ -226,7 +226,8 @@ int rtw_IOL_append_DELAY_MS_cmd(struct xmit_frame *xmit_frame, u16 ms)
|
||||||
}
|
}
|
||||||
int rtw_IOL_append_END_cmd(struct xmit_frame *xmit_frame)
|
int rtw_IOL_append_END_cmd(struct xmit_frame *xmit_frame)
|
||||||
{
|
{
|
||||||
struct ioreg_cfg cmd = {4,IOREG_CMD_END,0xFFFF, 0xFF,0x0};
|
struct ioreg_cfg cmd = {4,IOREG_CMD_END, cpu_to_le16(0xFFFF),
|
||||||
|
cpu_to_le32(0xFF), 0x0};
|
||||||
return rtw_IOL_append_cmds(xmit_frame, (u8*)&cmd, 4);
|
return rtw_IOL_append_cmds(xmit_frame, (u8*)&cmd, 4);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
133
core/rtw_p2p.c
133
core/rtw_p2p.c
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
#ifdef CONFIG_P2P
|
#ifdef CONFIG_P2P
|
||||||
|
|
||||||
int rtw_p2p_is_channel_list_ok( u8 desired_ch, u8* ch_list, u8 ch_cnt )
|
static int rtw_p2p_is_channel_list_ok( u8 desired_ch, u8* ch_list, u8 ch_cnt )
|
||||||
{
|
{
|
||||||
int found = 0, i = 0;
|
int found = 0, i = 0;
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ int rtw_p2p_is_channel_list_ok( u8 desired_ch, u8* ch_list, u8 ch_cnt )
|
||||||
return( found );
|
return( found );
|
||||||
}
|
}
|
||||||
|
|
||||||
int is_any_client_associated(struct adapter *padapter)
|
static int is_any_client_associated(struct adapter *padapter)
|
||||||
{
|
{
|
||||||
return padapter->stapriv.asoc_list_cnt ? true : false;
|
return padapter->stapriv.asoc_list_cnt ? true : false;
|
||||||
}
|
}
|
||||||
|
@ -152,12 +152,12 @@ static void issue_group_disc_req(struct wifidirect_info *pwdinfo, u8 *da)
|
||||||
struct pkt_attrib *pattrib;
|
struct pkt_attrib *pattrib;
|
||||||
unsigned char *pframe;
|
unsigned char *pframe;
|
||||||
struct rtw_ieee80211_hdr *pwlanhdr;
|
struct rtw_ieee80211_hdr *pwlanhdr;
|
||||||
unsigned short *fctrl;
|
__le16 *fctrl;
|
||||||
struct adapter *padapter = pwdinfo->padapter;
|
struct adapter *padapter = pwdinfo->padapter;
|
||||||
struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
|
struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
|
||||||
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
||||||
unsigned char category = RTW_WLAN_CATEGORY_P2P;//P2P action frame
|
unsigned char category = RTW_WLAN_CATEGORY_P2P;//P2P action frame
|
||||||
u32 p2poui = cpu_to_be32(P2POUI);
|
__be32 p2poui = cpu_to_be32(P2POUI);
|
||||||
u8 oui_subtype = P2P_GO_DISC_REQUEST;
|
u8 oui_subtype = P2P_GO_DISC_REQUEST;
|
||||||
u8 dialogToken=0;
|
u8 dialogToken=0;
|
||||||
|
|
||||||
|
@ -211,14 +211,14 @@ static void issue_p2p_devdisc_resp(struct wifidirect_info *pwdinfo, u8 *da, u8 s
|
||||||
struct pkt_attrib *pattrib;
|
struct pkt_attrib *pattrib;
|
||||||
unsigned char *pframe;
|
unsigned char *pframe;
|
||||||
struct rtw_ieee80211_hdr *pwlanhdr;
|
struct rtw_ieee80211_hdr *pwlanhdr;
|
||||||
unsigned short *fctrl;
|
__le16 *fctrl;
|
||||||
struct adapter *padapter = pwdinfo->padapter;
|
struct adapter *padapter = pwdinfo->padapter;
|
||||||
struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
|
struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
|
||||||
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
||||||
unsigned char category = RTW_WLAN_CATEGORY_PUBLIC;
|
unsigned char category = RTW_WLAN_CATEGORY_PUBLIC;
|
||||||
u8 action = P2P_PUB_ACTION_ACTION;
|
u8 action = P2P_PUB_ACTION_ACTION;
|
||||||
u32 p2poui = cpu_to_be32(P2POUI);
|
__be32 p2poui = cpu_to_be32(P2POUI);
|
||||||
u8 oui_subtype = P2P_DEVDISC_RESP;
|
u8 oui_subtype = P2P_DEVDISC_RESP;
|
||||||
u8 p2pie[8] = { 0x00 };
|
u8 p2pie[8] = { 0x00 };
|
||||||
u32 p2pielen = 0;
|
u32 p2pielen = 0;
|
||||||
|
|
||||||
|
@ -285,7 +285,7 @@ static void issue_p2p_provision_resp(struct wifidirect_info *pwdinfo, u8* raddr,
|
||||||
unsigned char category = RTW_WLAN_CATEGORY_PUBLIC;
|
unsigned char category = RTW_WLAN_CATEGORY_PUBLIC;
|
||||||
u8 action = P2P_PUB_ACTION_ACTION;
|
u8 action = P2P_PUB_ACTION_ACTION;
|
||||||
u8 dialogToken = frame_body[7]; // The Dialog Token of provisioning discovery request frame.
|
u8 dialogToken = frame_body[7]; // The Dialog Token of provisioning discovery request frame.
|
||||||
u32 p2poui = cpu_to_be32(P2POUI);
|
__be32 p2poui = cpu_to_be32(P2POUI);
|
||||||
u8 oui_subtype = P2P_PROVISION_DISC_RESP;
|
u8 oui_subtype = P2P_PROVISION_DISC_RESP;
|
||||||
u8 wpsie[ 100 ] = { 0x00 };
|
u8 wpsie[ 100 ] = { 0x00 };
|
||||||
u8 wpsielen = 0;
|
u8 wpsielen = 0;
|
||||||
|
@ -297,7 +297,7 @@ static void issue_p2p_provision_resp(struct wifidirect_info *pwdinfo, u8* raddr,
|
||||||
struct pkt_attrib *pattrib;
|
struct pkt_attrib *pattrib;
|
||||||
unsigned char *pframe;
|
unsigned char *pframe;
|
||||||
struct rtw_ieee80211_hdr *pwlanhdr;
|
struct rtw_ieee80211_hdr *pwlanhdr;
|
||||||
unsigned short *fctrl;
|
__le16 *fctrl;
|
||||||
struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
|
struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
|
||||||
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
||||||
|
@ -381,12 +381,12 @@ static void issue_p2p_presence_resp(struct wifidirect_info *pwdinfo, u8 *da, u8
|
||||||
struct pkt_attrib *pattrib;
|
struct pkt_attrib *pattrib;
|
||||||
unsigned char *pframe;
|
unsigned char *pframe;
|
||||||
struct rtw_ieee80211_hdr *pwlanhdr;
|
struct rtw_ieee80211_hdr *pwlanhdr;
|
||||||
unsigned short *fctrl;
|
__le16 *fctrl;
|
||||||
struct adapter *padapter = pwdinfo->padapter;
|
struct adapter *padapter = pwdinfo->padapter;
|
||||||
struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
|
struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
|
||||||
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
||||||
unsigned char category = RTW_WLAN_CATEGORY_P2P;//P2P action frame
|
unsigned char category = RTW_WLAN_CATEGORY_P2P;//P2P action frame
|
||||||
u32 p2poui = cpu_to_be32(P2POUI);
|
__be32 p2poui = cpu_to_be32(P2POUI);
|
||||||
u8 oui_subtype = P2P_PRESENCE_RESPONSE;
|
u8 oui_subtype = P2P_PRESENCE_RESPONSE;
|
||||||
u8 p2pie[ MAX_P2P_IE_LEN] = { 0x00 };
|
u8 p2pie[ MAX_P2P_IE_LEN] = { 0x00 };
|
||||||
u8 noa_attr_content[32] = { 0x00 };
|
u8 noa_attr_content[32] = { 0x00 };
|
||||||
|
@ -464,7 +464,7 @@ u32 build_beacon_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
|
||||||
u8 p2pie[ MAX_P2P_IE_LEN] = { 0x00 };
|
u8 p2pie[ MAX_P2P_IE_LEN] = { 0x00 };
|
||||||
u16 capability=0;
|
u16 capability=0;
|
||||||
u32 len=0, p2pielen = 0;
|
u32 len=0, p2pielen = 0;
|
||||||
|
__le16 le_tmp;
|
||||||
|
|
||||||
// P2P OUI
|
// P2P OUI
|
||||||
p2pielen = 0;
|
p2pielen = 0;
|
||||||
|
@ -492,28 +492,14 @@ u32 build_beacon_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
|
||||||
if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
|
if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
|
||||||
capability |= (P2P_GRPCAP_GROUP_FORMATION<<8);
|
capability |= (P2P_GRPCAP_GROUP_FORMATION<<8);
|
||||||
|
|
||||||
capability = cpu_to_le16(capability);
|
le_tmp = cpu_to_le16(capability);
|
||||||
|
|
||||||
p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_CAPABILITY, 2, (u8*)&capability);
|
|
||||||
|
|
||||||
|
p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_CAPABILITY, 2, (u8*)&le_tmp);
|
||||||
|
|
||||||
// P2P Device ID ATTR
|
// P2P Device ID ATTR
|
||||||
p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_DEVICE_ID, ETH_ALEN, pwdinfo->device_addr);
|
p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_DEVICE_ID, ETH_ALEN, pwdinfo->device_addr);
|
||||||
|
|
||||||
|
|
||||||
// Notice of Absence ATTR
|
|
||||||
// Type:
|
|
||||||
// Length:
|
|
||||||
// Value:
|
|
||||||
|
|
||||||
//go_add_noa_attr(pwdinfo);
|
|
||||||
|
|
||||||
|
|
||||||
pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &len);
|
pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &len);
|
||||||
|
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_WFD
|
#ifdef CONFIG_WFD
|
||||||
|
@ -2369,6 +2355,8 @@ u32 process_assoc_req_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pframe, uint l
|
||||||
u32 ies_len;
|
u32 ies_len;
|
||||||
u8 * p2p_ie;
|
u8 * p2p_ie;
|
||||||
u32 p2p_ielen = 0;
|
u32 p2p_ielen = 0;
|
||||||
|
__le16 le_tmp;
|
||||||
|
__be16 be_tmp;
|
||||||
|
|
||||||
if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
|
if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
|
||||||
return P2P_STATUS_FAIL_REQUEST_UNABLE;
|
return P2P_STATUS_FAIL_REQUEST_UNABLE;
|
||||||
|
@ -2401,10 +2389,10 @@ u32 process_assoc_req_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pframe, uint l
|
||||||
while ( p2p_ie )
|
while ( p2p_ie )
|
||||||
{
|
{
|
||||||
//Check P2P Capability ATTR
|
//Check P2P Capability ATTR
|
||||||
if( rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&cap_attr, (uint*) &attr_contentlen) )
|
if( rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&le_tmp, (uint*) &attr_contentlen) )
|
||||||
{
|
{
|
||||||
DBG_8192C( "[%s] Got P2P Capability Attr!!\n", __FUNCTION__ );
|
DBG_8192C( "[%s] Got P2P Capability Attr!!\n", __FUNCTION__ );
|
||||||
cap_attr = le16_to_cpu(cap_attr);
|
cap_attr = le16_to_cpu(le_tmp);
|
||||||
psta->dev_cap = cap_attr&0xff;
|
psta->dev_cap = cap_attr&0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2416,20 +2404,18 @@ u32 process_assoc_req_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pframe, uint l
|
||||||
{
|
{
|
||||||
DBG_8192C( "[%s] Got P2P DEVICE INFO Attr!!\n", __FUNCTION__ );
|
DBG_8192C( "[%s] Got P2P DEVICE INFO Attr!!\n", __FUNCTION__ );
|
||||||
pattr_content = pbuf = rtw_zmalloc(attr_contentlen);
|
pattr_content = pbuf = rtw_zmalloc(attr_contentlen);
|
||||||
if(pattr_content)
|
if(pattr_content) {
|
||||||
{
|
|
||||||
u8 num_of_secdev_type;
|
u8 num_of_secdev_type;
|
||||||
u16 dev_name_len;
|
u16 dev_name_len;
|
||||||
|
|
||||||
|
|
||||||
rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_INFO , pattr_content, (uint*)&attr_contentlen);
|
rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_INFO , pattr_content, (uint*)&attr_contentlen);
|
||||||
|
|
||||||
_rtw_memcpy(psta->dev_addr, pattr_content, ETH_ALEN);//P2P Device Address
|
_rtw_memcpy(psta->dev_addr, pattr_content, ETH_ALEN);//P2P Device Address
|
||||||
|
|
||||||
pattr_content += ETH_ALEN;
|
pattr_content += ETH_ALEN;
|
||||||
|
|
||||||
_rtw_memcpy(&psta->config_methods, pattr_content, 2);//Config Methods
|
memcpy(&be_tmp, pattr_content, 2);//Config Methods
|
||||||
psta->config_methods = be16_to_cpu(psta->config_methods);
|
psta->config_methods = be16_to_cpu(be_tmp);
|
||||||
|
|
||||||
pattr_content += 2;
|
pattr_content += 2;
|
||||||
|
|
||||||
|
@ -2460,9 +2446,9 @@ u32 process_assoc_req_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pframe, uint l
|
||||||
|
|
||||||
//dev_name_len = attr_contentlen - ETH_ALEN - 2 - 8 - 1 - (num_of_secdev_type*8);
|
//dev_name_len = attr_contentlen - ETH_ALEN - 2 - 8 - 1 - (num_of_secdev_type*8);
|
||||||
psta->dev_name_len=0;
|
psta->dev_name_len=0;
|
||||||
if(WPS_ATTR_DEVICE_NAME == be16_to_cpu(*(u16*)pattr_content))
|
if(WPS_ATTR_DEVICE_NAME == be16_to_cpu(*(__be16*)pattr_content))
|
||||||
{
|
{
|
||||||
dev_name_len = be16_to_cpu(*(u16*)(pattr_content+2));
|
dev_name_len = be16_to_cpu(*(__be16*)(pattr_content+2));
|
||||||
|
|
||||||
psta->dev_name_len = (sizeof(psta->dev_name)<dev_name_len) ? sizeof(psta->dev_name):dev_name_len;
|
psta->dev_name_len = (sizeof(psta->dev_name)<dev_name_len) ? sizeof(psta->dev_name):dev_name_len;
|
||||||
|
|
||||||
|
@ -2584,15 +2570,15 @@ u8 process_p2p_provdisc_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint l
|
||||||
u8 *wpsie;
|
u8 *wpsie;
|
||||||
uint wps_ielen = 0, attr_contentlen = 0;
|
uint wps_ielen = 0, attr_contentlen = 0;
|
||||||
u16 uconfig_method = 0;
|
u16 uconfig_method = 0;
|
||||||
|
__be16 be_tmp;
|
||||||
|
|
||||||
frame_body = (pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
|
frame_body = (pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
|
||||||
|
|
||||||
if ( (wpsie=rtw_get_wps_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &wps_ielen)) )
|
if ( (wpsie=rtw_get_wps_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &wps_ielen)) )
|
||||||
{
|
{
|
||||||
if ( rtw_get_wps_attr_content( wpsie, wps_ielen, WPS_ATTR_CONF_METHOD , ( u8* ) &uconfig_method, &attr_contentlen) )
|
if ( rtw_get_wps_attr_content( wpsie, wps_ielen, WPS_ATTR_CONF_METHOD , ( u8 *)&be_tmp, &attr_contentlen) )
|
||||||
{
|
{
|
||||||
uconfig_method = be16_to_cpu( uconfig_method );
|
uconfig_method = be16_to_cpu(be_tmp);
|
||||||
switch( uconfig_method )
|
switch( uconfig_method )
|
||||||
{
|
{
|
||||||
case WPS_CM_DISPLYA:
|
case WPS_CM_DISPLYA:
|
||||||
|
@ -2630,7 +2616,7 @@ u8 process_p2p_provdisc_resp(struct wifidirect_info *pwdinfo, u8 *pframe)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 rtw_p2p_get_peer_ch_list(struct wifidirect_info *pwdinfo, u8 *ch_content, u8 ch_cnt, u8 *peer_ch_list)
|
static u8 rtw_p2p_get_peer_ch_list(struct wifidirect_info *pwdinfo, u8 *ch_content, u8 ch_cnt, u8 *peer_ch_list)
|
||||||
{
|
{
|
||||||
u8 i = 0, j = 0;
|
u8 i = 0, j = 0;
|
||||||
u8 temp = 0;
|
u8 temp = 0;
|
||||||
|
@ -2655,7 +2641,7 @@ u8 rtw_p2p_get_peer_ch_list(struct wifidirect_info *pwdinfo, u8 *ch_content, u8
|
||||||
return ch_no;
|
return ch_no;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 rtw_p2p_check_peer_oper_ch(struct mlme_ext_priv *pmlmeext, u8 ch)
|
static u8 rtw_p2p_check_peer_oper_ch(struct mlme_ext_priv *pmlmeext, u8 ch)
|
||||||
{
|
{
|
||||||
u8 i = 0;
|
u8 i = 0;
|
||||||
|
|
||||||
|
@ -2670,7 +2656,7 @@ u8 rtw_p2p_check_peer_oper_ch(struct mlme_ext_priv *pmlmeext, u8 ch)
|
||||||
return _FAIL;
|
return _FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 rtw_p2p_ch_inclusion(struct mlme_ext_priv *pmlmeext, u8 *peer_ch_list, u8 peer_ch_num, u8 *ch_list_inclusioned)
|
static u8 rtw_p2p_ch_inclusion(struct mlme_ext_priv *pmlmeext, u8 *peer_ch_list, u8 peer_ch_num, u8 *ch_list_inclusioned)
|
||||||
{
|
{
|
||||||
int i = 0, j = 0, temp = 0;
|
int i = 0, j = 0, temp = 0;
|
||||||
u8 ch_no = 0;
|
u8 ch_no = 0;
|
||||||
|
@ -2715,6 +2701,7 @@ u8 process_p2p_group_negotation_req( struct wifidirect_info *pwdinfo, u8 *pframe
|
||||||
struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
|
struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
|
||||||
struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
|
struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
|
||||||
#endif
|
#endif
|
||||||
|
__be16 be_tmp;
|
||||||
|
|
||||||
if ( (wpsie=rtw_get_wps_ie( pframe + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &wps_ielen)) )
|
if ( (wpsie=rtw_get_wps_ie( pframe + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &wps_ielen)) )
|
||||||
{
|
{
|
||||||
|
@ -2723,8 +2710,8 @@ u8 process_p2p_group_negotation_req( struct wifidirect_info *pwdinfo, u8 *pframe
|
||||||
// We have to get peer_req_cm from here.
|
// We have to get peer_req_cm from here.
|
||||||
if(_rtw_memcmp( pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "000", 3) )
|
if(_rtw_memcmp( pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "000", 3) )
|
||||||
{
|
{
|
||||||
rtw_get_wps_attr_content( wpsie, wps_ielen, WPS_ATTR_DEVICE_PWID, (u8*) &wps_devicepassword_id, &wps_devicepassword_id_len);
|
rtw_get_wps_attr_content( wpsie, wps_ielen, WPS_ATTR_DEVICE_PWID, (u8*) &be_tmp, &wps_devicepassword_id_len);
|
||||||
wps_devicepassword_id = be16_to_cpu( wps_devicepassword_id );
|
wps_devicepassword_id = be16_to_cpu(be_tmp);
|
||||||
|
|
||||||
if ( wps_devicepassword_id == WPS_DPID_USER_SPEC )
|
if ( wps_devicepassword_id == WPS_DPID_USER_SPEC )
|
||||||
{
|
{
|
||||||
|
@ -2778,13 +2765,14 @@ u8 process_p2p_group_negotation_req( struct wifidirect_info *pwdinfo, u8 *pframe
|
||||||
u8 ch_list_inclusioned[100] = { 0x00 };
|
u8 ch_list_inclusioned[100] = { 0x00 };
|
||||||
u8 ch_num_inclusioned = 0;
|
u8 ch_num_inclusioned = 0;
|
||||||
u16 cap_attr;
|
u16 cap_attr;
|
||||||
|
__le16 le_tmp;
|
||||||
|
|
||||||
rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_ING);
|
rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_ING);
|
||||||
|
|
||||||
//Check P2P Capability ATTR
|
//Check P2P Capability ATTR
|
||||||
if(rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&cap_attr, (uint*)&attr_contentlen) )
|
if(rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&le_tmp, (uint*)&attr_contentlen) )
|
||||||
{
|
{
|
||||||
cap_attr = le16_to_cpu(cap_attr);
|
cap_attr = le16_to_cpu(le_tmp);
|
||||||
|
|
||||||
#if defined(CONFIG_WFD) && defined(CONFIG_TDLS)
|
#if defined(CONFIG_WFD) && defined(CONFIG_TDLS)
|
||||||
if(!(cap_attr & P2P_GRPCAP_INTRABSS) )
|
if(!(cap_attr & P2P_GRPCAP_INTRABSS) )
|
||||||
|
@ -2968,7 +2956,6 @@ u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pfram
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
u8 attr_content = 0x00;
|
u8 attr_content = 0x00;
|
||||||
u32 attr_contentlen = 0;
|
u32 attr_contentlen = 0;
|
||||||
u8 operatingch_info[5] = { 0x00 };
|
u8 operatingch_info[5] = { 0x00 };
|
||||||
|
@ -2980,14 +2967,15 @@ u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pfram
|
||||||
u8 peer_ch_num = 0;
|
u8 peer_ch_num = 0;
|
||||||
u8 ch_list_inclusioned[100] = { 0x00 };
|
u8 ch_list_inclusioned[100] = { 0x00 };
|
||||||
u8 ch_num_inclusioned = 0;
|
u8 ch_num_inclusioned = 0;
|
||||||
|
__le16 le_tmp;
|
||||||
|
|
||||||
while ( p2p_ie ) // Found the P2P IE.
|
while ( p2p_ie ) // Found the P2P IE.
|
||||||
{
|
{
|
||||||
|
|
||||||
//Check P2P Capability ATTR
|
//Check P2P Capability ATTR
|
||||||
if(rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&cap_attr, (uint*)&attr_contentlen) )
|
if(rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&le_tmp, (uint*)&attr_contentlen) )
|
||||||
{
|
{
|
||||||
cap_attr = le16_to_cpu(cap_attr);
|
cap_attr = le16_to_cpu(le_tmp);
|
||||||
#ifdef CONFIG_TDLS
|
#ifdef CONFIG_TDLS
|
||||||
if(!(cap_attr & P2P_GRPCAP_INTRABSS) )
|
if(!(cap_attr & P2P_GRPCAP_INTRABSS) )
|
||||||
ptdlsinfo->ap_prohibited = true;
|
ptdlsinfo->ap_prohibited = true;
|
||||||
|
@ -3303,7 +3291,7 @@ u8 process_p2p_presence_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint le
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void find_phase_handler( struct adapter* padapter )
|
static void find_phase_handler( struct adapter* padapter )
|
||||||
{
|
{
|
||||||
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
||||||
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
||||||
|
@ -3311,7 +3299,6 @@ void find_phase_handler( struct adapter* padapter )
|
||||||
_irqL irqL;
|
_irqL irqL;
|
||||||
u8 _status = 0;
|
u8 _status = 0;
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
_rtw_memset((unsigned char*)&ssid, 0, sizeof(NDIS_802_11_SSID));
|
_rtw_memset((unsigned char*)&ssid, 0, sizeof(NDIS_802_11_SSID));
|
||||||
_rtw_memcpy(ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN );
|
_rtw_memcpy(ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN );
|
||||||
|
@ -3324,17 +3311,15 @@ void find_phase_handler( struct adapter* padapter )
|
||||||
_exit_critical_bh(&pmlmepriv->lock, &irqL);
|
_exit_critical_bh(&pmlmepriv->lock, &irqL);
|
||||||
|
|
||||||
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void p2p_concurrent_handler( struct adapter* padapter );
|
void p2p_concurrent_handler( struct adapter* padapter );
|
||||||
|
|
||||||
void restore_p2p_state_handler( struct adapter* padapter )
|
static void restore_p2p_state_handler( struct adapter* padapter )
|
||||||
{
|
{
|
||||||
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
||||||
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
|
if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
|
||||||
{
|
{
|
||||||
|
@ -3369,49 +3354,39 @@ void restore_p2p_state_handler( struct adapter* padapter )
|
||||||
set_channel_bwmode( padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
|
set_channel_bwmode( padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void pre_tx_invitereq_handler( struct adapter* padapter )
|
static void pre_tx_invitereq_handler( struct adapter* padapter )
|
||||||
{
|
{
|
||||||
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
||||||
u8 val8 = 1;
|
u8 val8 = 1;
|
||||||
;
|
|
||||||
|
|
||||||
set_channel_bwmode(padapter, pwdinfo->invitereq_info.peer_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
|
set_channel_bwmode(padapter, pwdinfo->invitereq_info.peer_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
|
||||||
padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
|
padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
|
||||||
issue_probereq_p2p(padapter, NULL);
|
issue_probereq_p2p(padapter, NULL);
|
||||||
_set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
|
_set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
|
||||||
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void pre_tx_provdisc_handler( struct adapter* padapter )
|
static void pre_tx_provdisc_handler( struct adapter* padapter )
|
||||||
{
|
{
|
||||||
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
||||||
u8 val8 = 1;
|
u8 val8 = 1;
|
||||||
;
|
|
||||||
|
|
||||||
set_channel_bwmode(padapter, pwdinfo->tx_prov_disc_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
|
set_channel_bwmode(padapter, pwdinfo->tx_prov_disc_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
|
||||||
rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
|
rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
|
||||||
issue_probereq_p2p(padapter, NULL);
|
issue_probereq_p2p(padapter, NULL);
|
||||||
_set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
|
_set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
|
||||||
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void pre_tx_negoreq_handler( struct adapter* padapter )
|
static void pre_tx_negoreq_handler( struct adapter* padapter )
|
||||||
{
|
{
|
||||||
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
||||||
u8 val8 = 1;
|
u8 val8 = 1;
|
||||||
;
|
|
||||||
|
|
||||||
set_channel_bwmode(padapter, pwdinfo->nego_req_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
|
set_channel_bwmode(padapter, pwdinfo->nego_req_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
|
||||||
rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
|
rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
|
||||||
issue_probereq_p2p(padapter, NULL);
|
issue_probereq_p2p(padapter, NULL);
|
||||||
_set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
|
_set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
|
||||||
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_CONCURRENT_MODE
|
#ifdef CONFIG_CONCURRENT_MODE
|
||||||
|
@ -3423,7 +3398,6 @@ void p2p_concurrent_handler( struct adapter* padapter )
|
||||||
//struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
|
//struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
|
||||||
//struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
|
//struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
|
||||||
u8 val8;
|
u8 val8;
|
||||||
;
|
|
||||||
|
|
||||||
if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
|
if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
|
||||||
{
|
{
|
||||||
|
@ -3530,7 +3504,6 @@ void p2p_concurrent_handler( struct adapter* padapter )
|
||||||
set_channel_bwmode( padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
|
set_channel_bwmode( padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
|
||||||
}
|
}
|
||||||
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -3541,7 +3514,6 @@ static void ro_ch_handler(struct adapter *padapter)
|
||||||
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
|
||||||
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
||||||
u8 ch, bw, offset;
|
u8 ch, bw, offset;
|
||||||
;
|
|
||||||
|
|
||||||
if (rtw_get_ch_setting_union(padapter, &ch, &bw, &offset) != 0) {
|
if (rtw_get_ch_setting_union(padapter, &ch, &bw, &offset) != 0) {
|
||||||
if (0)
|
if (0)
|
||||||
|
@ -3581,7 +3553,6 @@ static void ro_ch_handler(struct adapter *padapter)
|
||||||
&pcfg80211_wdinfo->remain_on_ch_channel,
|
&pcfg80211_wdinfo->remain_on_ch_channel,
|
||||||
pcfg80211_wdinfo->remain_on_ch_type, GFP_KERNEL);
|
pcfg80211_wdinfo->remain_on_ch_type, GFP_KERNEL);
|
||||||
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ro_ch_timer_process (void *FunctionContext)
|
static void ro_ch_timer_process (void *FunctionContext)
|
||||||
|
@ -3926,7 +3897,7 @@ void rtw_append_wfd_ie(struct adapter *padapter, u8 *buf, u32* len)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
u8 *dump_p2p_attr_ch_list(u8 *p2p_ie, uint p2p_ielen, u8 *buf, u32 buf_len)
|
static u8 *dump_p2p_attr_ch_list(u8 *p2p_ie, uint p2p_ielen, u8 *buf, u32 buf_len)
|
||||||
{
|
{
|
||||||
uint attr_contentlen = 0;
|
uint attr_contentlen = 0;
|
||||||
u8 *pattr = NULL;
|
u8 *pattr = NULL;
|
||||||
|
@ -3979,7 +3950,7 @@ u8 *dump_p2p_attr_ch_list(u8 *p2p_ie, uint p2p_ielen, u8 *buf, u32 buf_len)
|
||||||
/*
|
/*
|
||||||
* return true if requester is GO, false if responder is GO
|
* return true if requester is GO, false if responder is GO
|
||||||
*/
|
*/
|
||||||
bool rtw_p2p_nego_intent_compare(u8 req, u8 resp)
|
static bool rtw_p2p_nego_intent_compare(u8 req, u8 resp)
|
||||||
{
|
{
|
||||||
if (req>>1 == resp >>1)
|
if (req>>1 == resp >>1)
|
||||||
return req&0x01 ? true : false;
|
return req&0x01 ? true : false;
|
||||||
|
@ -4373,7 +4344,6 @@ void p2p_protocol_wk_hdl(struct adapter *padapter, int intCmdType)
|
||||||
{
|
{
|
||||||
struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
|
struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
switch(intCmdType)
|
switch(intCmdType)
|
||||||
{
|
{
|
||||||
|
@ -4454,7 +4424,6 @@ void p2p_protocol_wk_hdl(struct adapter *padapter, int intCmdType)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_P2P_PS
|
#ifdef CONFIG_P2P_PS
|
||||||
|
@ -4471,7 +4440,6 @@ void process_p2p_ps_ie(struct adapter *padapter, u8 *IEs, u32 IELength)
|
||||||
u8 find_p2p = false, find_p2p_ps = false;
|
u8 find_p2p = false, find_p2p_ps = false;
|
||||||
u8 noa_offset, noa_num, noa_index;
|
u8 noa_offset, noa_num, noa_index;
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
|
if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
|
||||||
{
|
{
|
||||||
|
@ -4566,7 +4534,6 @@ void process_p2p_ps_ie(struct adapter *padapter, u8 *IEs, u32 IELength)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void p2p_ps_wk_hdl(struct adapter *padapter, u8 p2p_ps_state)
|
void p2p_ps_wk_hdl(struct adapter *padapter, u8 p2p_ps_state)
|
||||||
|
@ -4574,7 +4541,6 @@ void p2p_ps_wk_hdl(struct adapter *padapter, u8 p2p_ps_state)
|
||||||
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
|
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
|
||||||
struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
|
struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
// Pre action for p2p state
|
// Pre action for p2p state
|
||||||
switch(p2p_ps_state)
|
switch(p2p_ps_state)
|
||||||
|
@ -4626,7 +4592,6 @@ void p2p_ps_wk_hdl(struct adapter *padapter, u8 p2p_ps_state)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 p2p_ps_wk_cmd(struct adapter*padapter, u8 p2p_ps_state, u8 enqueue)
|
u8 p2p_ps_wk_cmd(struct adapter*padapter, u8 p2p_ps_state, u8 enqueue)
|
||||||
|
@ -4637,7 +4602,6 @@ u8 p2p_ps_wk_cmd(struct adapter*padapter, u8 p2p_ps_state, u8 enqueue)
|
||||||
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
|
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
|
||||||
u8 res = _SUCCESS;
|
u8 res = _SUCCESS;
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
if ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)
|
if ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)
|
||||||
#ifdef CONFIG_CONCURRENT_MODE
|
#ifdef CONFIG_CONCURRENT_MODE
|
||||||
|
@ -4670,15 +4634,12 @@ u8 p2p_ps_wk_cmd(struct adapter*padapter, u8 p2p_ps_state, u8 enqueue)
|
||||||
init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
|
init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
|
||||||
|
|
||||||
res = rtw_enqueue_cmd(pcmdpriv, ph2c);
|
res = rtw_enqueue_cmd(pcmdpriv, ph2c);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
p2p_ps_wk_hdl(padapter, p2p_ps_state);
|
p2p_ps_wk_hdl(padapter, p2p_ps_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
|
|
|
@ -693,7 +693,6 @@ union recv_frame * decryptor(struct adapter *padapter,union recv_frame *precv_fr
|
||||||
|
|
||||||
}
|
}
|
||||||
//###set the security information in the recv_frame
|
//###set the security information in the recv_frame
|
||||||
union recv_frame * portctrl(struct adapter *adapter,union recv_frame * precv_frame);
|
|
||||||
union recv_frame * portctrl(struct adapter *adapter,union recv_frame * precv_frame)
|
union recv_frame * portctrl(struct adapter *adapter,union recv_frame * precv_frame)
|
||||||
{
|
{
|
||||||
u8 *psta_addr, *ptr;
|
u8 *psta_addr, *ptr;
|
||||||
|
@ -705,7 +704,7 @@ union recv_frame * portctrl(struct adapter *adapter,union recv_frame * precv_fra
|
||||||
u16 ether_type=0;
|
u16 ether_type=0;
|
||||||
u16 eapol_type = 0x888e;//for Funia BD's WPA issue
|
u16 eapol_type = 0x888e;//for Funia BD's WPA issue
|
||||||
struct rx_pkt_attrib *pattrib;
|
struct rx_pkt_attrib *pattrib;
|
||||||
|
__be16 be_tmp;
|
||||||
;
|
;
|
||||||
|
|
||||||
pstapriv = &adapter->stapriv;
|
pstapriv = &adapter->stapriv;
|
||||||
|
@ -735,8 +734,8 @@ union recv_frame * portctrl(struct adapter *adapter,union recv_frame * precv_fra
|
||||||
|
|
||||||
//get ether_type
|
//get ether_type
|
||||||
ptr=ptr+pfhdr->attrib.hdrlen+pfhdr->attrib.iv_len+LLC_HEADER_SIZE;
|
ptr=ptr+pfhdr->attrib.hdrlen+pfhdr->attrib.iv_len+LLC_HEADER_SIZE;
|
||||||
_rtw_memcpy(ðer_type,ptr, 2);
|
memcpy(&be_tmp, ptr, 2);
|
||||||
ether_type= ntohs((unsigned short )ether_type);
|
ether_type= ntohs(be_tmp);
|
||||||
|
|
||||||
if (ether_type == eapol_type) {
|
if (ether_type == eapol_type) {
|
||||||
prtnframe=precv_frame;
|
prtnframe=precv_frame;
|
||||||
|
@ -2261,7 +2260,7 @@ sint wlanhdr_to_ethhdr ( union recv_frame *precvframe)
|
||||||
u8 bsnaphdr;
|
u8 bsnaphdr;
|
||||||
u8 *psnap_type;
|
u8 *psnap_type;
|
||||||
struct ieee80211_snap_hdr *psnap;
|
struct ieee80211_snap_hdr *psnap;
|
||||||
|
__be16 be_tmp;
|
||||||
sint ret=_SUCCESS;
|
sint ret=_SUCCESS;
|
||||||
struct adapter *adapter =precvframe->u.hdr.adapter;
|
struct adapter *adapter =precvframe->u.hdr.adapter;
|
||||||
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
|
||||||
|
@ -2297,8 +2296,8 @@ sint wlanhdr_to_ethhdr ( union recv_frame *precvframe)
|
||||||
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n===pattrib->hdrlen: %x, pattrib->iv_len:%x ===\n\n", pattrib->hdrlen, pattrib->iv_len));
|
RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n===pattrib->hdrlen: %x, pattrib->iv_len:%x ===\n\n", pattrib->hdrlen, pattrib->iv_len));
|
||||||
|
|
||||||
_rtw_memcpy(ð_type, ptr+rmv_len, 2);
|
memcpy(&be_tmp, ptr+rmv_len, 2);
|
||||||
eth_type= ntohs((unsigned short )eth_type); //pattrib->ether_type
|
eth_type= ntohs(be_tmp); //pattrib->ether_type
|
||||||
pattrib->eth_type = eth_type;
|
pattrib->eth_type = eth_type;
|
||||||
|
|
||||||
if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == true))
|
if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == true))
|
||||||
|
@ -2310,7 +2309,7 @@ sint wlanhdr_to_ethhdr ( union recv_frame *precvframe)
|
||||||
eth_type = 0x8712;
|
eth_type = 0x8712;
|
||||||
// append rx status for mp test packets
|
// append rx status for mp test packets
|
||||||
ptr = recvframe_pull(precvframe, (rmv_len-sizeof(struct ethhdr)+2)-24);
|
ptr = recvframe_pull(precvframe, (rmv_len-sizeof(struct ethhdr)+2)-24);
|
||||||
_rtw_memcpy(ptr, get_rxmem(precvframe), 24);
|
memcpy(ptr, get_rxmem(precvframe), 24);
|
||||||
ptr+=24;
|
ptr+=24;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -2321,8 +2320,8 @@ sint wlanhdr_to_ethhdr ( union recv_frame *precvframe)
|
||||||
_rtw_memcpy(ptr+ETH_ALEN, pattrib->src, ETH_ALEN);
|
_rtw_memcpy(ptr+ETH_ALEN, pattrib->src, ETH_ALEN);
|
||||||
|
|
||||||
if(!bsnaphdr) {
|
if(!bsnaphdr) {
|
||||||
len = htons(len);
|
be_tmp = htons(len);
|
||||||
_rtw_memcpy(ptr+12, &len, 2);
|
_rtw_memcpy(ptr+12, &be_tmp, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
;
|
;
|
||||||
|
@ -2799,12 +2798,12 @@ int amsdu_to_msdu(struct adapter *padapter, union recv_frame *prframe)
|
||||||
_rtw_memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->src, ETH_ALEN);
|
_rtw_memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->src, ETH_ALEN);
|
||||||
_rtw_memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->dst, ETH_ALEN);
|
_rtw_memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->dst, ETH_ALEN);
|
||||||
} else {
|
} else {
|
||||||
u16 len;
|
__be16 len;
|
||||||
/* Leave Ethernet header part of hdr and full payload */
|
/* Leave Ethernet header part of hdr and full payload */
|
||||||
len = htons(sub_skb->len);
|
len = htons(sub_skb->len);
|
||||||
_rtw_memcpy(skb_push(sub_skb, 2), &len, 2);
|
memcpy(skb_push(sub_skb, 2), &len, 2);
|
||||||
_rtw_memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->src, ETH_ALEN);
|
memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->src, ETH_ALEN);
|
||||||
_rtw_memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->dst, ETH_ALEN);
|
memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->dst, ETH_ALEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Indicat the packets to upper layer */
|
/* Indicat the packets to upper layer */
|
||||||
|
|
|
@ -139,7 +139,7 @@ exit:
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 getcrc32(u8 *buf, sint len)
|
static __le32 getcrc32(u8 *buf, sint len)
|
||||||
{
|
{
|
||||||
u8 *p;
|
u8 *p;
|
||||||
u32 crc;
|
u32 crc;
|
||||||
|
@ -153,7 +153,7 @@ static u32 getcrc32(u8 *buf, sint len)
|
||||||
crc = crc32_table[ (crc ^ *p) & 0xff] ^ (crc >> 8);
|
crc = crc32_table[ (crc ^ *p) & 0xff] ^ (crc >> 8);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
return ~crc; /* transmit complement, per CRC-32 spec */
|
return cpu_to_le32(~crc); /* transmit complement, per CRC-32 spec */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
|
||||||
|
|
||||||
length=pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len- pattrib->icv_len;
|
length=pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len- pattrib->icv_len;
|
||||||
|
|
||||||
*((u32 *)crc)=cpu_to_le32(getcrc32(payload,length));
|
*((__le32 *)crc)=getcrc32(payload,length);
|
||||||
|
|
||||||
arcfour_init(&mycontext, wepkey,3+keylength);
|
arcfour_init(&mycontext, wepkey,3+keylength);
|
||||||
arcfour_encrypt(&mycontext, payload, payload, length);
|
arcfour_encrypt(&mycontext, payload, payload, length);
|
||||||
|
@ -222,7 +222,7 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
length=pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len ;
|
length=pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len ;
|
||||||
*((u32 *)crc)=cpu_to_le32(getcrc32(payload,length));
|
*((__le32 *)crc)=getcrc32(payload,length);
|
||||||
arcfour_init(&mycontext, wepkey,3+keylength);
|
arcfour_init(&mycontext, wepkey,3+keylength);
|
||||||
arcfour_encrypt(&mycontext, payload, payload, length);
|
arcfour_encrypt(&mycontext, payload, payload, length);
|
||||||
arcfour_encrypt(&mycontext, payload+length, crc, 4);
|
arcfour_encrypt(&mycontext, payload+length, crc, 4);
|
||||||
|
@ -275,7 +275,7 @@ void rtw_wep_decrypt(struct adapter *padapter, u8 *precvframe)
|
||||||
arcfour_encrypt(&mycontext, payload, payload, length);
|
arcfour_encrypt(&mycontext, payload, payload, length);
|
||||||
|
|
||||||
//calculate icv and compare the icv
|
//calculate icv and compare the icv
|
||||||
*((u32 *)crc)=le32_to_cpu(getcrc32(payload,length-4));
|
*((__le32 *)crc)=getcrc32(payload,length-4);
|
||||||
|
|
||||||
if(crc[3]!=payload[length-1] || crc[2]!=payload[length-2] || crc[1]!=payload[length-3] || crc[0]!=payload[length-4])
|
if(crc[3]!=payload[length-1] || crc[2]!=payload[length-2] || crc[1]!=payload[length-3] || crc[0]!=payload[length-4])
|
||||||
{
|
{
|
||||||
|
@ -734,7 +734,7 @@ u32 rtw_tkip_encrypt(struct adapter *padapter, u8 *pxmitframe)
|
||||||
if((curfragnum+1)==pattrib->nr_frags){ //4 the last fragment
|
if((curfragnum+1)==pattrib->nr_frags){ //4 the last fragment
|
||||||
length=pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len- pattrib->icv_len;
|
length=pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len- pattrib->icv_len;
|
||||||
RT_TRACE(_module_rtl871x_security_c_,_drv_info_,("pattrib->iv_len =%x, pattrib->icv_len =%x\n", pattrib->iv_len,pattrib->icv_len));
|
RT_TRACE(_module_rtl871x_security_c_,_drv_info_,("pattrib->iv_len =%x, pattrib->icv_len =%x\n", pattrib->iv_len,pattrib->icv_len));
|
||||||
*((u32 *)crc)=cpu_to_le32(getcrc32(payload,length));/* modified by Amy*/
|
*((__le32 *)crc)=getcrc32(payload,length);/* modified by Amy*/
|
||||||
|
|
||||||
arcfour_init(&mycontext, rc4key,16);
|
arcfour_init(&mycontext, rc4key,16);
|
||||||
arcfour_encrypt(&mycontext, payload, payload, length);
|
arcfour_encrypt(&mycontext, payload, payload, length);
|
||||||
|
@ -743,7 +743,7 @@ u32 rtw_tkip_encrypt(struct adapter *padapter, u8 *pxmitframe)
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
length=pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len ;
|
length=pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len ;
|
||||||
*((u32 *)crc)=cpu_to_le32(getcrc32(payload,length));/* modified by Amy*/
|
*((__le32 *)crc)=getcrc32(payload,length);/* modified by Amy*/
|
||||||
arcfour_init(&mycontext,rc4key,16);
|
arcfour_init(&mycontext,rc4key,16);
|
||||||
arcfour_encrypt(&mycontext, payload, payload, length);
|
arcfour_encrypt(&mycontext, payload, payload, length);
|
||||||
arcfour_encrypt(&mycontext, payload+length, crc, 4);
|
arcfour_encrypt(&mycontext, payload+length, crc, 4);
|
||||||
|
@ -866,7 +866,7 @@ u32 rtw_tkip_decrypt(struct adapter *padapter, u8 *precvframe)
|
||||||
arcfour_init(&mycontext, rc4key,16);
|
arcfour_init(&mycontext, rc4key,16);
|
||||||
arcfour_encrypt(&mycontext, payload, payload, length);
|
arcfour_encrypt(&mycontext, payload, payload, length);
|
||||||
|
|
||||||
*((u32 *)crc)=le32_to_cpu(getcrc32(payload,length-4));
|
*((__le32 *)crc)=getcrc32(payload,length-4);
|
||||||
|
|
||||||
if(crc[3]!=payload[length-1] || crc[2]!=payload[length-2] || crc[1]!=payload[length-3] || crc[0]!=payload[length-4])
|
if(crc[3]!=payload[length-1] || crc[2]!=payload[length-2] || crc[1]!=payload[length-3] || crc[0]!=payload[length-4])
|
||||||
{
|
{
|
||||||
|
@ -2896,7 +2896,7 @@ static int omac1_aes_128_vector(u8 *key, size_t num_elem,
|
||||||
* OMAC1 was standardized with the name CMAC by NIST in a Special Publication
|
* OMAC1 was standardized with the name CMAC by NIST in a Special Publication
|
||||||
* (SP) 800-38B.
|
* (SP) 800-38B.
|
||||||
*/ //modify for CONFIG_IEEE80211W
|
*/ //modify for CONFIG_IEEE80211W
|
||||||
int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac)
|
static int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac)
|
||||||
{
|
{
|
||||||
return omac1_aes_128_vector(key, 1, &data, &data_len, mac);
|
return omac1_aes_128_vector(key, 1, &data, &data_len, mac);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1150,8 +1150,8 @@ void HT_caps_handler(struct adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
|
||||||
// Commented by Albert 2010/07/12
|
// Commented by Albert 2010/07/12
|
||||||
// Have to handle the endian issue after copying.
|
// Have to handle the endian issue after copying.
|
||||||
// HT_ext_caps didn't be used yet.
|
// HT_ext_caps didn't be used yet.
|
||||||
pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info = le16_to_cpu( pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info );
|
pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info = pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info;
|
||||||
pmlmeinfo->HT_caps.u.HT_cap_element.HT_ext_caps = le16_to_cpu( pmlmeinfo->HT_caps.u.HT_cap_element.HT_ext_caps );
|
pmlmeinfo->HT_caps.u.HT_cap_element.HT_ext_caps = pmlmeinfo->HT_caps.u.HT_cap_element.HT_ext_caps;
|
||||||
|
|
||||||
rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
|
rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
|
||||||
|
|
||||||
|
@ -1378,7 +1378,7 @@ int rtw_check_bcn_info(struct adapter *Adapter, u8 *pframe, u32 packet_len)
|
||||||
p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
|
p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
|
||||||
if(p && len>0) {
|
if(p && len>0) {
|
||||||
pht_cap = (struct rtw_ieee80211_ht_cap *)(p + 2);
|
pht_cap = (struct rtw_ieee80211_ht_cap *)(p + 2);
|
||||||
ht_cap_info = pht_cap->cap_info;
|
ht_cap_info = le16_to_cpu(pht_cap->cap_info);
|
||||||
} else {
|
} else {
|
||||||
ht_cap_info = 0;
|
ht_cap_info = 0;
|
||||||
}
|
}
|
||||||
|
@ -1845,14 +1845,10 @@ int support_short_GI(struct adapter *padapter, struct HT_caps_element *pHT_caps)
|
||||||
|
|
||||||
bit_offset = (pmlmeext->cur_bwmode & HT_CHANNEL_WIDTH_40)? 6: 5;
|
bit_offset = (pmlmeext->cur_bwmode & HT_CHANNEL_WIDTH_40)? 6: 5;
|
||||||
|
|
||||||
if (pHT_caps->u.HT_cap_element.HT_caps_info & (0x1 << bit_offset))
|
if (le16_to_cpu(pHT_caps->u.HT_cap_element.HT_caps_info) & (0x1 << bit_offset))
|
||||||
{
|
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
return _FAIL;
|
return _FAIL;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char get_highest_rate_idx(u32 mask)
|
unsigned char get_highest_rate_idx(u32 mask)
|
||||||
|
@ -2202,10 +2198,6 @@ void update_wireless_mode(struct adapter *padapter)
|
||||||
update_mgnt_tx_rate(padapter, IEEE80211_OFDM_RATE_6MB);
|
update_mgnt_tx_rate(padapter, IEEE80211_OFDM_RATE_6MB);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fire_write_MAC_cmd(struct adapter *padapter, unsigned int addr, unsigned int value)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void update_bmc_sta_support_rate(struct adapter *padapter, u32 mac_id)
|
void update_bmc_sta_support_rate(struct adapter *padapter, u32 mac_id)
|
||||||
{
|
{
|
||||||
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
||||||
|
@ -2288,10 +2280,10 @@ void process_addba_req(struct adapter *padapter, u8 *paddba_req, u8 *addr)
|
||||||
void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len)
|
void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len)
|
||||||
{
|
{
|
||||||
u8* pIE;
|
u8* pIE;
|
||||||
u32 *pbuf;
|
__le32 *pbuf;
|
||||||
|
|
||||||
pIE = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
|
pIE = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
|
||||||
pbuf = (u32*)pIE;
|
pbuf = (__le32 *)pIE;
|
||||||
|
|
||||||
pmlmeext->TSFValue = le32_to_cpu(*(pbuf+1));
|
pmlmeext->TSFValue = le32_to_cpu(*(pbuf+1));
|
||||||
|
|
||||||
|
@ -2302,7 +2294,7 @@ void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len)
|
||||||
|
|
||||||
void correct_TSF(struct adapter *padapter, struct mlme_ext_priv *pmlmeext)
|
void correct_TSF(struct adapter *padapter, struct mlme_ext_priv *pmlmeext)
|
||||||
{
|
{
|
||||||
rtw_hal_set_hwreg(padapter, HW_VAR_CORRECT_TSF, 0);
|
rtw_hal_set_hwreg(padapter, HW_VAR_CORRECT_TSF, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void beacon_timing_control(struct adapter *padapter)
|
void beacon_timing_control(struct adapter *padapter)
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <circ_buf.h>
|
#include <circ_buf.h>
|
||||||
#include <ip.h>
|
#include <ip.h>
|
||||||
#include <usb_ops.h>
|
#include <usb_ops.h>
|
||||||
|
#include "rtw_br_ext.h"
|
||||||
|
|
||||||
static u8 P802_1H_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0xf8 };
|
static u8 P802_1H_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0xf8 };
|
||||||
static u8 RFC1042_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0x00 };
|
static u8 RFC1042_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0x00 };
|
||||||
|
@ -1126,7 +1127,7 @@ s32 rtw_make_wlanhdr (struct adapter *padapter , u8 *hdr, struct pkt_attrib *pat
|
||||||
#endif //CONFIG_TDLS
|
#endif //CONFIG_TDLS
|
||||||
|
|
||||||
sint res = _SUCCESS;
|
sint res = _SUCCESS;
|
||||||
u16 *fctrl = &pwlanhdr->frame_ctl;
|
__le16 *fctrl = &pwlanhdr->frame_ctl;
|
||||||
|
|
||||||
struct sta_info *psta;
|
struct sta_info *psta;
|
||||||
|
|
||||||
|
@ -2167,10 +2168,7 @@ s32 rtw_put_snap(u8 *data, u16 h_proto)
|
||||||
snap->oui[1] = oui[1];
|
snap->oui[1] = oui[1];
|
||||||
snap->oui[2] = oui[2];
|
snap->oui[2] = oui[2];
|
||||||
|
|
||||||
*(u16 *)(data + SNAP_SIZE) = htons(h_proto);
|
*(__be16 *)(data + SNAP_SIZE) = htons(h_proto);
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
return SNAP_SIZE + sizeof(u16);
|
return SNAP_SIZE + sizeof(u16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2430,7 +2428,7 @@ s32 rtw_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf)
|
||||||
return _SUCCESS;
|
return _SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtw_init_xmitframe(struct xmit_frame *pxframe)
|
static void rtw_init_xmitframe(struct xmit_frame *pxframe)
|
||||||
{
|
{
|
||||||
if (pxframe != NULL)//default value setting
|
if (pxframe != NULL)//default value setting
|
||||||
{
|
{
|
||||||
|
@ -2980,7 +2978,7 @@ void rtw_init_hwxmits(struct hw_xmit *phwxmit, sint entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_BR_EXT
|
#ifdef CONFIG_BR_EXT
|
||||||
int rtw_br_client_tx(struct adapter *padapter, struct sk_buff **pskb)
|
static int rtw_br_client_tx(struct adapter *padapter, struct sk_buff **pskb)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb = *pskb;
|
struct sk_buff *skb = *pskb;
|
||||||
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
|
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
|
||||||
|
@ -3005,8 +3003,8 @@ int rtw_br_client_tx(struct adapter *padapter, struct sk_buff **pskb)
|
||||||
if ( !(skb->data[0] & 1) &&
|
if ( !(skb->data[0] & 1) &&
|
||||||
br_port &&
|
br_port &&
|
||||||
memcmp(skb->data+MACADDRLEN, padapter->br_mac, MACADDRLEN) &&
|
memcmp(skb->data+MACADDRLEN, padapter->br_mac, MACADDRLEN) &&
|
||||||
*((unsigned short *)(skb->data+MACADDRLEN*2)) != __constant_htons(ETH_P_8021Q) &&
|
*((__be16 *)(skb->data+MACADDRLEN*2)) != __constant_htons(ETH_P_8021Q) &&
|
||||||
*((unsigned short *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_IP) &&
|
*((__be16 *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_IP) &&
|
||||||
!memcmp(padapter->scdb_mac, skb->data+MACADDRLEN, MACADDRLEN) && padapter->scdb_entry) {
|
!memcmp(padapter->scdb_mac, skb->data+MACADDRLEN, MACADDRLEN) && padapter->scdb_entry) {
|
||||||
memcpy(skb->data+MACADDRLEN, GET_MY_HWADDR(padapter), MACADDRLEN);
|
memcpy(skb->data+MACADDRLEN, GET_MY_HWADDR(padapter), MACADDRLEN);
|
||||||
padapter->scdb_entry->ageing_timer = jiffies;
|
padapter->scdb_entry->ageing_timer = jiffies;
|
||||||
|
@ -3018,7 +3016,7 @@ int rtw_br_client_tx(struct adapter *padapter, struct sk_buff **pskb)
|
||||||
// if (priv->dev->br_port &&
|
// if (priv->dev->br_port &&
|
||||||
// !memcmp(skb->data+MACADDRLEN, priv->br_mac, MACADDRLEN)) {
|
// !memcmp(skb->data+MACADDRLEN, priv->br_mac, MACADDRLEN)) {
|
||||||
#if 1
|
#if 1
|
||||||
if (*((unsigned short *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_8021Q)) {
|
if (*((__be16 *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_8021Q)) {
|
||||||
is_vlan_tag = 1;
|
is_vlan_tag = 1;
|
||||||
vlan_hdr = *((unsigned short *)(skb->data+MACADDRLEN*2+2));
|
vlan_hdr = *((unsigned short *)(skb->data+MACADDRLEN*2+2));
|
||||||
for (i=0; i<6; i++)
|
for (i=0; i<6; i++)
|
||||||
|
@ -3027,13 +3025,11 @@ int rtw_br_client_tx(struct adapter *padapter, struct sk_buff **pskb)
|
||||||
}
|
}
|
||||||
//if SA == br_mac && skb== IP => copy SIP to br_ip ?? why
|
//if SA == br_mac && skb== IP => copy SIP to br_ip ?? why
|
||||||
if (!memcmp(skb->data+MACADDRLEN, padapter->br_mac, MACADDRLEN) &&
|
if (!memcmp(skb->data+MACADDRLEN, padapter->br_mac, MACADDRLEN) &&
|
||||||
(*((unsigned short *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_IP)))
|
(*((__be16 *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_IP)))
|
||||||
memcpy(padapter->br_ip, skb->data+WLAN_ETHHDR_LEN+12, 4);
|
memcpy(padapter->br_ip, skb->data+WLAN_ETHHDR_LEN+12, 4);
|
||||||
|
|
||||||
if (*((unsigned short *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_IP)) {
|
if (*((__be16 *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_IP)) {
|
||||||
if (memcmp(padapter->scdb_mac, skb->data+MACADDRLEN, MACADDRLEN)) {
|
if (memcmp(padapter->scdb_mac, skb->data+MACADDRLEN, MACADDRLEN)) {
|
||||||
void *scdb_findEntry(struct adapter *priv, unsigned char *macAddr, unsigned char *ipAddr);
|
|
||||||
|
|
||||||
if ((padapter->scdb_entry = (struct nat25_network_db_entry *)scdb_findEntry(padapter,
|
if ((padapter->scdb_entry = (struct nat25_network_db_entry *)scdb_findEntry(padapter,
|
||||||
skb->data+MACADDRLEN, skb->data+WLAN_ETHHDR_LEN+12)) != NULL) {
|
skb->data+MACADDRLEN, skb->data+WLAN_ETHHDR_LEN+12)) != NULL) {
|
||||||
memcpy(padapter->scdb_mac, skb->data+MACADDRLEN, MACADDRLEN);
|
memcpy(padapter->scdb_mac, skb->data+MACADDRLEN, MACADDRLEN);
|
||||||
|
@ -3065,7 +3061,7 @@ int rtw_br_client_tx(struct adapter *padapter, struct sk_buff **pskb)
|
||||||
skb_push(skb, 4);
|
skb_push(skb, 4);
|
||||||
for (i=0; i<6; i++)
|
for (i=0; i<6; i++)
|
||||||
*((unsigned short *)(skb->data+i*2)) = *((unsigned short *)(skb->data+4+i*2));
|
*((unsigned short *)(skb->data+i*2)) = *((unsigned short *)(skb->data+4+i*2));
|
||||||
*((unsigned short *)(skb->data+MACADDRLEN*2)) = __constant_htons(ETH_P_8021Q);
|
*((__be16 *)(skb->data+MACADDRLEN*2)) = __constant_htons(ETH_P_8021Q);
|
||||||
*((unsigned short *)(skb->data+MACADDRLEN*2+2)) = vlan_hdr;
|
*((unsigned short *)(skb->data+MACADDRLEN*2+2)) = vlan_hdr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3126,7 +3122,7 @@ int rtw_br_client_tx(struct adapter *padapter, struct sk_buff **pskb)
|
||||||
skb_push(skb, 4);
|
skb_push(skb, 4);
|
||||||
for (i=0; i<6; i++)
|
for (i=0; i<6; i++)
|
||||||
*((unsigned short *)(skb->data+i*2)) = *((unsigned short *)(skb->data+4+i*2));
|
*((unsigned short *)(skb->data+i*2)) = *((unsigned short *)(skb->data+4+i*2));
|
||||||
*((unsigned short *)(skb->data+MACADDRLEN*2)) = __constant_htons(ETH_P_8021Q);
|
*((__be16 *)(skb->data+MACADDRLEN*2)) = __constant_htons(ETH_P_8021Q);
|
||||||
*((unsigned short *)(skb->data+MACADDRLEN*2+2)) = vlan_hdr;
|
*((unsigned short *)(skb->data+MACADDRLEN*2+2)) = vlan_hdr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4090,7 +4086,7 @@ int rtw_sctx_wait(struct submit_ctx *sctx)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rtw_sctx_chk_waring_status(int status)
|
static bool rtw_sctx_chk_waring_status(int status)
|
||||||
{
|
{
|
||||||
switch(status) {
|
switch(status) {
|
||||||
case RTW_SCTX_DONE_UNKNOWN:
|
case RTW_SCTX_DONE_UNKNOWN:
|
||||||
|
|
|
@ -72,9 +72,12 @@ typedef void * RT_TIMER_CALL_BACK;
|
||||||
#define FALSE false
|
#define FALSE false
|
||||||
|
|
||||||
|
|
||||||
#define SET_TX_DESC_ANTSEL_A_88E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 24, 1, __Value)
|
#define SET_TX_DESC_ANTSEL_A_88E(__pTxDesc, __Value) \
|
||||||
#define SET_TX_DESC_ANTSEL_B_88E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 25, 1, __Value)
|
SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 24, 1, __Value)
|
||||||
#define SET_TX_DESC_ANTSEL_C_88E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 29, 1, __Value)
|
#define SET_TX_DESC_ANTSEL_B_88E(__pTxDesc, __Value) \
|
||||||
|
SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 25, 1, __Value)
|
||||||
|
#define SET_TX_DESC_ANTSEL_C_88E(__pTxDesc, __Value) \
|
||||||
|
SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 29, 1, __Value)
|
||||||
|
|
||||||
//define useless flag to avoid compile warning
|
//define useless flag to avoid compile warning
|
||||||
#define USE_WORKITEM 0
|
#define USE_WORKITEM 0
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include <rtw_ioctl_set.h>
|
#include <rtw_ioctl_set.h>
|
||||||
|
|
||||||
#include <rtl8188e_hal.h>
|
#include <rtl8188e_hal.h>
|
||||||
|
#include <rtl8188e_cmd.h>
|
||||||
|
|
||||||
#define CONFIG_H2C_EF
|
#define CONFIG_H2C_EF
|
||||||
|
|
||||||
|
@ -170,38 +171,6 @@ exit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 rtl8192c_h2c_msg_hdl(struct adapter *padapter, unsigned char *pbuf)
|
|
||||||
{
|
|
||||||
u8 ElementID, CmdLen;
|
|
||||||
u8 *pCmdBuffer;
|
|
||||||
struct cmd_msg_parm *pcmdmsg;
|
|
||||||
|
|
||||||
if(!pbuf)
|
|
||||||
return H2C_PARAMETERS_ERROR;
|
|
||||||
|
|
||||||
pcmdmsg = (struct cmd_msg_parm*)pbuf;
|
|
||||||
ElementID = pcmdmsg->eid;
|
|
||||||
CmdLen = pcmdmsg->sz;
|
|
||||||
pCmdBuffer = pcmdmsg->buf;
|
|
||||||
|
|
||||||
FillH2CCmd_88E(padapter, ElementID, CmdLen, pCmdBuffer);
|
|
||||||
|
|
||||||
return H2C_SUCCESS;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
#if defined(CONFIG_AUTOSUSPEND) && defined(SUPPORT_HW_RFOFF_DETECTED)
|
|
||||||
u8 rtl8192c_set_FwSelectSuspend_cmd(struct adapter *padapter ,u8 bfwpoll, u16 period)
|
|
||||||
{
|
|
||||||
u8 res=_SUCCESS;
|
|
||||||
struct H2C_SS_RFOFF_PARAM param;
|
|
||||||
DBG_8192C("==>%s bfwpoll(%x)\n",__FUNCTION__,bfwpoll);
|
|
||||||
param.gpio_period = period;//Polling GPIO_11 period time
|
|
||||||
param.ROFOn = (true == bfwpoll)?1:0;
|
|
||||||
FillH2CCmd_88E(padapter, SELECTIVE_SUSPEND_ROF_CMD, sizeof(param), (u8*)(¶m));
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
#endif //CONFIG_AUTOSUSPEND && SUPPORT_HW_RFOFF_DETECTED
|
|
||||||
*/
|
|
||||||
u8 rtl8188e_set_rssi_cmd(struct adapter*padapter, u8 *param)
|
u8 rtl8188e_set_rssi_cmd(struct adapter*padapter, u8 *param)
|
||||||
{
|
{
|
||||||
u8 res=_SUCCESS;
|
u8 res=_SUCCESS;
|
||||||
|
@ -213,9 +182,6 @@ u8 rtl8188e_set_rssi_cmd(struct adapter*padapter, u8 *param)
|
||||||
DBG_8192C("==>%s fw dont support RA \n",__FUNCTION__);
|
DBG_8192C("==>%s fw dont support RA \n",__FUNCTION__);
|
||||||
res=_FAIL;
|
res=_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,20 +192,18 @@ u8 rtl8188e_set_raid_cmd(struct adapter*padapter, u32 mask)
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
||||||
;
|
;
|
||||||
if(pHalData->fw_ractrl == true){
|
if(pHalData->fw_ractrl == true){
|
||||||
|
__le32 lmask;
|
||||||
|
|
||||||
_rtw_memset(buf, 0, 3);
|
_rtw_memset(buf, 0, 3);
|
||||||
mask = cpu_to_le32( mask );
|
lmask = cpu_to_le32( mask );
|
||||||
_rtw_memcpy(buf, &mask, 3);
|
_rtw_memcpy(buf, &lmask, 3);
|
||||||
|
|
||||||
FillH2CCmd_88E(padapter, H2C_DM_MACID_CFG, 3, buf);
|
FillH2CCmd_88E(padapter, H2C_DM_MACID_CFG, 3, buf);
|
||||||
}else{
|
}else{
|
||||||
DBG_8192C("==>%s fw dont support RA \n",__FUNCTION__);
|
DBG_8192C("==>%s fw dont support RA \n",__FUNCTION__);
|
||||||
res=_FAIL;
|
res=_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//bitmap[0:27] = tx_rate_bitmap
|
//bitmap[0:27] = tx_rate_bitmap
|
||||||
|
@ -354,10 +318,10 @@ void rtl8188e_set_FwPwrMode_cmd(struct adapter *padapter, u8 Mode)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtl8188e_set_FwMediaStatus_cmd(struct adapter *padapter, u16 mstatus_rpt )
|
void rtl8188e_set_FwMediaStatus_cmd(struct adapter *padapter, __le16 mstatus_rpt )
|
||||||
{
|
{
|
||||||
u8 opmode,macid;
|
u8 opmode,macid;
|
||||||
u16 mst_rpt = cpu_to_le16 (mstatus_rpt);
|
u16 mst_rpt = le16_to_cpu(mstatus_rpt);
|
||||||
u32 reg_macid_no_link = REG_MACID_NO_LINK_0;
|
u32 reg_macid_no_link = REG_MACID_NO_LINK_0;
|
||||||
opmode = (u8) mst_rpt;
|
opmode = (u8) mst_rpt;
|
||||||
macid = (u8)(mst_rpt >> 8) ;
|
macid = (u8)(mst_rpt >> 8) ;
|
||||||
|
@ -383,11 +347,11 @@ void rtl8188e_set_FwMediaStatus_cmd(struct adapter *padapter, u16 mstatus_rpt )
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConstructBeacon(struct adapter *padapter, u8 *pframe, u32 *pLength)
|
static void ConstructBeacon(struct adapter *padapter, u8 *pframe, u32 *pLength)
|
||||||
{
|
{
|
||||||
struct rtw_ieee80211_hdr *pwlanhdr;
|
struct rtw_ieee80211_hdr *pwlanhdr;
|
||||||
u16 *fctrl;
|
__le16 *fctrl;
|
||||||
u32 rate_len, pktlen;
|
u32 rate_len, pktlen;
|
||||||
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
||||||
WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
|
WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
|
||||||
|
@ -485,11 +449,11 @@ _ConstructBeacon:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConstructPSPoll(struct adapter *padapter, u8 *pframe, u32 *pLength)
|
static void ConstructPSPoll(struct adapter *padapter, u8 *pframe, u32 *pLength)
|
||||||
{
|
{
|
||||||
struct rtw_ieee80211_hdr *pwlanhdr;
|
struct rtw_ieee80211_hdr *pwlanhdr;
|
||||||
u16 *fctrl;
|
__le16 *fctrl;
|
||||||
u32 pktlen;
|
u32 pktlen;
|
||||||
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
||||||
|
|
||||||
|
@ -515,7 +479,7 @@ void ConstructPSPoll(struct adapter *padapter, u8 *pframe, u32 *pLength)
|
||||||
*pLength = 16;
|
*pLength = 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConstructNullFunctionData(
|
static void ConstructNullFunctionData(
|
||||||
struct adapter *padapter,
|
struct adapter *padapter,
|
||||||
u8 *pframe,
|
u8 *pframe,
|
||||||
u32 *pLength,
|
u32 *pLength,
|
||||||
|
@ -526,8 +490,8 @@ void ConstructNullFunctionData(
|
||||||
u8 bForcePowerSave)
|
u8 bForcePowerSave)
|
||||||
{
|
{
|
||||||
struct rtw_ieee80211_hdr *pwlanhdr;
|
struct rtw_ieee80211_hdr *pwlanhdr;
|
||||||
u16 *fctrl;
|
__le16 *fctrl;
|
||||||
u32 pktlen;
|
u32 pktlen;
|
||||||
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
||||||
struct wlan_network *cur_network = &pmlmepriv->cur_network;
|
struct wlan_network *cur_network = &pmlmepriv->cur_network;
|
||||||
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
||||||
|
@ -588,46 +552,6 @@ void ConstructNullFunctionData(
|
||||||
*pLength = pktlen;
|
*pLength = pktlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConstructProbeRsp(struct adapter *padapter, u8 *pframe, u32 *pLength, u8 *StaAddr, BOOLEAN bHideSSID)
|
|
||||||
{
|
|
||||||
struct rtw_ieee80211_hdr *pwlanhdr;
|
|
||||||
u16 *fctrl;
|
|
||||||
u8 *mac, *bssid;
|
|
||||||
u32 pktlen;
|
|
||||||
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
|
||||||
WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
|
|
||||||
|
|
||||||
|
|
||||||
//DBG_871X("%s\n", __FUNCTION__);
|
|
||||||
|
|
||||||
pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
|
|
||||||
|
|
||||||
mac = myid(&(padapter->eeprompriv));
|
|
||||||
bssid = cur_network->MacAddress;
|
|
||||||
|
|
||||||
fctrl = &(pwlanhdr->frame_ctl);
|
|
||||||
*(fctrl) = 0;
|
|
||||||
_rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
|
|
||||||
_rtw_memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
|
|
||||||
_rtw_memcpy(pwlanhdr->addr3, bssid, ETH_ALEN);
|
|
||||||
|
|
||||||
SetSeqNum(pwlanhdr, 0);
|
|
||||||
SetFrameSubType(fctrl, WIFI_PROBERSP);
|
|
||||||
|
|
||||||
pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
|
|
||||||
pframe += pktlen;
|
|
||||||
|
|
||||||
if(cur_network->IELength>MAX_IE_SZ)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_rtw_memcpy(pframe, cur_network->IEs, cur_network->IELength);
|
|
||||||
pframe += cur_network->IELength;
|
|
||||||
pktlen += cur_network->IELength;
|
|
||||||
|
|
||||||
*pLength = pktlen;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_WOWLAN
|
#ifdef CONFIG_WOWLAN
|
||||||
//
|
//
|
||||||
// Description:
|
// Description:
|
||||||
|
@ -786,7 +710,7 @@ static void ConstructARPResponse(
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void rtl8188e_set_FwRsvdPage_cmd(struct adapter *padapter, PRSVDPAGE_LOC rsvdpageloc)
|
static void rtl8188e_set_FwRsvdPage_cmd(struct adapter *padapter, PRSVDPAGE_LOC rsvdpageloc)
|
||||||
{
|
{
|
||||||
u8 u1H2CRsvdPageParm[H2C_8188E_RSVDPAGE_LOC_LEN]={0};
|
u8 u1H2CRsvdPageParm[H2C_8188E_RSVDPAGE_LOC_LEN]={0};
|
||||||
u8 u1H2CAoacRsvdPageParm[H2C_8188E_AOAC_RSVDPAGE_LOC_LEN]={0};
|
u8 u1H2CAoacRsvdPageParm[H2C_8188E_AOAC_RSVDPAGE_LOC_LEN]={0};
|
||||||
|
|
|
@ -166,7 +166,7 @@ static void Init_ODM_ComInfo_88E(struct adapter *Adapter)
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_FAB_VER,fab_ver);
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_FAB_VER,fab_ver);
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_CUT_VER,cut_ver);
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_CUT_VER,cut_ver);
|
||||||
|
|
||||||
ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_MP_TEST_CHIP,IS_NORMAL_CHIP(pHalData->VersionID));
|
ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_MP_TEST_CHIP,IS_NORMAL_CHIP(pHalData->VersionID));
|
||||||
|
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_PATCH_ID,pHalData->CustomerID);
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_PATCH_ID,pHalData->CustomerID);
|
||||||
// ODM_CMNINFO_BINHCT_TEST only for MP Team
|
// ODM_CMNINFO_BINHCT_TEST only for MP Team
|
||||||
|
|
|
@ -2987,14 +2987,11 @@ Hal_EfuseParseIDCode88E(
|
||||||
|
|
||||||
|
|
||||||
// Checl 0x8129 again for making sure autoload status!!
|
// Checl 0x8129 again for making sure autoload status!!
|
||||||
EEPROMId = le16_to_cpu(*((u16*)hwinfo));
|
EEPROMId = le16_to_cpu(*((__le16*)hwinfo));
|
||||||
if (EEPROMId != RTL_EEPROM_ID)
|
if (EEPROMId != RTL_EEPROM_ID) {
|
||||||
{
|
|
||||||
DBG_8192C("EEPROM ID(%#x) is invalid!!\n", EEPROMId);
|
DBG_8192C("EEPROM ID(%#x) is invalid!!\n", EEPROMId);
|
||||||
pEEPROM->bautoload_fail_flag = true;
|
pEEPROM->bautoload_fail_flag = true;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
pEEPROM->bautoload_fail_flag = false;
|
pEEPROM->bautoload_fail_flag = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -190,70 +190,66 @@ void update_recvframe_attrib_88e(
|
||||||
|
|
||||||
//phdr = &precvframe->u.hdr;
|
//phdr = &precvframe->u.hdr;
|
||||||
|
|
||||||
report.rxdw0 = le32_to_cpu(prxstat->rxdw0);
|
report.rxdw0 = prxstat->rxdw0;
|
||||||
report.rxdw1 = le32_to_cpu(prxstat->rxdw1);
|
report.rxdw1 = prxstat->rxdw1;
|
||||||
report.rxdw2 = le32_to_cpu(prxstat->rxdw2);
|
report.rxdw2 = prxstat->rxdw2;
|
||||||
report.rxdw3 = le32_to_cpu(prxstat->rxdw3);
|
report.rxdw3 = prxstat->rxdw3;
|
||||||
report.rxdw4 = le32_to_cpu(prxstat->rxdw4);
|
report.rxdw4 = prxstat->rxdw4;
|
||||||
report.rxdw5 = le32_to_cpu(prxstat->rxdw5);
|
report.rxdw5 = prxstat->rxdw5;
|
||||||
|
|
||||||
prxreport = (PRXREPORT)&report;
|
prxreport = (PRXREPORT)&report;
|
||||||
|
|
||||||
pattrib = &precvframe->u.hdr.attrib;
|
pattrib = &precvframe->u.hdr.attrib;
|
||||||
_rtw_memset(pattrib, 0, sizeof(struct rx_pkt_attrib));
|
_rtw_memset(pattrib, 0, sizeof(struct rx_pkt_attrib));
|
||||||
|
|
||||||
pattrib->crc_err = (u8)((report.rxdw0 >> 14) & 0x1);;//(u8)prxreport->crc32;
|
pattrib->crc_err = (u8)((le32_to_cpu(report.rxdw0) >> 14) & 0x1);;//(u8)prxreport->crc32;
|
||||||
|
|
||||||
// update rx report to recv_frame attribute
|
// update rx report to recv_frame attribute
|
||||||
pattrib->pkt_rpt_type = (u8)((report.rxdw3 >> 14) & 0x3);//prxreport->rpt_sel;
|
pattrib->pkt_rpt_type = (u8)((le32_to_cpu(report.rxdw3) >> 14) & 0x3);//prxreport->rpt_sel;
|
||||||
|
|
||||||
if(pattrib->pkt_rpt_type == NORMAL_RX)//Normal rx packet
|
if(pattrib->pkt_rpt_type == NORMAL_RX)//Normal rx packet
|
||||||
{
|
{
|
||||||
pattrib->pkt_len = (u16)(report.rxdw0 &0x00003fff);//(u16)prxreport->pktlen;
|
pattrib->pkt_len = (u16)(le32_to_cpu(report.rxdw0) &0x00003fff);//(u16)prxreport->pktlen;
|
||||||
pattrib->drvinfo_sz = (u8)((report.rxdw0 >> 16) & 0xf) * 8;//(u8)(prxreport->drvinfosize << 3);
|
pattrib->drvinfo_sz = (u8)((le32_to_cpu(report.rxdw0) >> 16) & 0xf) * 8;//(u8)(prxreport->drvinfosize << 3);
|
||||||
|
|
||||||
pattrib->physt = (u8)((report.rxdw0 >> 26) & 0x1);//(u8)prxreport->physt;
|
pattrib->physt = (u8)((le32_to_cpu(report.rxdw0) >> 26) & 0x1);//(u8)prxreport->physt;
|
||||||
|
|
||||||
pattrib->bdecrypted = (report.rxdw0 & BIT(27))? 0:1;//(u8)(prxreport->swdec ? 0 : 1);
|
pattrib->bdecrypted = (le32_to_cpu(report.rxdw0) & BIT(27))? 0:1;//(u8)(prxreport->swdec ? 0 : 1);
|
||||||
pattrib->encrypt = (u8)((report.rxdw0 >> 20) & 0x7);//(u8)prxreport->security;
|
pattrib->encrypt = (u8)((le32_to_cpu(report.rxdw0) >> 20) & 0x7);//(u8)prxreport->security;
|
||||||
|
|
||||||
pattrib->qos = (u8)((report.rxdw0 >> 23) & 0x1);//(u8)prxreport->qos;
|
pattrib->qos = (u8)((le32_to_cpu(report.rxdw0) >> 23) & 0x1);//(u8)prxreport->qos;
|
||||||
pattrib->priority = (u8)((report.rxdw1 >> 8) & 0xf);//(u8)prxreport->tid;
|
pattrib->priority = (u8)((le32_to_cpu(report.rxdw1) >> 8) & 0xf);//(u8)prxreport->tid;
|
||||||
|
|
||||||
pattrib->amsdu = (u8)((report.rxdw1 >> 13) & 0x1);//(u8)prxreport->amsdu;
|
pattrib->amsdu = (u8)((le32_to_cpu(report.rxdw1) >> 13) & 0x1);//(u8)prxreport->amsdu;
|
||||||
|
|
||||||
pattrib->seq_num = (u16)(report.rxdw2 & 0x00000fff);//(u16)prxreport->seq;
|
pattrib->seq_num = (u16)(le32_to_cpu(report.rxdw2) & 0x00000fff);//(u16)prxreport->seq;
|
||||||
pattrib->frag_num = (u8)((report.rxdw2 >> 12) & 0xf);//(u8)prxreport->frag;
|
pattrib->frag_num = (u8)((le32_to_cpu(report.rxdw2) >> 12) & 0xf);//(u8)prxreport->frag;
|
||||||
pattrib->mfrag = (u8)((report.rxdw1 >> 27) & 0x1);//(u8)prxreport->mf;
|
pattrib->mfrag = (u8)((le32_to_cpu(report.rxdw1) >> 27) & 0x1);//(u8)prxreport->mf;
|
||||||
pattrib->mdata = (u8)((report.rxdw1 >> 26) & 0x1);//(u8)prxreport->md;
|
pattrib->mdata = (u8)((le32_to_cpu(report.rxdw1) >> 26) & 0x1);//(u8)prxreport->md;
|
||||||
|
|
||||||
pattrib->mcs_rate = (u8)(report.rxdw3 & 0x3f);//(u8)prxreport->rxmcs;
|
pattrib->mcs_rate = (u8)(le32_to_cpu(report.rxdw3) & 0x3f);//(u8)prxreport->rxmcs;
|
||||||
pattrib->rxht = (u8)((report.rxdw3 >> 6) & 0x1);//(u8)prxreport->rxht;
|
pattrib->rxht = (u8)((le32_to_cpu(report.rxdw3) >> 6) & 0x1);//(u8)prxreport->rxht;
|
||||||
|
|
||||||
pattrib->icv_err = (u8)((report.rxdw0 >> 15) & 0x1);//(u8)prxreport->icverr;
|
pattrib->icv_err = (u8)((le32_to_cpu(report.rxdw0) >> 15) & 0x1);//(u8)prxreport->icverr;
|
||||||
pattrib->shift_sz = (u8)((report.rxdw0 >> 24) & 0x3);
|
pattrib->shift_sz = (u8)((le32_to_cpu(report.rxdw0) >> 24) & 0x3);
|
||||||
|
|
||||||
}
|
} else if(pattrib->pkt_rpt_type == TX_REPORT1) {//CCX
|
||||||
else if(pattrib->pkt_rpt_type == TX_REPORT1)//CCX
|
|
||||||
{
|
|
||||||
pattrib->pkt_len = TX_RPT1_PKT_LEN;
|
pattrib->pkt_len = TX_RPT1_PKT_LEN;
|
||||||
pattrib->drvinfo_sz = 0;
|
pattrib->drvinfo_sz = 0;
|
||||||
}
|
} else if(pattrib->pkt_rpt_type == TX_REPORT2) { // TX RPT
|
||||||
else if(pattrib->pkt_rpt_type == TX_REPORT2)// TX RPT
|
pattrib->pkt_len =(u16)(le32_to_cpu(report.rxdw0) & 0x3FF);//Rx length[9:0]
|
||||||
{
|
|
||||||
pattrib->pkt_len =(u16)(report.rxdw0 & 0x3FF);//Rx length[9:0]
|
|
||||||
pattrib->drvinfo_sz = 0;
|
pattrib->drvinfo_sz = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get TX report MAC ID valid.
|
// Get TX report MAC ID valid.
|
||||||
//
|
//
|
||||||
pattrib->MacIDValidEntry[0] = report.rxdw4;
|
pattrib->MacIDValidEntry[0] = le32_to_cpu(report.rxdw4);
|
||||||
pattrib->MacIDValidEntry[1] = report.rxdw5;
|
pattrib->MacIDValidEntry[1] = le32_to_cpu(report.rxdw5);
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(pattrib->pkt_rpt_type == HIS_REPORT)// USB HISR RPT
|
else if(pattrib->pkt_rpt_type == HIS_REPORT)// USB HISR RPT
|
||||||
{
|
{
|
||||||
pattrib->pkt_len = (u16)(report.rxdw0 &0x00003fff);//(u16)prxreport->pktlen;
|
pattrib->pkt_len = (u16)(le32_to_cpu(report.rxdw0) &0x00003fff);//(u16)prxreport->pktlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ void rtl8188eu_free_xmit_priv(struct adapter *padapter)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 urb_zero_packet_chk(struct adapter *padapter, int sz)
|
static u8 urb_zero_packet_chk(struct adapter *padapter, int sz)
|
||||||
{
|
{
|
||||||
u8 blnSetTxDescOffset;
|
u8 blnSetTxDescOffset;
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
||||||
|
@ -56,7 +56,7 @@ u8 urb_zero_packet_chk(struct adapter *padapter, int sz)
|
||||||
return blnSetTxDescOffset;
|
return blnSetTxDescOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtl8188eu_cal_txdesc_chksum(struct tx_desc *ptxdesc)
|
static void rtl8188eu_cal_txdesc_chksum(struct tx_desc *ptxdesc)
|
||||||
{
|
{
|
||||||
u16 *usPtr = (u16*)ptxdesc;
|
u16 *usPtr = (u16*)ptxdesc;
|
||||||
u32 count = 16; // (32 bytes / 2 bytes per XOR) => 16 times
|
u32 count = 16; // (32 bytes / 2 bytes per XOR) => 16 times
|
||||||
|
@ -67,7 +67,7 @@ void rtl8188eu_cal_txdesc_chksum(struct tx_desc *ptxdesc)
|
||||||
ptxdesc->txdw7 &= cpu_to_le32(0xffff0000);
|
ptxdesc->txdw7 &= cpu_to_le32(0xffff0000);
|
||||||
|
|
||||||
for(index = 0 ; index < count ; index++){
|
for(index = 0 ; index < count ; index++){
|
||||||
checksum = checksum ^ le16_to_cpu(*(usPtr + index));
|
checksum = checksum ^ le16_to_cpu(*(__le16 *)(usPtr + index));
|
||||||
}
|
}
|
||||||
|
|
||||||
ptxdesc->txdw7 |= cpu_to_le32(0x0000ffff&checksum);
|
ptxdesc->txdw7 |= cpu_to_le32(0x0000ffff&checksum);
|
||||||
|
@ -126,44 +126,39 @@ void rtl8188e_fill_fake_txdesc(
|
||||||
rtl8188eu_cal_txdesc_chksum(ptxdesc);
|
rtl8188eu_cal_txdesc_chksum(ptxdesc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fill_txdesc_sectype(struct pkt_attrib *pattrib, struct tx_desc *ptxdesc)
|
static void fill_txdesc_sectype(struct pkt_attrib *pattrib, struct tx_desc *ptxdesc)
|
||||||
{
|
{
|
||||||
if ((pattrib->encrypt > 0) && !pattrib->bswenc)
|
if ((pattrib->encrypt > 0) && !pattrib->bswenc) {
|
||||||
{
|
switch (pattrib->encrypt) {
|
||||||
switch (pattrib->encrypt)
|
//SEC_TYPE : 0:NO_ENC,1:WEP40/TKIP,2:WAPI,3:AES
|
||||||
{
|
case _WEP40_:
|
||||||
//SEC_TYPE : 0:NO_ENC,1:WEP40/TKIP,2:WAPI,3:AES
|
case _WEP104_:
|
||||||
case _WEP40_:
|
ptxdesc->txdw1 |= cpu_to_le32((0x01<<SEC_TYPE_SHT)&0x00c00000);
|
||||||
case _WEP104_:
|
ptxdesc->txdw2 |= cpu_to_le32(0x7 << AMPDU_DENSITY_SHT);
|
||||||
ptxdesc->txdw1 |= cpu_to_le32((0x01<<SEC_TYPE_SHT)&0x00c00000);
|
break;
|
||||||
ptxdesc->txdw2 |= cpu_to_le32(0x7 << AMPDU_DENSITY_SHT);
|
case _TKIP_:
|
||||||
break;
|
case _TKIP_WTMIC_:
|
||||||
case _TKIP_:
|
ptxdesc->txdw1 |= cpu_to_le32((0x01<<SEC_TYPE_SHT)&0x00c00000);
|
||||||
case _TKIP_WTMIC_:
|
ptxdesc->txdw2 |= cpu_to_le32(0x7 << AMPDU_DENSITY_SHT);
|
||||||
ptxdesc->txdw1 |= cpu_to_le32((0x01<<SEC_TYPE_SHT)&0x00c00000);
|
break;
|
||||||
ptxdesc->txdw2 |= cpu_to_le32(0x7 << AMPDU_DENSITY_SHT);
|
|
||||||
break;
|
|
||||||
#ifdef CONFIG_WAPI_SUPPORT
|
#ifdef CONFIG_WAPI_SUPPORT
|
||||||
case _SMS4_:
|
case _SMS4_:
|
||||||
ptxdesc->txdw1 |= cpu_to_le32((0x02<<SEC_TYPE_SHT)&0x00c00000);
|
ptxdesc->txdw1 |= cpu_to_le32((0x02<<SEC_TYPE_SHT)&0x00c00000);
|
||||||
ptxdesc->txdw2 |= cpu_to_le32(0x7 << AMPDU_DENSITY_SHT);
|
ptxdesc->txdw2 |= cpu_to_le32(0x7 << AMPDU_DENSITY_SHT);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case _AES_:
|
case _AES_:
|
||||||
ptxdesc->txdw1 |= cpu_to_le32((0x03<<SEC_TYPE_SHT)&0x00c00000);
|
ptxdesc->txdw1 |= cpu_to_le32((0x03<<SEC_TYPE_SHT)&0x00c00000);
|
||||||
ptxdesc->txdw2 |= cpu_to_le32(0x7 << AMPDU_DENSITY_SHT);
|
ptxdesc->txdw2 |= cpu_to_le32(0x7 << AMPDU_DENSITY_SHT);
|
||||||
break;
|
break;
|
||||||
case _NO_PRIVACY_:
|
case _NO_PRIVACY_:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void fill_txdesc_vcs(struct pkt_attrib *pattrib, u32 *pdw)
|
static void fill_txdesc_vcs(struct pkt_attrib *pattrib, __le32 *pdw)
|
||||||
{
|
{
|
||||||
//DBG_8192C("cvs_mode=%d\n", pattrib->vcs_mode);
|
//DBG_8192C("cvs_mode=%d\n", pattrib->vcs_mode);
|
||||||
|
|
||||||
|
@ -200,7 +195,7 @@ void fill_txdesc_vcs(struct pkt_attrib *pattrib, u32 *pdw)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void fill_txdesc_phy(struct pkt_attrib *pattrib, u32 *pdw)
|
static void fill_txdesc_phy(struct pkt_attrib *pattrib, __le32 *pdw)
|
||||||
{
|
{
|
||||||
//DBG_8192C("bwmode=%d, ch_off=%d\n", pattrib->bwmode, pattrib->ch_offset);
|
//DBG_8192C("bwmode=%d, ch_off=%d\n", pattrib->bwmode, pattrib->ch_offset);
|
||||||
|
|
||||||
|
@ -307,15 +302,8 @@ if (padapter->registrypriv.mp_mode == 0)
|
||||||
|
|
||||||
if(pattrib->ampdu_en==true){
|
if(pattrib->ampdu_en==true){
|
||||||
ptxdesc->txdw2 |= cpu_to_le32(AGG_EN);//AGG EN
|
ptxdesc->txdw2 |= cpu_to_le32(AGG_EN);//AGG EN
|
||||||
|
ptxdesc->txdw6 = cpu_to_le32(0x6666f800);
|
||||||
//SET_TX_DESC_MAX_AGG_NUM_88E(pDesc, 0x1F);
|
} else{
|
||||||
//SET_TX_DESC_MCSG1_MAX_LEN_88E(pDesc, 0x6);
|
|
||||||
//SET_TX_DESC_MCSG2_MAX_LEN_88E(pDesc, 0x6);
|
|
||||||
//SET_TX_DESC_MCSG3_MAX_LEN_88E(pDesc, 0x6);
|
|
||||||
//SET_TX_DESC_MCS7_SGI_MAX_LEN_88E(pDesc, 0x6);
|
|
||||||
ptxdesc->txdw6 = 0x6666f800;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
ptxdesc->txdw2 |= cpu_to_le32(AGG_BK);//AGG BK
|
ptxdesc->txdw2 |= cpu_to_le32(AGG_BK);//AGG BK
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2064,23 +2064,19 @@ Hal_EfuseParsePIDVID_8188EU(
|
||||||
if( !AutoLoadFail )
|
if( !AutoLoadFail )
|
||||||
{
|
{
|
||||||
// VID, PID
|
// VID, PID
|
||||||
pHalData->EEPROMVID = EF2Byte( *(u16 *)&hwinfo[EEPROM_VID_88EU] );
|
pHalData->EEPROMVID = EF2BYTE(*(__le16 *)&hwinfo[EEPROM_VID_88EU]);
|
||||||
pHalData->EEPROMPID = EF2Byte( *(u16 *)&hwinfo[EEPROM_PID_88EU] );
|
pHalData->EEPROMPID = EF2BYTE(*(__le16 *)&hwinfo[EEPROM_PID_88EU]);
|
||||||
|
|
||||||
// Customer ID, 0x00 and 0xff are reserved for Realtek.
|
// Customer ID, 0x00 and 0xff are reserved for Realtek.
|
||||||
pHalData->EEPROMCustomerID = *(u8 *)&hwinfo[EEPROM_CUSTOMERID_88E];
|
pHalData->EEPROMCustomerID = *(u8 *)&hwinfo[EEPROM_CUSTOMERID_88E];
|
||||||
pHalData->EEPROMSubCustomerID = EEPROM_Default_SubCustomerID;
|
pHalData->EEPROMSubCustomerID = EEPROM_Default_SubCustomerID;
|
||||||
|
} else {
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pHalData->EEPROMVID = EEPROM_Default_VID;
|
pHalData->EEPROMVID = EEPROM_Default_VID;
|
||||||
pHalData->EEPROMPID = EEPROM_Default_PID;
|
pHalData->EEPROMPID = EEPROM_Default_PID;
|
||||||
|
|
||||||
// Customer ID, 0x00 and 0xff are reserved for Realtek.
|
// Customer ID, 0x00 and 0xff are reserved for Realtek.
|
||||||
pHalData->EEPROMCustomerID = EEPROM_Default_CustomerID;
|
pHalData->EEPROMCustomerID = EEPROM_Default_CustomerID;
|
||||||
pHalData->EEPROMSubCustomerID = EEPROM_Default_SubCustomerID;
|
pHalData->EEPROMSubCustomerID = EEPROM_Default_SubCustomerID;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DBG_871X("VID = 0x%04X, PID = 0x%04X\n", pHalData->EEPROMVID, pHalData->EEPROMPID);
|
DBG_871X("VID = 0x%04X, PID = 0x%04X\n", pHalData->EEPROMVID, pHalData->EEPROMPID);
|
||||||
|
@ -3736,80 +3732,80 @@ void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8* val)
|
||||||
|
|
||||||
poidparam = (struct wowlan_ioctl_param *)val;
|
poidparam = (struct wowlan_ioctl_param *)val;
|
||||||
switch (poidparam->subcode){
|
switch (poidparam->subcode){
|
||||||
case WOWLAN_ENABLE:
|
case WOWLAN_ENABLE:
|
||||||
DBG_871X_LEVEL(_drv_always_, "WOWLAN_ENABLE\n");
|
DBG_871X_LEVEL(_drv_always_, "WOWLAN_ENABLE\n");
|
||||||
|
|
||||||
SetFwRelatedForWoWLAN8188ES(Adapter, true);
|
SetFwRelatedForWoWLAN8188ES(Adapter, true);
|
||||||
|
|
||||||
//Set Pattern
|
//Set Pattern
|
||||||
//if(adapter_to_pwrctl(Adapter)->wowlan_pattern==true)
|
//if(adapter_to_pwrctl(Adapter)->wowlan_pattern==true)
|
||||||
// rtw_wowlan_reload_pattern(Adapter);
|
// rtw_wowlan_reload_pattern(Adapter);
|
||||||
|
|
||||||
//RX DMA stop
|
//RX DMA stop
|
||||||
DBG_871X_LEVEL(_drv_always_, "Pause DMA\n");
|
DBG_871X_LEVEL(_drv_always_, "Pause DMA\n");
|
||||||
rtw_write32(Adapter,REG_RXPKT_NUM,(rtw_read32(Adapter,REG_RXPKT_NUM)|RW_RELEASE_EN));
|
rtw_write32(Adapter,REG_RXPKT_NUM,(rtw_read32(Adapter,REG_RXPKT_NUM)|RW_RELEASE_EN));
|
||||||
do{
|
do{
|
||||||
if((rtw_read32(Adapter, REG_RXPKT_NUM)&RXDMA_IDLE)) {
|
if((rtw_read32(Adapter, REG_RXPKT_NUM)&RXDMA_IDLE)) {
|
||||||
DBG_871X_LEVEL(_drv_always_, "RX_DMA_IDLE is true\n");
|
DBG_871X_LEVEL(_drv_always_, "RX_DMA_IDLE is true\n");
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
// If RX_DMA is not idle, receive one pkt from DMA
|
// If RX_DMA is not idle, receive one pkt from DMA
|
||||||
DBG_871X_LEVEL(_drv_always_, "RX_DMA_IDLE is not true\n");
|
DBG_871X_LEVEL(_drv_always_, "RX_DMA_IDLE is not true\n");
|
||||||
}
|
|
||||||
}while(trycnt--);
|
|
||||||
if(trycnt ==0)
|
|
||||||
DBG_871X_LEVEL(_drv_always_, "Stop RX DMA failed...... \n");
|
|
||||||
|
|
||||||
//Set WOWLAN H2C command.
|
|
||||||
DBG_871X_LEVEL(_drv_always_, "Set WOWLan cmd\n");
|
|
||||||
rtl8188es_set_wowlan_cmd(Adapter, 1);
|
|
||||||
|
|
||||||
mstatus = rtw_read8(Adapter, REG_WOW_CTRL);
|
|
||||||
trycnt = 10;
|
|
||||||
|
|
||||||
while(!(mstatus&BIT1) && trycnt>1) {
|
|
||||||
mstatus = rtw_read8(Adapter, REG_WOW_CTRL);
|
|
||||||
DBG_871X_LEVEL(_drv_always_, "Loop index: %d :0x%02x\n", trycnt, mstatus);
|
|
||||||
trycnt --;
|
|
||||||
rtw_msleep_os(2);
|
|
||||||
}
|
}
|
||||||
|
}while(trycnt--);
|
||||||
|
if(trycnt ==0)
|
||||||
|
DBG_871X_LEVEL(_drv_always_, "Stop RX DMA failed...... \n");
|
||||||
|
|
||||||
adapter_to_pwrctl(Adapter)->wowlan_wake_reason = rtw_read8(Adapter, REG_WOWLAN_WAKE_REASON);
|
//Set WOWLAN H2C command.
|
||||||
DBG_871X_LEVEL(_drv_always_, "wowlan_wake_reason: 0x%02x\n",
|
DBG_871X_LEVEL(_drv_always_, "Set WOWLan cmd\n");
|
||||||
adapter_to_pwrctl(Adapter)->wowlan_wake_reason);
|
rtl8188es_set_wowlan_cmd(Adapter, 1);
|
||||||
|
|
||||||
/* Invoid SE0 reset signal during suspending*/
|
mstatus = rtw_read8(Adapter, REG_WOW_CTRL);
|
||||||
rtw_write8(Adapter, REG_RSV_CTRL, 0x20);
|
trycnt = 10;
|
||||||
rtw_write8(Adapter, REG_RSV_CTRL, 0x60);
|
|
||||||
|
|
||||||
//rtw_msleep_os(10);
|
while(!(mstatus&BIT1) && trycnt>1) {
|
||||||
break;
|
|
||||||
case WOWLAN_DISABLE:
|
|
||||||
DBG_871X_LEVEL(_drv_always_, "WOWLAN_DISABLE\n");
|
|
||||||
trycnt = 10;
|
|
||||||
rtl8188es_set_wowlan_cmd(Adapter, 0);
|
|
||||||
mstatus = rtw_read8(Adapter, REG_WOW_CTRL);
|
mstatus = rtw_read8(Adapter, REG_WOW_CTRL);
|
||||||
DBG_871X_LEVEL(_drv_info_, "%s mstatus:0x%02x\n", __func__, mstatus);
|
DBG_871X_LEVEL(_drv_always_, "Loop index: %d :0x%02x\n", trycnt, mstatus);
|
||||||
|
trycnt --;
|
||||||
while(mstatus&BIT1 && trycnt>1) {
|
|
||||||
mstatus = rtw_read8(Adapter, REG_WOW_CTRL);
|
|
||||||
DBG_871X_LEVEL(_drv_always_, "Loop index: %d :0x%02x\n", trycnt, mstatus);
|
|
||||||
trycnt --;
|
|
||||||
rtw_msleep_os(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mstatus & BIT1)
|
|
||||||
printk("System did not release RX_DMA\n");
|
|
||||||
else
|
|
||||||
SetFwRelatedForWoWLAN8188ES(Adapter, false);
|
|
||||||
|
|
||||||
rtw_msleep_os(2);
|
rtw_msleep_os(2);
|
||||||
if(!(adapter_to_pwrctl(Adapter)->wowlan_wake_reason & FWDecisionDisconnect))
|
}
|
||||||
rtl8188e_set_FwJoinBssReport_cmd(Adapter, 1);
|
|
||||||
//rtw_msleep_os(10);
|
adapter_to_pwrctl(Adapter)->wowlan_wake_reason = rtw_read8(Adapter, REG_WOWLAN_WAKE_REASON);
|
||||||
break;
|
DBG_871X_LEVEL(_drv_always_, "wowlan_wake_reason: 0x%02x\n",
|
||||||
default:
|
adapter_to_pwrctl(Adapter)->wowlan_wake_reason);
|
||||||
break;
|
|
||||||
|
/* Invoid SE0 reset signal during suspending*/
|
||||||
|
rtw_write8(Adapter, REG_RSV_CTRL, 0x20);
|
||||||
|
rtw_write8(Adapter, REG_RSV_CTRL, 0x60);
|
||||||
|
|
||||||
|
//rtw_msleep_os(10);
|
||||||
|
break;
|
||||||
|
case WOWLAN_DISABLE:
|
||||||
|
DBG_871X_LEVEL(_drv_always_, "WOWLAN_DISABLE\n");
|
||||||
|
trycnt = 10;
|
||||||
|
rtl8188es_set_wowlan_cmd(Adapter, 0);
|
||||||
|
mstatus = rtw_read8(Adapter, REG_WOW_CTRL);
|
||||||
|
DBG_871X_LEVEL(_drv_info_, "%s mstatus:0x%02x\n", __func__, mstatus);
|
||||||
|
|
||||||
|
while(mstatus&BIT1 && trycnt>1) {
|
||||||
|
mstatus = rtw_read8(Adapter, REG_WOW_CTRL);
|
||||||
|
DBG_871X_LEVEL(_drv_always_, "Loop index: %d :0x%02x\n", trycnt, mstatus);
|
||||||
|
trycnt --;
|
||||||
|
rtw_msleep_os(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mstatus & BIT1)
|
||||||
|
printk("System did not release RX_DMA\n");
|
||||||
|
else
|
||||||
|
SetFwRelatedForWoWLAN8188ES(Adapter, false);
|
||||||
|
|
||||||
|
rtw_msleep_os(2);
|
||||||
|
if(!(adapter_to_pwrctl(Adapter)->wowlan_wake_reason & FWDecisionDisconnect))
|
||||||
|
rtl8188e_set_FwJoinBssReport_cmd(Adapter, 1);
|
||||||
|
//rtw_msleep_os(10);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -3827,7 +3823,7 @@ void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8* val)
|
||||||
#endif
|
#endif
|
||||||
case HW_VAR_H2C_MEDIA_STATUS_RPT:
|
case HW_VAR_H2C_MEDIA_STATUS_RPT:
|
||||||
{
|
{
|
||||||
rtl8188e_set_FwMediaStatus_cmd(Adapter , (*(u16 *)val));
|
rtl8188e_set_FwMediaStatus_cmd(Adapter, (*(__le16 *)val));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HW_VAR_BCN_VALID:
|
case HW_VAR_BCN_VALID:
|
||||||
|
|
|
@ -59,167 +59,138 @@
|
||||||
* 3. After read integer from IO.
|
* 3. After read integer from IO.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//
|
/* Convert little data endian to host ordering */
|
||||||
// Byte Swapping routine.
|
#define EF1BYTE(_val) \
|
||||||
//
|
((u8)(_val))
|
||||||
#define EF1Byte
|
#define EF2BYTE(_val) \
|
||||||
#define EF2Byte le16_to_cpu
|
(le16_to_cpu(_val))
|
||||||
#define EF4Byte le32_to_cpu
|
#define EF4BYTE(_val) \
|
||||||
|
(le32_to_cpu(_val))
|
||||||
|
|
||||||
//
|
/* Read data from memory */
|
||||||
// Read LE format data from memory
|
#define READEF1BYTE(_ptr) \
|
||||||
//
|
EF1BYTE(*((u8 *)(_ptr)))
|
||||||
#define ReadEF1Byte(_ptr) EF1Byte(*((u8 *)(_ptr)))
|
/* Read le16 data from memory and convert to host ordering */
|
||||||
#define ReadEF2Byte(_ptr) EF2Byte(*((u16 *)(_ptr)))
|
#define READEF2BYTE(_ptr) \
|
||||||
#define ReadEF4Byte(_ptr) EF4Byte(*((u32 *)(_ptr)))
|
EF2BYTE(*(_ptr))
|
||||||
|
#define READEF4BYTE(_ptr) \
|
||||||
|
EF4BYTE(*(_ptr))
|
||||||
|
|
||||||
//
|
/* Write data to memory */
|
||||||
// Write LE data to memory
|
#define WRITEEF1BYTE(_ptr, _val) \
|
||||||
//
|
do { \
|
||||||
#define WriteEF1Byte(_ptr, _val) (*((u8 *)(_ptr)))=EF1Byte(_val)
|
(*((u8 *)(_ptr))) = EF1BYTE(_val) \
|
||||||
#define WriteEF2Byte(_ptr, _val) (*((u16 *)(_ptr)))=EF2Byte(_val)
|
} while (0)
|
||||||
#define WriteEF4Byte(_ptr, _val) (*((u32 *)(_ptr)))=EF4Byte(_val)
|
/* Write le data to memory in host ordering */
|
||||||
|
#define WRITEEF2BYTE(_ptr, _val) \
|
||||||
|
do { \
|
||||||
|
(*((u16 *)(_ptr))) = EF2BYTE(_val) \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
//
|
#define WRITEEF4BYTE(_ptr, _val) \
|
||||||
// Example:
|
do { \
|
||||||
// BIT_LEN_MASK_32(0) => 0x00000000
|
(*((u32 *)(_ptr))) = EF2BYTE(_val) \
|
||||||
// BIT_LEN_MASK_32(1) => 0x00000001
|
} while (0)
|
||||||
// BIT_LEN_MASK_32(2) => 0x00000003
|
|
||||||
// BIT_LEN_MASK_32(32) => 0xFFFFFFFF
|
|
||||||
//
|
|
||||||
#define BIT_LEN_MASK_32(__BitLen) \
|
|
||||||
(0xFFFFFFFF >> (32 - (__BitLen)))
|
|
||||||
//
|
|
||||||
// Example:
|
|
||||||
// BIT_OFFSET_LEN_MASK_32(0, 2) => 0x00000003
|
|
||||||
// BIT_OFFSET_LEN_MASK_32(16, 2) => 0x00030000
|
|
||||||
//
|
|
||||||
#define BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) \
|
|
||||||
(BIT_LEN_MASK_32(__BitLen) << (__BitOffset))
|
|
||||||
|
|
||||||
//
|
/* Create a bit mask
|
||||||
// Description:
|
* Examples:
|
||||||
// Return 4-byte value in host byte ordering from
|
* BIT_LEN_MASK_32(0) => 0x00000000
|
||||||
// 4-byte pointer in litten-endian system.
|
* BIT_LEN_MASK_32(1) => 0x00000001
|
||||||
//
|
* BIT_LEN_MASK_32(2) => 0x00000003
|
||||||
#define LE_P4BYTE_TO_HOST_4BYTE(__pStart) \
|
* BIT_LEN_MASK_32(32) => 0xFFFFFFFF
|
||||||
(EF4Byte(*((u32 *)(__pStart))))
|
*/
|
||||||
|
#define BIT_LEN_MASK_32(__bitlen) \
|
||||||
|
(0xFFFFFFFF >> (32 - (__bitlen)))
|
||||||
|
#define BIT_LEN_MASK_16(__bitlen) \
|
||||||
|
(0xFFFF >> (16 - (__bitlen)))
|
||||||
|
#define BIT_LEN_MASK_8(__bitlen) \
|
||||||
|
(0xFF >> (8 - (__bitlen)))
|
||||||
|
|
||||||
//
|
/* Create an offset bit mask
|
||||||
// Description:
|
* Examples:
|
||||||
// Translate subfield (continuous bits in little-endian) of 4-byte value in litten byte to
|
* BIT_OFFSET_LEN_MASK_32(0, 2) => 0x00000003
|
||||||
// 4-byte value in host byte ordering.
|
* BIT_OFFSET_LEN_MASK_32(16, 2) => 0x00030000
|
||||||
//
|
*/
|
||||||
#define LE_BITS_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
|
#define BIT_OFFSET_LEN_MASK_32(__bitoffset, __bitlen) \
|
||||||
|
(BIT_LEN_MASK_32(__bitlen) << (__bitoffset))
|
||||||
|
#define BIT_OFFSET_LEN_MASK_16(__bitoffset, __bitlen) \
|
||||||
|
(BIT_LEN_MASK_16(__bitlen) << (__bitoffset))
|
||||||
|
#define BIT_OFFSET_LEN_MASK_8(__bitoffset, __bitlen) \
|
||||||
|
(BIT_LEN_MASK_8(__bitlen) << (__bitoffset))
|
||||||
|
|
||||||
|
/*Description:
|
||||||
|
* Return 4-byte value in host byte ordering from
|
||||||
|
* 4-byte pointer in little-endian system.
|
||||||
|
*/
|
||||||
|
#define LE_P4BYTE_TO_HOST_4BYTE(__pstart) \
|
||||||
|
(EF4BYTE(*((__le32 *)(__pstart))))
|
||||||
|
#define LE_P2BYTE_TO_HOST_2BYTE(__pstart) \
|
||||||
|
(EF2BYTE(*((__le16 *)(__pstart))))
|
||||||
|
#define LE_P1BYTE_TO_HOST_1BYTE(__pstart) \
|
||||||
|
(EF1BYTE(*((u8 *)(__pstart))))
|
||||||
|
|
||||||
|
/*Description:
|
||||||
|
Translate subfield (continuous bits in little-endian) of 4-byte
|
||||||
|
value to host byte ordering.*/
|
||||||
|
#define LE_BITS_TO_4BYTE(__pstart, __bitoffset, __bitlen) \
|
||||||
( \
|
( \
|
||||||
( LE_P4BYTE_TO_HOST_4BYTE(__pStart) >> (__BitOffset) ) \
|
(LE_P4BYTE_TO_HOST_4BYTE(__pstart) >> (__bitoffset)) & \
|
||||||
& \
|
BIT_LEN_MASK_32(__bitlen) \
|
||||||
BIT_LEN_MASK_32(__BitLen) \
|
)
|
||||||
|
#define LE_BITS_TO_2BYTE(__pstart, __bitoffset, __bitlen) \
|
||||||
|
( \
|
||||||
|
(LE_P2BYTE_TO_HOST_2BYTE(__pstart) >> (__bitoffset)) & \
|
||||||
|
BIT_LEN_MASK_16(__bitlen) \
|
||||||
|
)
|
||||||
|
#define LE_BITS_TO_1BYTE(__pstart, __bitoffset, __bitlen) \
|
||||||
|
( \
|
||||||
|
(LE_P1BYTE_TO_HOST_1BYTE(__pstart) >> (__bitoffset)) & \
|
||||||
|
BIT_LEN_MASK_8(__bitlen) \
|
||||||
)
|
)
|
||||||
|
|
||||||
//
|
/* Description:
|
||||||
// Description:
|
* Mask subfield (continuous bits in little-endian) of 4-byte value
|
||||||
// Mask subfield (continuous bits in little-endian) of 4-byte value in litten byte oredering
|
* and return the result in 4-byte value in host byte ordering.
|
||||||
// and return the result in 4-byte value in host byte ordering.
|
*/
|
||||||
//
|
#define LE_BITS_CLEARED_TO_4BYTE(__pstart, __bitoffset, __bitlen) \
|
||||||
#define LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
|
|
||||||
( \
|
( \
|
||||||
LE_P4BYTE_TO_HOST_4BYTE(__pStart) \
|
LE_P4BYTE_TO_HOST_4BYTE(__pstart) & \
|
||||||
& \
|
(~BIT_OFFSET_LEN_MASK_32(__bitoffset, __bitlen)) \
|
||||||
( ~BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) ) \
|
)
|
||||||
|
#define LE_BITS_CLEARED_TO_2BYTE(__pstart, __bitoffset, __bitlen) \
|
||||||
|
( \
|
||||||
|
LE_P2BYTE_TO_HOST_2BYTE(__pstart) & \
|
||||||
|
(~BIT_OFFSET_LEN_MASK_16(__bitoffset, __bitlen)) \
|
||||||
|
)
|
||||||
|
#define LE_BITS_CLEARED_TO_1BYTE(__pstart, __bitoffset, __bitlen) \
|
||||||
|
( \
|
||||||
|
LE_P1BYTE_TO_HOST_1BYTE(__pstart) & \
|
||||||
|
(~BIT_OFFSET_LEN_MASK_8(__bitoffset, __bitlen)) \
|
||||||
)
|
)
|
||||||
|
|
||||||
//
|
/* Description:
|
||||||
// Description:
|
* Set subfield of little-endian 4-byte value to specified value.
|
||||||
// Set subfield of little-endian 4-byte value to specified value.
|
*/
|
||||||
//
|
#define SET_BITS_TO_LE_4BYTE(__pstart, __bitoffset, __bitlen, __val) \
|
||||||
#define SET_BITS_TO_LE_4BYTE(__pStart, __BitOffset, __BitLen, __Value) \
|
*((u32 *)(__pstart)) = \
|
||||||
*((u32 *)(__pStart)) = \
|
( \
|
||||||
EF4Byte( \
|
LE_BITS_CLEARED_TO_4BYTE(__pstart, __bitoffset, __bitlen) | \
|
||||||
LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
|
((((u32)__val) & BIT_LEN_MASK_32(__bitlen)) << (__bitoffset)) \
|
||||||
| \
|
)
|
||||||
( (((u32)__Value) & BIT_LEN_MASK_32(__BitLen)) << (__BitOffset) ) \
|
|
||||||
|
#define SET_BITS_TO_LE_2BYTE(__pstart, __bitoffset, __bitlen, __val) \
|
||||||
|
*((u16 *)(__pstart)) = \
|
||||||
|
( \
|
||||||
|
LE_BITS_CLEARED_TO_2BYTE(__pstart, __bitoffset, __bitlen) | \
|
||||||
|
((((u16)__val) & BIT_LEN_MASK_16(__bitlen)) << (__bitoffset)) \
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#define SET_BITS_TO_LE_1BYTE(__pstart, __bitoffset, __bitlen, __val) \
|
||||||
#define BIT_LEN_MASK_16(__BitLen) \
|
*((u8 *)(__pstart)) = EF1BYTE \
|
||||||
(0xFFFF >> (16 - (__BitLen)))
|
( \
|
||||||
|
LE_BITS_CLEARED_TO_1BYTE(__pstart, __bitoffset, __bitlen) | \
|
||||||
#define BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) \
|
((((u8)__val) & BIT_LEN_MASK_8(__bitlen)) << (__bitoffset)) \
|
||||||
(BIT_LEN_MASK_16(__BitLen) << (__BitOffset))
|
)
|
||||||
|
|
||||||
#define LE_P2BYTE_TO_HOST_2BYTE(__pStart) \
|
|
||||||
(EF2Byte(*((u16 *)(__pStart))))
|
|
||||||
|
|
||||||
#define LE_BITS_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
|
|
||||||
( \
|
|
||||||
( LE_P2BYTE_TO_HOST_2BYTE(__pStart) >> (__BitOffset) ) \
|
|
||||||
& \
|
|
||||||
BIT_LEN_MASK_16(__BitLen) \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
|
|
||||||
( \
|
|
||||||
LE_P2BYTE_TO_HOST_2BYTE(__pStart) \
|
|
||||||
& \
|
|
||||||
( ~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) ) \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \
|
|
||||||
*((u16 *)(__pStart)) = \
|
|
||||||
EF2Byte( \
|
|
||||||
LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
|
|
||||||
| \
|
|
||||||
( (((u16)__Value) & BIT_LEN_MASK_16(__BitLen)) << (__BitOffset) ) \
|
|
||||||
);
|
|
||||||
|
|
||||||
#define BIT_LEN_MASK_8(__BitLen) \
|
|
||||||
(0xFF >> (8 - (__BitLen)))
|
|
||||||
|
|
||||||
#define BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) \
|
|
||||||
(BIT_LEN_MASK_8(__BitLen) << (__BitOffset))
|
|
||||||
|
|
||||||
#define LE_P1BYTE_TO_HOST_1BYTE(__pStart) \
|
|
||||||
(EF1Byte(*((u8 *)(__pStart))))
|
|
||||||
|
|
||||||
#define LE_BITS_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
|
|
||||||
( \
|
|
||||||
( LE_P1BYTE_TO_HOST_1BYTE(__pStart) >> (__BitOffset) ) \
|
|
||||||
& \
|
|
||||||
BIT_LEN_MASK_8(__BitLen) \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
|
|
||||||
( \
|
|
||||||
LE_P1BYTE_TO_HOST_1BYTE(__pStart) \
|
|
||||||
& \
|
|
||||||
( ~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) ) \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \
|
|
||||||
*((u8 *)(__pStart)) = \
|
|
||||||
EF1Byte( \
|
|
||||||
LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
|
|
||||||
| \
|
|
||||||
( (((u8)__Value) & BIT_LEN_MASK_8(__BitLen)) << (__BitOffset) ) \
|
|
||||||
);
|
|
||||||
|
|
||||||
//pclint
|
|
||||||
#define LE_BITS_CLEARED_TO_1BYTE_8BIT(__pStart, __BitOffset, __BitLen) \
|
|
||||||
( \
|
|
||||||
LE_P1BYTE_TO_HOST_1BYTE(__pStart) \
|
|
||||||
)
|
|
||||||
|
|
||||||
//pclint
|
|
||||||
#define SET_BITS_TO_LE_1BYTE_8BIT(__pStart, __BitOffset, __BitLen, __Value) \
|
|
||||||
{ \
|
|
||||||
*((u8 *)(__pStart)) = \
|
|
||||||
EF1Byte( \
|
|
||||||
LE_BITS_CLEARED_TO_1BYTE_8BIT(__pStart, __BitOffset, __BitLen) \
|
|
||||||
| \
|
|
||||||
((u8)__Value) \
|
|
||||||
); \
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the N-bytes aligment offset from the current length
|
// Get the N-bytes aligment offset from the current length
|
||||||
#define N_BYTE_ALIGMENT(__Value, __Aligment) ((__Aligment == 1) ? (__Value) : (((__Value + __Aligment - 1) / __Aligment) * __Aligment))
|
#define N_BYTE_ALIGMENT(__Value, __Aligment) ((__Aligment == 1) ? (__Value) : (((__Value + __Aligment - 1) / __Aligment) * __Aligment))
|
||||||
|
|
|
@ -145,7 +145,7 @@ void rtl8188e_set_p2p_ps_offload_cmd(struct adapter *padapter, u8 p2p_ps_state);
|
||||||
#endif //CONFIG_P2P
|
#endif //CONFIG_P2P
|
||||||
|
|
||||||
void CheckFwRsvdPageContent(struct adapter *padapter);
|
void CheckFwRsvdPageContent(struct adapter *padapter);
|
||||||
void rtl8188e_set_FwMediaStatus_cmd(struct adapter *padapter, u16 mstatus_rpt );
|
void rtl8188e_set_FwMediaStatus_cmd(struct adapter *padapter, __le16 mstatus_rpt );
|
||||||
|
|
||||||
#ifdef CONFIG_TSF_RESET_OFFLOAD
|
#ifdef CONFIG_TSF_RESET_OFFLOAD
|
||||||
//u8 rtl8188e_reset_tsf(struct adapter *padapter, u8 reset_port);
|
//u8 rtl8188e_reset_tsf(struct adapter *padapter, u8 reset_port);
|
||||||
|
|
|
@ -113,10 +113,10 @@ typedef struct _RT_8188E_FIRMWARE_HDR
|
||||||
// 8-byte alinment required
|
// 8-byte alinment required
|
||||||
|
|
||||||
//--- LONG WORD 0 ----
|
//--- LONG WORD 0 ----
|
||||||
u16 Signature; // 92C0: test chip; 92C, 88C0: test chip; 88C1: MP A-cut; 92C1: MP A-cut
|
__le16 Signature; // 92C0: test chip; 92C, 88C0: test chip; 88C1: MP A-cut; 92C1: MP A-cut
|
||||||
u8 Category; // AP/NIC and USB/PCI
|
u8 Category; // AP/NIC and USB/PCI
|
||||||
u8 Function; // Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions
|
u8 Function; // Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions
|
||||||
u16 Version; // FW Version
|
__le16 Version; // FW Version
|
||||||
u8 Subversion; // FW Subversion, default 0x00
|
u8 Subversion; // FW Subversion, default 0x00
|
||||||
u16 Rsvd1;
|
u16 Rsvd1;
|
||||||
|
|
||||||
|
@ -126,12 +126,12 @@ typedef struct _RT_8188E_FIRMWARE_HDR
|
||||||
u8 Date; // Release time Date field
|
u8 Date; // Release time Date field
|
||||||
u8 Hour; // Release time Hour field
|
u8 Hour; // Release time Hour field
|
||||||
u8 Minute; // Release time Minute field
|
u8 Minute; // Release time Minute field
|
||||||
u16 RamCodeSize; // The size of RAM code
|
__le16 RamCodeSize; // The size of RAM code
|
||||||
u8 Foundry;
|
u8 Foundry;
|
||||||
u8 Rsvd2;
|
u8 Rsvd2;
|
||||||
|
|
||||||
//--- LONG WORD 2 ----
|
//--- LONG WORD 2 ----
|
||||||
u32 SvnIdx; // The SVN entry index
|
__le32 SvnIdx; // The SVN entry index
|
||||||
u32 Rsvd3;
|
u32 Rsvd3;
|
||||||
|
|
||||||
//--- LONG WORD 3 ----
|
//--- LONG WORD 3 ----
|
||||||
|
|
|
@ -72,5 +72,7 @@ struct br_ext_info {
|
||||||
|
|
||||||
void nat25_db_cleanup(struct adapter *priv);
|
void nat25_db_cleanup(struct adapter *priv);
|
||||||
void netdev_br_init(struct net_device *netdev);
|
void netdev_br_init(struct net_device *netdev);
|
||||||
|
void *scdb_findEntry(struct adapter *priv, unsigned char *macAddr,
|
||||||
|
unsigned char *ipAddr);
|
||||||
|
|
||||||
#endif // _RTW_BR_EXT_H_
|
#endif // _RTW_BR_EXT_H_
|
||||||
|
|
|
@ -39,9 +39,9 @@ int rtw_IOL_append_END_cmd(struct xmit_frame *xmit_frame);
|
||||||
struct ioreg_cfg{
|
struct ioreg_cfg{
|
||||||
u8 length;
|
u8 length;
|
||||||
u8 cmd_id;
|
u8 cmd_id;
|
||||||
u16 address;
|
__le16 address;
|
||||||
u32 data;
|
__le32 data;
|
||||||
u32 mask;
|
__le32 mask;
|
||||||
};
|
};
|
||||||
enum ioreg_cmd{
|
enum ioreg_cmd{
|
||||||
IOREG_CMD_LLT = 0x01,
|
IOREG_CMD_LLT = 0x01,
|
||||||
|
|
|
@ -189,12 +189,12 @@ struct rx_pkt_attrib {
|
||||||
#define RXDESC_OFFSET RXDESC_SIZE
|
#define RXDESC_OFFSET RXDESC_SIZE
|
||||||
|
|
||||||
struct recv_stat {
|
struct recv_stat {
|
||||||
unsigned int rxdw0;
|
__le32 rxdw0;
|
||||||
unsigned int rxdw1;
|
__le32 rxdw1;
|
||||||
unsigned int rxdw2;
|
__le32 rxdw2;
|
||||||
unsigned int rxdw3;
|
__le32 rxdw3;
|
||||||
unsigned int rxdw4;
|
__le32 rxdw4;
|
||||||
unsigned int rxdw5;
|
__le32 rxdw5;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define EOR BIT(30)
|
#define EOR BIT(30)
|
||||||
|
|
|
@ -161,35 +161,35 @@ static struct ieee80211_channel rtw_5ghz_a_channels[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void rtw_2g_channels_init(struct ieee80211_channel *channels)
|
static void rtw_2g_channels_init(struct ieee80211_channel *channels)
|
||||||
{
|
{
|
||||||
_rtw_memcpy((void*)channels, (void*)rtw_2ghz_channels,
|
_rtw_memcpy((void*)channels, (void*)rtw_2ghz_channels,
|
||||||
sizeof(struct ieee80211_channel)*RTW_2G_CHANNELS_NUM
|
sizeof(struct ieee80211_channel)*RTW_2G_CHANNELS_NUM
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtw_5g_channels_init(struct ieee80211_channel *channels)
|
static void rtw_5g_channels_init(struct ieee80211_channel *channels)
|
||||||
{
|
{
|
||||||
_rtw_memcpy((void*)channels, (void*)rtw_5ghz_a_channels,
|
_rtw_memcpy((void*)channels, (void*)rtw_5ghz_a_channels,
|
||||||
sizeof(struct ieee80211_channel)*RTW_5G_CHANNELS_NUM
|
sizeof(struct ieee80211_channel)*RTW_5G_CHANNELS_NUM
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtw_2g_rates_init(struct ieee80211_rate *rates)
|
static void rtw_2g_rates_init(struct ieee80211_rate *rates)
|
||||||
{
|
{
|
||||||
_rtw_memcpy(rates, rtw_g_rates,
|
_rtw_memcpy(rates, rtw_g_rates,
|
||||||
sizeof(struct ieee80211_rate)*RTW_G_RATES_NUM
|
sizeof(struct ieee80211_rate)*RTW_G_RATES_NUM
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtw_5g_rates_init(struct ieee80211_rate *rates)
|
static void rtw_5g_rates_init(struct ieee80211_rate *rates)
|
||||||
{
|
{
|
||||||
_rtw_memcpy(rates, rtw_a_rates,
|
_rtw_memcpy(rates, rtw_a_rates,
|
||||||
sizeof(struct ieee80211_rate)*RTW_A_RATES_NUM
|
sizeof(struct ieee80211_rate)*RTW_A_RATES_NUM
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ieee80211_supported_band *rtw_spt_band_alloc(
|
static struct ieee80211_supported_band *rtw_spt_band_alloc(
|
||||||
enum ieee80211_band band
|
enum ieee80211_band band
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -243,7 +243,7 @@ exit:
|
||||||
return spt_band;
|
return spt_band;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtw_spt_band_free(struct ieee80211_supported_band *spt_band)
|
static void rtw_spt_band_free(struct ieee80211_supported_band *spt_band)
|
||||||
{
|
{
|
||||||
u32 size;
|
u32 size;
|
||||||
|
|
||||||
|
@ -357,7 +357,7 @@ struct cfg80211_bss *rtw_cfg80211_inform_bss(struct adapter *padapter, struct wl
|
||||||
u8 buf[MAX_BSSINFO_LEN], *pbuf;
|
u8 buf[MAX_BSSINFO_LEN], *pbuf;
|
||||||
size_t len,bssinf_len=0;
|
size_t len,bssinf_len=0;
|
||||||
struct rtw_ieee80211_hdr *pwlanhdr;
|
struct rtw_ieee80211_hdr *pwlanhdr;
|
||||||
unsigned short *fctrl;
|
__le16 *fctrl;
|
||||||
u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
||||||
|
|
||||||
struct wireless_dev *wdev = padapter->rtw_wdev;
|
struct wireless_dev *wdev = padapter->rtw_wdev;
|
||||||
|
@ -422,8 +422,8 @@ struct cfg80211_bss *rtw_cfg80211_inform_bss(struct adapter *padapter, struct wl
|
||||||
|
|
||||||
notify_timestamp = jiffies_to_msecs(jiffies)*1000; /* uSec */
|
notify_timestamp = jiffies_to_msecs(jiffies)*1000; /* uSec */
|
||||||
|
|
||||||
notify_interval = le16_to_cpu(*(u16*)rtw_get_beacon_interval_from_ie(pnetwork->network.IEs));
|
notify_interval = le16_to_cpu(*(__le16 *)rtw_get_beacon_interval_from_ie(pnetwork->network.IEs));
|
||||||
notify_capability = le16_to_cpu(*(u16*)rtw_get_capability_from_ie(pnetwork->network.IEs));
|
notify_capability = le16_to_cpu(*(__le16 *)rtw_get_capability_from_ie(pnetwork->network.IEs));
|
||||||
|
|
||||||
|
|
||||||
notify_ie = pnetwork->network.IEs+_FIXED_IE_LENGTH_;
|
notify_ie = pnetwork->network.IEs+_FIXED_IE_LENGTH_;
|
||||||
|
@ -1667,15 +1667,13 @@ static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,
|
||||||
struct adapter *padapter = (struct adapter *)rtw_netdev_priv(ndev);
|
struct adapter *padapter = (struct adapter *)rtw_netdev_priv(ndev);
|
||||||
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
struct security_priv *psecuritypriv = &padapter->securitypriv;
|
||||||
|
|
||||||
DBG_871X(FUNC_NDEV_FMT" key_index=%d"
|
|
||||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
|
||||||
", unicast=%d, multicast=%d"
|
DBG_871X(FUNC_NDEV_FMT" key_index=%d, unicast=%d, multicast=%d\n",
|
||||||
|
FUNC_NDEV_ARG(ndev), key_index , unicast, multicast);
|
||||||
|
#else
|
||||||
|
DBG_871X(FUNC_NDEV_FMT" key_index=%d\n", FUNC_NDEV_ARG(ndev),
|
||||||
|
key_index);
|
||||||
#endif
|
#endif
|
||||||
".\n", FUNC_NDEV_ARG(ndev), key_index
|
|
||||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
|
|
||||||
, unicast, multicast
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
|
|
||||||
if ((key_index < WEP_KEYS) && ((psecuritypriv->dot11PrivacyAlgrthm == _WEP40_) || (psecuritypriv->dot11PrivacyAlgrthm == _WEP104_))) //set wep default key
|
if ((key_index < WEP_KEYS) && ((psecuritypriv->dot11PrivacyAlgrthm == _WEP40_) || (psecuritypriv->dot11PrivacyAlgrthm == _WEP104_))) //set wep default key
|
||||||
{
|
{
|
||||||
|
@ -3417,9 +3415,9 @@ static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_de
|
||||||
/* Check if this ia a Wireless Distribution System (WDS) frame
|
/* Check if this ia a Wireless Distribution System (WDS) frame
|
||||||
* which has 4 MAC addresses
|
* which has 4 MAC addresses
|
||||||
*/
|
*/
|
||||||
if (dot11_hdr->frame_control & 0x0080)
|
if (frame_ctl & 0x0080)
|
||||||
qos_len = 2;
|
qos_len = 2;
|
||||||
if ((dot11_hdr->frame_control & 0x0300) == 0x0300)
|
if ((frame_ctl & 0x0300) == 0x0300)
|
||||||
dot11_hdr_len += 6;
|
dot11_hdr_len += 6;
|
||||||
|
|
||||||
memcpy(dst_mac_addr, dot11_hdr->addr1, sizeof(dst_mac_addr));
|
memcpy(dst_mac_addr, dot11_hdr->addr1, sizeof(dst_mac_addr));
|
||||||
|
@ -4236,7 +4234,7 @@ void rtw_cfg80211_issue_p2p_provision_request(struct adapter *padapter, const u8
|
||||||
struct pkt_attrib *pattrib;
|
struct pkt_attrib *pattrib;
|
||||||
unsigned char *pframe;
|
unsigned char *pframe;
|
||||||
struct rtw_ieee80211_hdr *pwlanhdr;
|
struct rtw_ieee80211_hdr *pwlanhdr;
|
||||||
unsigned short *fctrl;
|
__le16 *fctrl;
|
||||||
struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
|
struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
|
||||||
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
|
||||||
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
|
||||||
|
@ -4244,7 +4242,7 @@ void rtw_cfg80211_issue_p2p_provision_request(struct adapter *padapter, const u8
|
||||||
struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
|
struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
|
||||||
u8 *frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
|
u8 *frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
|
||||||
size_t frame_body_len = len - sizeof(struct rtw_ieee80211_hdr_3addr);
|
size_t frame_body_len = len - sizeof(struct rtw_ieee80211_hdr_3addr);
|
||||||
|
__be16 be_tmp;
|
||||||
|
|
||||||
DBG_871X( "[%s] In\n", __FUNCTION__ );
|
DBG_871X( "[%s] In\n", __FUNCTION__ );
|
||||||
|
|
||||||
|
@ -4255,29 +4253,28 @@ void rtw_cfg80211_issue_p2p_provision_request(struct adapter *padapter, const u8
|
||||||
pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_PUSH_BUTTON;
|
pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_PUSH_BUTTON;
|
||||||
|
|
||||||
rtw_get_wps_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, frame_body_len - _PUBLIC_ACTION_IE_OFFSET_, wpsie, &wpsielen);
|
rtw_get_wps_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, frame_body_len - _PUBLIC_ACTION_IE_OFFSET_, wpsie, &wpsielen);
|
||||||
rtw_get_wps_attr_content( wpsie, wpsielen, WPS_ATTR_DEVICE_PWID, (u8*) &wps_devicepassword_id, &wps_devicepassword_id_len);
|
rtw_get_wps_attr_content( wpsie, wpsielen, WPS_ATTR_DEVICE_PWID, (u8*) &be_tmp, &wps_devicepassword_id_len);
|
||||||
wps_devicepassword_id = be16_to_cpu( wps_devicepassword_id );
|
wps_devicepassword_id = be16_to_cpu(be_tmp);
|
||||||
|
|
||||||
switch(wps_devicepassword_id)
|
switch(wps_devicepassword_id) {
|
||||||
{
|
case WPS_DPID_PIN:
|
||||||
case WPS_DPID_PIN:
|
pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_LABEL;
|
||||||
pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_LABEL;
|
break;
|
||||||
break;
|
case WPS_DPID_USER_SPEC:
|
||||||
case WPS_DPID_USER_SPEC:
|
pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_DISPLYA;
|
||||||
pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_DISPLYA;
|
break;
|
||||||
break;
|
case WPS_DPID_MACHINE_SPEC:
|
||||||
case WPS_DPID_MACHINE_SPEC:
|
break;
|
||||||
break;
|
case WPS_DPID_REKEY:
|
||||||
case WPS_DPID_REKEY:
|
break;
|
||||||
break;
|
case WPS_DPID_PBC:
|
||||||
case WPS_DPID_PBC:
|
pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_PUSH_BUTTON;
|
||||||
pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_PUSH_BUTTON;
|
break;
|
||||||
break;
|
case WPS_DPID_REGISTRAR_SPEC:
|
||||||
case WPS_DPID_REGISTRAR_SPEC:
|
pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_KEYPAD;
|
||||||
pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_KEYPAD;
|
break;
|
||||||
break;
|
default:
|
||||||
default:
|
break;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4289,17 +4286,13 @@ void rtw_cfg80211_issue_p2p_provision_request(struct adapter *padapter, const u8
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//start to build provision_request frame
|
//start to build provision_request frame
|
||||||
_rtw_memset(wpsie, 0, sizeof(wpsie));
|
_rtw_memset(wpsie, 0, sizeof(wpsie));
|
||||||
_rtw_memset(p2p_ie, 0, sizeof(p2p_ie));
|
_rtw_memset(p2p_ie, 0, sizeof(p2p_ie));
|
||||||
p2p_ielen = 0;
|
p2p_ielen = 0;
|
||||||
|
|
||||||
if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
|
if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//update attribute
|
//update attribute
|
||||||
pattrib = &pmgntframe->attrib;
|
pattrib = &pmgntframe->attrib;
|
||||||
|
@ -4384,16 +4377,16 @@ void rtw_cfg80211_issue_p2p_provision_request(struct adapter *padapter, const u8
|
||||||
|
|
||||||
wpsielen = 0;
|
wpsielen = 0;
|
||||||
// WPS OUI
|
// WPS OUI
|
||||||
*(u32*) ( wpsie ) = cpu_to_be32( WPSOUI );
|
*(__be32 *) ( wpsie ) = cpu_to_be32( WPSOUI );
|
||||||
wpsielen += 4;
|
wpsielen += 4;
|
||||||
|
|
||||||
// WPS version
|
// WPS version
|
||||||
// Type:
|
// Type:
|
||||||
*(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_VER1 );
|
*(__be16 *) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_VER1 );
|
||||||
wpsielen += 2;
|
wpsielen += 2;
|
||||||
|
|
||||||
// Length:
|
// Length:
|
||||||
*(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0001 );
|
*(__be16 *) ( wpsie + wpsielen ) = cpu_to_be16( 0x0001 );
|
||||||
wpsielen += 2;
|
wpsielen += 2;
|
||||||
|
|
||||||
// Value:
|
// Value:
|
||||||
|
@ -4401,15 +4394,15 @@ void rtw_cfg80211_issue_p2p_provision_request(struct adapter *padapter, const u8
|
||||||
|
|
||||||
// Config Method
|
// Config Method
|
||||||
// Type:
|
// Type:
|
||||||
*(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_CONF_METHOD );
|
*(__be16 *) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_CONF_METHOD );
|
||||||
wpsielen += 2;
|
wpsielen += 2;
|
||||||
|
|
||||||
// Length:
|
// Length:
|
||||||
*(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0002 );
|
*(__be16 *) ( wpsie + wpsielen ) = cpu_to_be16( 0x0002 );
|
||||||
wpsielen += 2;
|
wpsielen += 2;
|
||||||
|
|
||||||
// Value:
|
// Value:
|
||||||
*(u16*) ( wpsie + wpsielen ) = cpu_to_be16( pwdinfo->tx_prov_disc_info.wps_config_method_request );
|
*(__be16 *) ( wpsie + wpsielen ) = cpu_to_be16( pwdinfo->tx_prov_disc_info.wps_config_method_request );
|
||||||
wpsielen += 2;
|
wpsielen += 2;
|
||||||
|
|
||||||
pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *) wpsie, &pattrib->pktlen );
|
pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *) wpsie, &pattrib->pktlen );
|
||||||
|
@ -5078,7 +5071,7 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu
|
||||||
if((wps_ie = rtw_get_wps_ie(buf, len, NULL, &wps_ielen)))
|
if((wps_ie = rtw_get_wps_ie(buf, len, NULL, &wps_ielen)))
|
||||||
{
|
{
|
||||||
uint attr_contentlen = 0;
|
uint attr_contentlen = 0;
|
||||||
u16 uconfig_method, *puconfig_method = NULL;
|
__be16 uconfig_method, *puconfig_method = NULL;
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_CFG80211
|
#ifdef CONFIG_DEBUG_CFG80211
|
||||||
DBG_8192C("probe_resp_wps_ielen=%d\n", wps_ielen);
|
DBG_8192C("probe_resp_wps_ielen=%d\n", wps_ielen);
|
||||||
|
@ -5122,8 +5115,7 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu
|
||||||
//printk("config_method in wpsie of probe_resp = 0x%x\n", be16_to_cpu(*puconfig_method));
|
//printk("config_method in wpsie of probe_resp = 0x%x\n", be16_to_cpu(*puconfig_method));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uconfig_method = WPS_CM_PUSH_BUTTON;
|
uconfig_method = cpu_to_be16(WPS_CM_PUSH_BUTTON);
|
||||||
uconfig_method = cpu_to_be16( uconfig_method );
|
|
||||||
|
|
||||||
*puconfig_method |= uconfig_method;
|
*puconfig_method |= uconfig_method;
|
||||||
}
|
}
|
||||||
|
@ -5142,17 +5134,18 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu
|
||||||
u8 is_GO = false;
|
u8 is_GO = false;
|
||||||
u32 attr_contentlen = 0;
|
u32 attr_contentlen = 0;
|
||||||
u16 cap_attr=0;
|
u16 cap_attr=0;
|
||||||
|
__le16 le_tmp;
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_CFG80211
|
#ifdef CONFIG_DEBUG_CFG80211
|
||||||
DBG_8192C("probe_resp_p2p_ielen=%d\n", p2p_ielen);
|
DBG_8192C("probe_resp_p2p_ielen=%d\n", p2p_ielen);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//Check P2P Capability ATTR
|
//Check P2P Capability ATTR
|
||||||
if( rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&cap_attr, (uint*) &attr_contentlen) )
|
if( rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&le_tmp, (uint*) &attr_contentlen) )
|
||||||
{
|
{
|
||||||
u8 grp_cap=0;
|
u8 grp_cap=0;
|
||||||
//DBG_8192C( "[%s] Got P2P Capability Attr!!\n", __FUNCTION__ );
|
//DBG_8192C( "[%s] Got P2P Capability Attr!!\n", __FUNCTION__ );
|
||||||
cap_attr = le16_to_cpu(cap_attr);
|
cap_attr = le16_to_cpu(le_tmp);
|
||||||
grp_cap = (u8)((cap_attr >> 8)&0xff);
|
grp_cap = (u8)((cap_attr >> 8)&0xff);
|
||||||
|
|
||||||
is_GO = (grp_cap&BIT(0)) ? true:false;
|
is_GO = (grp_cap&BIT(0)) ? true:false;
|
||||||
|
@ -5406,7 +5399,7 @@ static void rtw_cfg80211_init_ht_capab(struct ieee80211_sta_ht_cap *ht_cap, enum
|
||||||
ht_cap->mcs.rx_mask[1] = 0x00;
|
ht_cap->mcs.rx_mask[1] = 0x00;
|
||||||
ht_cap->mcs.rx_mask[4] = 0x01;
|
ht_cap->mcs.rx_mask[4] = 0x01;
|
||||||
|
|
||||||
ht_cap->mcs.rx_highest = MAX_BIT_RATE_40MHZ_MCS7;
|
ht_cap->mcs.rx_highest = cpu_to_le16(MAX_BIT_RATE_40MHZ_MCS7);
|
||||||
}
|
}
|
||||||
else if((rf_type == RF_1T2R) || (rf_type==RF_2T2R))
|
else if((rf_type == RF_1T2R) || (rf_type==RF_2T2R))
|
||||||
{
|
{
|
||||||
|
@ -5414,7 +5407,7 @@ static void rtw_cfg80211_init_ht_capab(struct ieee80211_sta_ht_cap *ht_cap, enum
|
||||||
ht_cap->mcs.rx_mask[1] = 0xFF;
|
ht_cap->mcs.rx_mask[1] = 0xFF;
|
||||||
ht_cap->mcs.rx_mask[4] = 0x01;
|
ht_cap->mcs.rx_mask[4] = 0x01;
|
||||||
|
|
||||||
ht_cap->mcs.rx_highest = MAX_BIT_RATE_40MHZ_MCS15;
|
ht_cap->mcs.rx_highest = cpu_to_le16(MAX_BIT_RATE_40MHZ_MCS15);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue