-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PATCH 1/8] rtl8192e: Import new version of driver from realtek Signed-off-by: wlanfae <wlanfae@realtek.com> Signed-off-by: Mike McCormack <mikem@ring3k.org> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> ---
- Loading branch information
Showing
76 changed files
with
59,867 additions
and
14,253 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,38 +1,46 @@ | ||
NIC_SELECT = RTL8192E | ||
|
||
ccflags-y := -DRTL8192E | ||
ccflags-y += -std=gnu89 | ||
ccflags-y += -O2 | ||
ccflags-y += -DTHOMAS_TURBO | ||
ccflags-y += -DRTL8192E | ||
ccflags-y += -DEEPROM_OLD_FORMAT_SUPPORT=1 | ||
ccflags-y += -DUSE_FW_SOURCE_IMG_FILE | ||
ccflags-y += -DENABLE_GPIO_RADIO_CTL | ||
ccflags-y += -DCONFIG_PM_RTL | ||
ccflags-y += -DCONFIG_PM | ||
ccflags-y += -DENABLE_DOT11D | ||
ccflags-y += -DHAVE_NET_DEVICE_OPS | ||
ccflags-y += -DENABLE_DOT11D | ||
|
||
ccflags-y += -DENABLE_IPS | ||
ccflags-y += -DENABLE_LPS | ||
|
||
r8192e_pci-objs := \ | ||
r8192E_core.o \ | ||
r8180_93cx6.o \ | ||
r8192E_wx.o \ | ||
r8190_rtl8256.o \ | ||
r819xE_phy.o \ | ||
r819xE_firmware.o \ | ||
r819xE_cmdpkt.o \ | ||
r8192E_dm.o \ | ||
r8192_pm.o \ | ||
ieee80211/ieee80211_rx.o \ | ||
ieee80211/ieee80211_softmac.o \ | ||
ieee80211/ieee80211_tx.o \ | ||
ieee80211/ieee80211_wx.o \ | ||
ieee80211/ieee80211_module.o \ | ||
ieee80211/ieee80211_softmac_wx.o \ | ||
ieee80211/rtl819x_HTProc.o \ | ||
ieee80211/rtl819x_TSProc.o \ | ||
ieee80211/rtl819x_BAProc.o \ | ||
ieee80211/dot11d.o \ | ||
ieee80211/ieee80211_crypt.o \ | ||
ieee80211/ieee80211_crypt_tkip.o \ | ||
ieee80211/ieee80211_crypt_ccmp.o \ | ||
ieee80211/ieee80211_crypt_wep.o | ||
rtl_core.o \ | ||
rtl_eeprom.o \ | ||
rtl_ps.o \ | ||
rtl_wx.o \ | ||
rtl_cam.o \ | ||
rtl_dm.o \ | ||
rtl_pm.o \ | ||
rtl_pci.o \ | ||
rtl_debug.o \ | ||
rtl_ethtool.o \ | ||
r8192E_dev.o \ | ||
r8192E_phy.o \ | ||
r8192E_firmware.o \ | ||
r8192E_cmdpkt.o \ | ||
r8192E_hwimg.o \ | ||
r8190P_rtl8256.o \ | ||
rtllib_rx.o \ | ||
rtllib_softmac.o \ | ||
rtllib_tx.o \ | ||
rtllib_wx.o \ | ||
rtllib_module.o \ | ||
rtllib_softmac_wx.o \ | ||
rtl819x_HTProc.o \ | ||
rtl819x_TSProc.o \ | ||
rtl819x_BAProc.o \ | ||
dot11d.o \ | ||
rtllib_crypt.o \ | ||
rtllib_crypt_tkip.o \ | ||
rtllib_crypt_ccmp.o \ | ||
rtllib_crypt_wep.o | ||
|
||
obj-$(CONFIG_RTL8192E) += r8192e_pci.o | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,216 @@ | ||
/****************************************************************************** | ||
* Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. | ||
* | ||
* This program is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
* more details. | ||
* | ||
* You should have received a copy of the GNU General Public License along with | ||
* this program; if not, write to the Free Software Foundation, Inc., | ||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA | ||
* | ||
* The full GNU General Public License is included in this distribution in the | ||
* file called LICENSE. | ||
* | ||
* Contact Information: | ||
* wlanfae <wlanfae@realtek.com> | ||
******************************************************************************/ | ||
#include "dot11d.h" | ||
|
||
struct channel_list { | ||
u8 Channel[32]; | ||
u8 Len; | ||
}; | ||
|
||
static struct channel_list ChannelPlan[] = { | ||
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 36, 40, 44, 48, 52, 56, 60, 64, | ||
149, 153, 157, 161, 165}, 24}, | ||
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, 11}, | ||
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 36, 40, 44, 48, 52, 56, | ||
60, 64}, 21}, | ||
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13}, | ||
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13}, | ||
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 36, 40, 44, 48, 52, | ||
56, 60, 64}, 22}, | ||
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 36, 40, 44, 48, 52, | ||
56, 60, 64}, 22}, | ||
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13}, | ||
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 36, 40, 44, 48, 52, | ||
56, 60, 64}, 22}, | ||
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 36, 40, 44, 48, 52, | ||
56, 60, 64}, 22}, | ||
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, 14}, | ||
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13}, | ||
{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 36, 40, 44, 48, 52, | ||
56, 60, 64}, 21} | ||
}; | ||
|
||
void Dot11d_Init(struct rtllib_device *ieee) | ||
{ | ||
struct rt_dot11d_info *pDot11dInfo = GET_DOT11D_INFO(ieee); | ||
pDot11dInfo->bEnabled = false; | ||
|
||
pDot11dInfo->State = DOT11D_STATE_NONE; | ||
pDot11dInfo->CountryIeLen = 0; | ||
memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1); | ||
memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1); | ||
RESET_CIE_WATCHDOG(ieee); | ||
|
||
} | ||
|
||
void Dot11d_Channelmap(u8 channel_plan, struct rtllib_device *ieee) | ||
{ | ||
int i, max_chan = 14, min_chan = 1; | ||
|
||
ieee->bGlobalDomain = false; | ||
|
||
if (ChannelPlan[channel_plan].Len != 0) { | ||
memset(GET_DOT11D_INFO(ieee)->channel_map, 0, | ||
sizeof(GET_DOT11D_INFO(ieee)->channel_map)); | ||
for (i = 0; i < ChannelPlan[channel_plan].Len; i++) { | ||
if (ChannelPlan[channel_plan].Channel[i] < min_chan || | ||
ChannelPlan[channel_plan].Channel[i] > max_chan) | ||
break; | ||
GET_DOT11D_INFO(ieee)->channel_map[ChannelPlan | ||
[channel_plan].Channel[i]] = 1; | ||
} | ||
} | ||
|
||
switch (channel_plan) { | ||
case COUNTRY_CODE_GLOBAL_DOMAIN: | ||
ieee->bGlobalDomain = true; | ||
for (i = 12; i <= 14; i++) | ||
GET_DOT11D_INFO(ieee)->channel_map[i] = 2; | ||
ieee->IbssStartChnl = 10; | ||
ieee->ibss_maxjoin_chal = 11; | ||
break; | ||
|
||
case COUNTRY_CODE_WORLD_WIDE_13: | ||
for (i = 12; i <= 13; i++) | ||
GET_DOT11D_INFO(ieee)->channel_map[i] = 2; | ||
ieee->IbssStartChnl = 10; | ||
ieee->ibss_maxjoin_chal = 11; | ||
break; | ||
|
||
default: | ||
ieee->IbssStartChnl = 1; | ||
ieee->ibss_maxjoin_chal = 14; | ||
break; | ||
} | ||
} | ||
|
||
|
||
void Dot11d_Reset(struct rtllib_device *ieee) | ||
{ | ||
struct rt_dot11d_info *pDot11dInfo = GET_DOT11D_INFO(ieee); | ||
u32 i; | ||
|
||
memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1); | ||
memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1); | ||
for (i = 1; i <= 11; i++) | ||
(pDot11dInfo->channel_map)[i] = 1; | ||
for (i = 12; i <= 14; i++) | ||
(pDot11dInfo->channel_map)[i] = 2; | ||
pDot11dInfo->State = DOT11D_STATE_NONE; | ||
pDot11dInfo->CountryIeLen = 0; | ||
RESET_CIE_WATCHDOG(ieee); | ||
} | ||
|
||
void Dot11d_UpdateCountryIe(struct rtllib_device *dev, u8 *pTaddr, | ||
u16 CoutryIeLen, u8 *pCoutryIe) | ||
{ | ||
struct rt_dot11d_info *pDot11dInfo = GET_DOT11D_INFO(dev); | ||
u8 i, j, NumTriples, MaxChnlNum; | ||
struct chnl_txpow_triple *pTriple; | ||
|
||
memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1); | ||
memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1); | ||
MaxChnlNum = 0; | ||
NumTriples = (CoutryIeLen - 3) / 3; | ||
pTriple = (struct chnl_txpow_triple *)(pCoutryIe + 3); | ||
for (i = 0; i < NumTriples; i++) { | ||
if (MaxChnlNum >= pTriple->FirstChnl) { | ||
printk(KERN_INFO "Dot11d_UpdateCountryIe(): Invalid" | ||
" country IE, skip it........1\n"); | ||
return; | ||
} | ||
if (MAX_CHANNEL_NUMBER < (pTriple->FirstChnl + | ||
pTriple->NumChnls)) { | ||
printk(KERN_INFO "Dot11d_UpdateCountryIe(): Invalid " | ||
"country IE, skip it........2\n"); | ||
return; | ||
} | ||
|
||
for (j = 0 ; j < pTriple->NumChnls; j++) { | ||
pDot11dInfo->channel_map[pTriple->FirstChnl + j] = 1; | ||
pDot11dInfo->MaxTxPwrDbmList[pTriple->FirstChnl + j] = | ||
pTriple->MaxTxPowerInDbm; | ||
MaxChnlNum = pTriple->FirstChnl + j; | ||
} | ||
|
||
pTriple = (struct chnl_txpow_triple *)((u8*)pTriple + 3); | ||
} | ||
|
||
UPDATE_CIE_SRC(dev, pTaddr); | ||
|
||
pDot11dInfo->CountryIeLen = CoutryIeLen; | ||
memcpy(pDot11dInfo->CountryIeBuf, pCoutryIe, CoutryIeLen); | ||
pDot11dInfo->State = DOT11D_STATE_LEARNED; | ||
} | ||
|
||
u8 DOT11D_GetMaxTxPwrInDbm(struct rtllib_device *dev, u8 Channel) | ||
{ | ||
struct rt_dot11d_info *pDot11dInfo = GET_DOT11D_INFO(dev); | ||
u8 MaxTxPwrInDbm = 255; | ||
|
||
if (MAX_CHANNEL_NUMBER < Channel) { | ||
printk(KERN_INFO "DOT11D_GetMaxTxPwrInDbm(): Invalid " | ||
"Channel\n"); | ||
return MaxTxPwrInDbm; | ||
} | ||
if (pDot11dInfo->channel_map[Channel]) | ||
MaxTxPwrInDbm = pDot11dInfo->MaxTxPwrDbmList[Channel]; | ||
|
||
return MaxTxPwrInDbm; | ||
} | ||
|
||
void DOT11D_ScanComplete(struct rtllib_device *dev) | ||
{ | ||
struct rt_dot11d_info *pDot11dInfo = GET_DOT11D_INFO(dev); | ||
|
||
switch (pDot11dInfo->State) { | ||
case DOT11D_STATE_LEARNED: | ||
pDot11dInfo->State = DOT11D_STATE_DONE; | ||
break; | ||
case DOT11D_STATE_DONE: | ||
Dot11d_Reset(dev); | ||
break; | ||
case DOT11D_STATE_NONE: | ||
break; | ||
} | ||
} | ||
|
||
int ToLegalChannel(struct rtllib_device *dev, u8 channel) | ||
{ | ||
struct rt_dot11d_info *pDot11dInfo = GET_DOT11D_INFO(dev); | ||
u8 default_chn = 0; | ||
u32 i; | ||
|
||
for (i = 1; i <= MAX_CHANNEL_NUMBER; i++) { | ||
if (pDot11dInfo->channel_map[i] > 0) { | ||
default_chn = i; | ||
break; | ||
} | ||
} | ||
|
||
if (MAX_CHANNEL_NUMBER < channel) { | ||
printk(KERN_ERR "%s(): Invalid Channel\n", __func__); | ||
return default_chn; | ||
} | ||
|
||
if (pDot11dInfo->channel_map[channel] > 0) | ||
return channel; | ||
|
||
return default_chn; | ||
} |
Oops, something went wrong.