rtl8188eu: Revert part of 76e49ee

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
This commit is contained in:
Larry Finger 2013-05-26 12:17:22 -05:00
parent 76e49eeec2
commit eac0a699d8
16 changed files with 1004 additions and 86 deletions

View file

@ -43,7 +43,24 @@
#ifdef CONFIG_MP_INCLUDED
#include <rtw_mp.h>
#endif //#ifdef CONFIG_MP_INCLUDED
#ifdef CONFIG_RTL8192C
#include <rtl8192c_hal.h>
#endif
#ifdef CONFIG_RTL8192D
#include <rtl8192d_hal.h>
#endif
#ifdef CONFIG_RTL8723A
#include <rtl8723a_pg.h>
#include <rtl8723a_hal.h>
#include <rtw_bt_mp.h>
#endif
#ifdef CONFIG_RTL8188E
#include <rtl8188e_hal.h>
#endif
#ifdef CONFIG_GSPI_HCI
#include <gspi_ops.h>
#endif
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
#define iwe_stream_add_event(a, b, c, d, e) iwe_stream_add_event(b, c, d, e)
@ -8733,25 +8750,53 @@ static int rtw_mp_efuse_get(struct net_device *dev,
{
addr = 0;
mapLen = EFUSE_MAX_SIZE;
if (rtw_efuse_access(padapter, false, addr, mapLen, rawdata) == _FAIL) {
if (rtw_efuse_access(padapter, false, addr, mapLen, rawdata) == _FAIL)
{
DBG_88E("%s: rtw_efuse_access Fail!!\n", __func__);
err = -EFAULT;
goto exit;
}
// DBG_88E("%s: realraw={\n", __func__);
sprintf(extra, "\n");
for (i=0; i<mapLen; i++) {
for (i=0; i<mapLen; i++)
{
// DBG_88E("%02X", rawdata[i]);
sprintf(extra, "%s%02X", extra, rawdata[i]);
if ((i & 0xF) == 0xF) {
// DBG_88E("\n");
sprintf(extra, "%s\n", extra);
} else if ((i & 0x7) == 0x7){
}
else if ((i & 0x7) == 0x7){
// DBG_88E("\t");
sprintf(extra, "%s\t", extra);
} else {
// DBG_88E(" ");
sprintf(extra, "%s ", extra);
}
}
} else if (strcmp(tmp[0], "mac") == 0) {
// DBG_88E("}\n");
}
else if (strcmp(tmp[0], "mac") == 0)
{
#ifdef CONFIG_RTL8192C
addr = 0x16; // EEPROM_MAC_ADDR
#endif
#ifdef CONFIG_RTL8192D
addr = 0x19;
#endif
#ifdef CONFIG_RTL8723A
#ifdef CONFIG_SDIO_HCI
addr = EEPROM_MAC_ADDR_8723AS;
#endif
#ifdef CONFIG_GSPI_HCI
addr = EEPROM_MAC_ADDR_8723AS;
#endif
#ifdef CONFIG_USB_HCI
addr = EEPROM_MAC_ADDR_8723AU;
#endif
#endif // CONFIG_RTL8723A
cnts = 6;
EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false);
@ -8761,81 +8806,141 @@ static int rtw_mp_efuse_get(struct net_device *dev,
goto exit;
}
if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL) {
if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL)
{
DBG_88E("%s: rtw_efuse_map_read error!\n", __func__);
err = -EFAULT;
goto exit;
}
// DBG_88E("%s: MAC address={", __func__);
*extra = 0;
for (i=0; i<cnts; i++) {
for (i=0; i<cnts; i++)
{
// DBG_88E("%02X", data[i]);
sprintf(extra, "%s%02X", extra, data[i]);
if (i != (cnts-1))
{
// DBG_88E(":");
sprintf(extra,"%s:",extra);
}
}
} else if (strcmp(tmp[0], "vidpid") == 0) {
// DBG_88E("}\n");
}
else if (strcmp(tmp[0], "vidpid") == 0)
{
#ifdef CONFIG_RTL8192C
addr = 0x0a; // EEPROM_VID
#endif
#ifdef CONFIG_RTL8192D
addr = 0x0c;
#endif
#ifdef CONFIG_RTL8723A
addr = EEPROM_VID_8723AU;
#endif
cnts = 4;
EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false);
if ((addr + cnts) > max_available_size) {
if ((addr + cnts) > max_available_size)
{
DBG_88E("%s: addr(0x%02x)+cnts(%d) parameter error!\n", __func__, addr, cnts);
err = -EFAULT;
goto exit;
}
if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL) {
if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL)
{
DBG_88E("%s: rtw_efuse_access error!!\n", __func__);
err = -EFAULT;
goto exit;
}
// DBG_88E("%s: {VID,PID}={", __func__);
*extra = 0;
for (i=0; i<cnts; i++) {
for (i=0; i<cnts; i++)
{
// DBG_88E("0x%02x", data[i]);
sprintf(extra, "%s0x%02X", extra, data[i]);
if (i != (cnts-1))
{
// DBG_88E(",");
sprintf(extra,"%s,",extra);
}
}
} else if (strcmp(tmp[0], "ableraw") == 0) {
// DBG_88E("}\n");
}
else if (strcmp(tmp[0], "ableraw") == 0)
{
efuse_GetCurrentSize(padapter,&raw_cursize);
raw_maxsize = efuse_GetMaxSize(padapter);
sprintf(extra, "[available raw size]= %d bytes", raw_maxsize-raw_cursize);
} else if (strcmp(tmp[0], "btfmap") == 0) {
}
else if (strcmp(tmp[0], "btfmap") == 0)
{
mapLen = EFUSE_BT_MAX_MAP_LEN;
if (rtw_BT_efuse_map_read(padapter, 0, mapLen, pEfuseHal->BTEfuseInitMap) == _FAIL) {
if (rtw_BT_efuse_map_read(padapter, 0, mapLen, pEfuseHal->BTEfuseInitMap) == _FAIL)
{
DBG_88E("%s: rtw_BT_efuse_map_read Fail!!\n", __func__);
err = -EFAULT;
goto exit;
}
// DBG_88E("OFFSET\tVALUE(hex)\n");
sprintf(extra, "\n");
for (i=0; i<512; i+=16) { // set 512 because the iwpriv's extra size have limit 0x7FF
for (i=0; i<512; i+=16) // set 512 because the iwpriv's extra size have limit 0x7FF
{
// DBG_88E("0x%03x\t", i);
sprintf(extra, "%s0x%03x\t", extra, i);
for (j=0; j<8; j++)
for (j=0; j<8; j++) {
// DBG_88E("%02X ", pEfuseHal->BTEfuseInitMap[i+j]);
sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]);
}
// DBG_88E("\t");
sprintf(extra,"%s\t",extra);
for (; j<16; j++)
for (; j<16; j++) {
// DBG_88E("%02X ", pEfuseHal->BTEfuseInitMap[i+j]);
sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]);
}
// DBG_88E("\n");
sprintf(extra, "%s\n", extra);
}
} else if (strcmp(tmp[0],"btbmap") == 0) {
// DBG_88E("\n");
}
else if (strcmp(tmp[0],"btbmap") == 0)
{
mapLen = EFUSE_BT_MAX_MAP_LEN;
if (rtw_BT_efuse_map_read(padapter, 0, mapLen, pEfuseHal->BTEfuseInitMap) == _FAIL) {
if (rtw_BT_efuse_map_read(padapter, 0, mapLen, pEfuseHal->BTEfuseInitMap) == _FAIL)
{
DBG_88E("%s: rtw_BT_efuse_map_read Fail!!\n", __func__);
err = -EFAULT;
goto exit;
}
// DBG_88E("OFFSET\tVALUE(hex)\n");
sprintf(extra, "\n");
for (i=512; i<1024 ; i+=16) {
for (i=512; i<1024 ; i+=16)
{
// DBG_88E("0x%03x\t", i);
sprintf(extra, "%s0x%03x\t", extra, i);
for (j=0; j<8; j++)
{
// DBG_88E("%02X ", data[i+j]);
sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]);
}
// DBG_88E("\t");
sprintf(extra,"%s\t",extra);
for (; j<16; j++)
for (; j<16; j++) {
// DBG_88E("%02X ", data[i+j]);
sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]);
}
// DBG_88E("\n");
sprintf(extra, "%s\n", extra);
}
} else if (strcmp(tmp[0],"btrmap") == 0) {
if ((tmp[1]==NULL) || (tmp[2]==NULL)) {
// DBG_88E("\n");
}
else if (strcmp(tmp[0],"btrmap") == 0)
{
if ((tmp[1]==NULL) || (tmp[2]==NULL))
{
err = -EINVAL;
goto exit;
}
@ -8845,7 +8950,8 @@ static int rtw_mp_efuse_get(struct net_device *dev,
DBG_88E("%s: addr=0x%X\n", __func__, addr);
cnts = simple_strtoul(tmp[2], &ptmp, 10);
if (cnts == 0) {
if (cnts == 0)
{
DBG_88E("%s: btrmap Fail!! cnts error!\n", __func__);
err = -EINVAL;
goto exit;
@ -9077,21 +9183,30 @@ static int rtw_mp_efuse_set(struct net_device *dev,
{
setdata[jj] = key_2char2num(tmp[2][kk], tmp[2][kk+1]);
}
#ifndef CONFIG_RTL8188E
EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false);
#else
//Change to check TYPE_EFUSE_MAP_LEN ,beacuse 8188E raw 256,logic map over 256.
EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&max_available_size, false);
if ((addr+cnts) > max_available_size) {
#endif
if ((addr+cnts) > max_available_size)
{
DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts);
err = -EFAULT;
goto exit;
}
if (rtw_efuse_map_write(padapter, addr, cnts, setdata) == _FAIL) {
if (rtw_efuse_map_write(padapter, addr, cnts, setdata) == _FAIL)
{
DBG_88E("%s: rtw_efuse_map_write error!!\n", __func__);
err = -EFAULT;
goto exit;
}
} else if (strcmp(tmp[0], "wraw") == 0) {
if ((tmp[1]==NULL) || (tmp[2]==NULL)) {
}
else if (strcmp(tmp[0], "wraw") == 0)
{
if ((tmp[1]==NULL) || (tmp[2]==NULL))
{
err = -EINVAL;
goto exit;
}
@ -9100,12 +9215,14 @@ static int rtw_mp_efuse_set(struct net_device *dev,
addr &= 0xFFF;
cnts = strlen(tmp[2]);
if (cnts%2) {
if (cnts%2)
{
err = -EINVAL;
goto exit;
}
cnts /= 2;
if (cnts == 0) {
if (cnts == 0)
{
err = -EINVAL;
goto exit;
}
@ -9114,7 +9231,8 @@ static int rtw_mp_efuse_set(struct net_device *dev,
DBG_88E("%s: cnts=%d\n", __func__, cnts);
DBG_88E("%s: raw data=%s\n", __func__, tmp[2]);
for (jj=0, kk=0; jj<cnts; jj++, kk+=2) {
for (jj=0, kk=0; jj<cnts; jj++, kk+=2)
{
setrawdata[jj] = key_2char2num(tmp[2][kk], tmp[2][kk+1]);
}
@ -9134,19 +9252,49 @@ static int rtw_mp_efuse_set(struct net_device *dev,
}
//mac,00e04c871200
addr = EEPROM_MAC_ADDR_88EU;
#ifdef CONFIG_RTL8192C
addr = 0x16;
#endif
#ifdef CONFIG_RTL8192D
addr = 0x19;
#endif
#ifdef CONFIG_RTL8723A
#ifdef CONFIG_SDIO_HCI
addr = EEPROM_MAC_ADDR_8723AS;
#endif
#ifdef CONFIG_GSPI_HCI
addr = EEPROM_MAC_ADDR_8723AS;
#endif
#ifdef CONFIG_USB_HCI
addr = EEPROM_MAC_ADDR_8723AU;
#endif
#endif // CONFIG_RTL8723A
#ifdef CONFIG_RTL8188E
#ifdef CONFIG_USB_HCI
addr = EEPROM_MAC_ADDR_88EU;
#endif
#ifdef CONFIG_SDIO_HCI
addr = EEPROM_MAC_ADDR_88ES;
#endif
#ifdef CONFIG_PCI_HCI
addr = EEPROM_MAC_ADDR_88EE;
#endif
#endif //#ifdef CONFIG_RTL8188E
cnts = strlen(tmp[1]);
if (cnts%2) {
if (cnts%2)
{
err = -EINVAL;
goto exit;
}
cnts /= 2;
if (cnts == 0) {
if (cnts == 0)
{
err = -EINVAL;
goto exit;
}
if (cnts > 6) {
if (cnts > 6)
{
DBG_88E("%s: error data for mac addr=\"%s\"\n", __func__, tmp[1]);
err = -EFAULT;
goto exit;
@ -9160,9 +9308,14 @@ static int rtw_mp_efuse_set(struct net_device *dev,
{
setdata[jj] = key_2char2num(tmp[1][kk], tmp[1][kk+1]);
}
#ifndef CONFIG_RTL8188E
EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false);
#else
//Change to check TYPE_EFUSE_MAP_LEN ,beacuse 8188E raw 256,logic map over 256.
EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&max_available_size, false);
if ((addr+cnts) > max_available_size) {
#endif
if ((addr+cnts) > max_available_size)
{
DBG_88E("%s: addr(0x%X)+cnts(%d) parameter error!\n", __func__, addr, cnts);
err = -EFAULT;
goto exit;
@ -9184,7 +9337,23 @@ static int rtw_mp_efuse_set(struct net_device *dev,
}
// pidvid,da0b7881
addr = EEPROM_VID_88EE;
#ifdef CONFIG_RTL8192C
addr = 0x0a;
#endif
#ifdef CONFIG_RTL8192D
addr = 0x0c;
#endif
#ifdef CONFIG_RTL8723A
addr = EEPROM_VID_8723AU;
#endif
#ifdef CONFIG_RTL8188E
#ifdef CONFIG_USB_HCI
addr = EEPROM_VID_88EE;
#endif
#ifdef CONFIG_PCI_HCI
addr = EEPROM_VID_88EE;
#endif
#endif //#ifdef CONFIG_RTL8188E
cnts = strlen(tmp[1]);
if (cnts%2)
{
@ -9736,7 +9905,13 @@ static int rtw_mp_start(struct net_device *dev,
u8 val8;
PADAPTER padapter = rtw_netdev_priv(dev);
if (padapter->registrypriv.mp_mode ==0) {
if (padapter->registrypriv.mp_mode ==0)
{
#ifdef CONFIG_RTL8723A
DBG_88E("_rtw_mp_xmit_priv for Download BT patch FW\n");
_rtw_mp_xmit_priv(&padapter->xmitpriv);
#endif
padapter->registrypriv.mp_mode =1;
rtw_pm_set_ips(padapter,IPS_NONE);
@ -9763,7 +9938,13 @@ static int rtw_mp_stop(struct net_device *dev,
{
PADAPTER padapter = rtw_netdev_priv(dev);
if (padapter->registrypriv.mp_mode ==1) {
if (padapter->registrypriv.mp_mode ==1)
{
#ifdef CONFIG_RTL8723A
DBG_88E("_rtw_mp_xmit_priv reinit for normal mode\n");
_rtw_mp_xmit_priv(&padapter->xmitpriv);
#endif
MPT_DeInitAdapter(padapter);
padapter->registrypriv.mp_mode=0;
}
@ -10259,7 +10440,15 @@ static int rtw_mp_thermal(struct net_device *dev,
u8 val;
u16 bwrite=1;
u16 addr=EEPROM_THERMAL_METER_88E;
#if defined(CONFIG_RTL8192C) || defined(CONFIG_RTL8192D)
u16 addr=EEPROM_THERMAL_METER;
#endif
#ifdef CONFIG_RTL8723A
u16 addr=EEPROM_THERMAL_METER_8723A;
#endif
#if defined(CONFIG_RTL8188E)
u16 addr=EEPROM_THERMAL_METER_88E;
#endif
u16 cnt=1;
u16 max_available_size=0;
@ -10268,11 +10457,15 @@ static int rtw_mp_thermal(struct net_device *dev,
if (copy_from_user(extra, wrqu->pointer, wrqu->length))
return -EFAULT;
//DBG_88E("print extra %s\n",extra);
bwrite = strncmp(extra, "write", 6); // strncmp TRUE is 0
Hal_GetThermalMeter(padapter, &val);
if (bwrite == 0) {
if (bwrite == 0)
{
//DBG_88E("to write val:%d",val);
EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false);
if (2 > max_available_size)
{
@ -10363,14 +10556,19 @@ static int rtw_mp_dump(struct net_device *dev,
else
path_nums = 2;
for (path=0;path<path_nums;path++) {
for (i = 0; i < 0x34; i++) {
for (path=0;path<path_nums;path++)
{
#ifdef CONFIG_RTL8192D
for (i = 0; i < 0x50; i++)
#else
for (i = 0; i < 0x34; i++)
#endif
{
//value = PHY_QueryRFReg(padapter, (RF_RADIO_PATH_E)path,i, bMaskDWord);
value = rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
if (j%4 == 1)
DBG_88E("0x%02x ",i);
if (j%4==1) DBG_88E("0x%02x ",i);
DBG_88E(" 0x%08x ",value);
if ((j++)%4 == 0)
DBG_88E("\n");
if ((j++)%4==0) DBG_88E("\n");
}
}
}
@ -10395,10 +10593,15 @@ static int rtw_mp_phypara(struct net_device *dev,
if (!IS_HARDWARE_TYPE_8192D(padapter))
return 0;
#ifdef CONFIG_RTL8192D
Hal_ProSetCrystalCap(padapter , valxcap);
#endif
sprintf(extra, "Set xcap=%d",valxcap);
wrqu->length = strlen(extra) + 1;
return 0;
return 0;
}
static int rtw_mp_SetRFPath(struct net_device *dev,
@ -10470,6 +10673,161 @@ static int rtw_mp_antBdiff(struct net_device *dev,
return 0;
}
#ifdef CONFIG_RTL8723A
/* update Tx AGC offset */
static int rtw_mp_SetBT(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
PADAPTER padapter = rtw_netdev_priv(dev);
BT_REQ_CMD BtReq;
PMPT_CONTEXT pMptCtx=&(padapter->mppriv.MptCtx);
PBT_RSP_CMD pBtRsp=(PBT_RSP_CMD)&pMptCtx->mptOutBuf[0];
char input[128];
char *pch, *ptmp, *token, *tmp[2]={0x00,0x00};
u8 setdata[100];
u16 testmode=1,ready=1,trxparam=1,setgen=1,getgen=1,testctrl=1,testbt=1;
u32 i,ii,jj,kk,cnts,status;
if (copy_from_user(extra, wrqu->data.pointer, wrqu->data.length))
return -EFAULT;
if (strlen(extra)<1) return -EFAULT;
DBG_88E("%s:iwpriv in=%s\n", __func__, extra);
ready = strncmp(extra, "ready", 5);
testmode = strncmp(extra, "testmode", 8); // strncmp TRUE is 0
trxparam = strncmp(extra, "trxparam", 8);
setgen = strncmp(extra, "setgen", 6);
getgen = strncmp(extra, "getgen", 6);
testctrl = strncmp(extra, "testctrl", 8);
testbt = strncmp(extra, "testbt", 6);
if (strncmp(extra, "dlfw", 4) == 0)
{
status = rtl8723a_FirmwareDownload(padapter);
if (status==_SUCCESS)
{
_rtw_memset(extra,'\0', wrqu->data.length);
DBG_88E("%s: download FW %s\n", __func__, (_FAIL==status) ? "FAIL!":"OK.");
sprintf(extra, "download FW %s", (_FAIL==status) ? "FAIL!":"OK.");
wrqu->data.length = strlen(extra) + 1;
}
goto exit;
}
if (testbt==0)
{
BtReq.opCodeVer=1;
BtReq.OpCode=6;
BtReq.paraLength=cnts/2;
goto todo;
}
if (ready==0)
{
BtReq.opCodeVer=1;
BtReq.OpCode=0;
BtReq.paraLength=0;
goto todo;
}
DBG_88E("%s:after strncmp\n", __func__);
pch = extra;
i = 0;
while ((token = strsep(&pch, ",")) != NULL)
{
if (i > 1) break;
tmp[i] = token;
i++;
}
if ((tmp[0]==NULL) && (tmp[1]==NULL))
{
return -EFAULT;
}
else
{
cnts = strlen(tmp[1]);
if (cnts<1) return -EFAULT;
DBG_88E("%s: cnts=%d\n", __func__, cnts);
DBG_88E("%s: data=%s\n", __func__, tmp[1]);
for (jj=0, kk=0; jj<cnts; jj++, kk+=2)
{
BtReq.pParamStart[jj] = key_2char2num(tmp[1][kk], tmp[1][kk+1]);
DBG_88E("BtReq.pParamStart[%d]=%x\n",ii,BtReq.pParamStart[jj]);
}
}
if (testmode==0)
{
BtReq.opCodeVer=1;
BtReq.OpCode=1;
BtReq.paraLength=1;
}
if (trxparam==0)
{
BtReq.opCodeVer=1;
BtReq.OpCode=2;
BtReq.paraLength=cnts/2;
}
if (setgen==0)
{
DBG_88E("%s: BT_SET_GENERAL\n", __func__);
BtReq.opCodeVer=1;
BtReq.OpCode=3; //BT_SET_GENERAL 3
BtReq.paraLength=cnts/2;
}
if (getgen==0)
{
DBG_88E("%s: BT_GET_GENERAL\n", __func__);
BtReq.opCodeVer=1;
BtReq.OpCode=4; //BT_GET_GENERAL 4
BtReq.paraLength=cnts/2;
}
if (testctrl==0)
{
DBG_88E("%s: BT_TEST_CTRL\n", __func__);
BtReq.opCodeVer=1;
BtReq.OpCode=5; //BT_TEST_CTRL 5
BtReq.paraLength=cnts/2;
}
DBG_88E("%s: BtReq.paraLength =%d\n", __func__, BtReq.paraLength);
DBG_88E("opCodeVer=%d,OpCode=%d\n",BtReq.opCodeVer,BtReq.OpCode);
if (BtReq.paraLength<1)
goto todo;
for (i=0;i<BtReq.paraLength;i++)
{
DBG_88E("%s: BtReq.pParamStart[ %d ] = 0x%02x\n", __func__,i,BtReq.pParamStart[i]);
}
todo:
_rtw_memset(extra,'\0', wrqu->data.length);
mptbt_BtControlProcess(padapter,&BtReq);
for (i=4; i<pMptCtx->mptOutLen; i++)
{
DBG_88E("0x%x ", pMptCtx->mptOutBuf[i]);
sprintf(extra, "%s 0x%x ", extra, pMptCtx->mptOutBuf[i]);
}
exit:
wrqu->data.length = strlen(extra) + 1;
return status;
}
#endif //#ifdef CONFIG_RTL8723A
static int rtw_mp_set(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wdata, char *extra)
@ -10644,10 +11002,17 @@ static int rtw_mp_get(struct net_device *dev,
DBG_88E("set case efuse set\n");
rtw_mp_efuse_set (dev,info,wdata,extra);
break;
#ifdef CONFIG_RTL8723A
case MP_SetBT:
DBG_88E("set MP_SetBT\n");
rtw_mp_SetBT (dev,info,wdata,extra);
break;
#endif
}
rtw_msleep_os(10); //delay 5ms for sending pkt before exit adb shell operation
return 0;
return 0;
}
#endif //#if defined(CONFIG_MP_INCLUDED) && defined(CONFIG_MP_IWPRIV_SUPPORT)
@ -11337,11 +11702,29 @@ static int rtw_widi_set_probe_request(struct net_device *dev,
}
#endif // CONFIG_INTEL_WIDI
#ifdef CONFIG_RTL8723A
#include <rtl8723a_hal.h>
//extern u8 _InitPowerOn(PADAPTER padapter);
//extern s32 rtl8723a_FirmwareDownload(PADAPTER padapter);
extern s32 FillH2CCmd(PADAPTER padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
#endif
#ifdef CONFIG_MAC_LOOPBACK_DRIVER
#ifdef CONFIG_RTL8723A
extern void rtl8723a_cal_txdesc_chksum(struct tx_desc *ptxdesc);
#define cal_txdesc_chksum rtl8723a_cal_txdesc_chksum
extern void rtl8723a_fill_default_txdesc(struct xmit_frame *pxmitframe, u8 *pbuf);
#define fill_default_txdesc rtl8723a_fill_default_txdesc
#elif defined(CONFIG_RTL8188E)
#include <rtl8188e_hal.h>
extern void rtl8188e_cal_txdesc_chksum(struct tx_desc *ptxdesc);
#define cal_txdesc_chksum rtl8188e_cal_txdesc_chksum
#ifdef CONFIG_SDIO_HCI
extern void rtl8188es_fill_default_txdesc(struct xmit_frame *pxmitframe, u8 *pbuf);
#define fill_default_txdesc rtl8188es_fill_default_txdesc
#endif // CONFIG_SDIO_HCI
#endif // CONFIG_RTL8188E
static s32 initLoopback(PADAPTER padapter)
{
@ -11919,6 +12302,88 @@ static int rtw_test(
}
#endif
#ifdef CONFIG_RTL8723A
#ifdef CONFIG_BT_COEXIST
#define GET_BT_INFO(padapter) (&GET_HAL_DATA(padapter)->BtInfo)
if (strcmp(pch, "btdbg") == 0)
{
DBG_88E("===== BT debug information Start =====\n");
DBG_88E("WIFI status=\n");
DBG_88E("BT status=\n");
DBG_88E("BT profile=\n");
DBG_88E("WIFI RSSI=%d\n", GET_HAL_DATA(padapter)->dmpriv.UndecoratedSmoothedPWDB);
DBG_88E("BT RSSI=\n");
DBG_88E("coex mechanism=\n");
DBG_88E("BT counter TX/RX=/\n");
DBG_88E("0x880=0x%08x\n", rtw_read32(padapter, 0x880));
DBG_88E("0x6c0=0x%08x\n", rtw_read32(padapter, 0x6c0));
DBG_88E("0x6c4=0x%08x\n", rtw_read32(padapter, 0x6c4));
DBG_88E("0x6c8=0x%08x\n", rtw_read32(padapter, 0x6c8));
DBG_88E("0x6cc=0x%08x\n", rtw_read32(padapter, 0x6cc));
DBG_88E("0x778=0x%08x\n", rtw_read32(padapter, 0x778));
DBG_88E("0xc50=0x%08x\n", rtw_read32(padapter, 0xc50));
BT_DisplayBtCoexInfo(padapter);
DBG_88E("===== BT debug information End =====\n");
}
if (strcmp(pch, "bton") == 0)
{
PBT30Info pBTInfo = GET_BT_INFO(padapter);
PBT_MGNT pBtMgnt = &pBTInfo->BtMgnt;
pBtMgnt->ExtConfig.bManualControl = false;
}
if (strcmp(pch, "btoff") == 0)
{
PBT30Info pBTInfo = GET_BT_INFO(padapter);
PBT_MGNT pBtMgnt = &pBTInfo->BtMgnt;
pBtMgnt->ExtConfig.bManualControl = true;
}
#endif // CONFIG_BT_COEXIST
if (strcmp(pch, "h2c") == 0)
{
u8 param[6];
u8 count = 0;
u32 tmp;
u8 i;
u32 pos;
s32 ret;
do {
pch = strsep(&ptmp, delim);
if ((pch == NULL) || (strlen(pch) == 0))
break;
sscanf(pch, "%x", &tmp);
param[count++] = (u8)tmp;
} while (count < 6);
if (count == 0) {
rtw_mfree(pbuf, len);
DBG_88E("%s: parameter error(level 2)!\n", __func__);
return -EFAULT;
}
ret = FillH2CCmd(padapter, param[0], count-1, &param[1]);
pos = sprintf(extra, "H2C ID=%x content=", param[0]);
for (i=0; i<count; i++) {
pos += sprintf(extra+pos, "%x,", param[i]);
}
extra[pos] = 0;
pos--;
pos += sprintf(extra+pos, " %s", ret==_FAIL?"FAIL":"OK");
wrqu->data.length = strlen(extra) + 1;
}
#endif // CONFIG_RTL8723A
rtw_mfree(pbuf, len);
return 0;
}
@ -12122,6 +12587,9 @@ static const struct iw_priv_args rtw_private_args[] = {
{ MP_QueryDrvStats, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_drvquery" },
{ MP_IOCTL, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_ioctl"}, // mp_ioctl
{ MP_SetRFPathSwh, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_setrfpath" },
#ifdef CONFIG_RTL8723A
{ MP_SetBT, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_setbt" },
#endif
{ CTA_TEST, IW_PRIV_TYPE_CHAR | 1024, 0, "cta_test"},
};

View file

@ -1593,9 +1593,10 @@ _adapter *rtw_drv_if2_init(_adapter *primary_padapter, char *name,
//step init_io_priv
if ((rtw_init_io_priv(padapter, set_intf_ops)) == _FAIL) {
RT_TRACE(_module_hci_intfs_c_,_drv_err_,("\n Can't init io_reqs\n"));
RT_TRACE(_module_hci_intfs_c_,_drv_always_,("\n Can't init io_reqs\n"));
}
pr_info("rtl8188eu - Driver version "DRIVERVERSION"\n");
//step read_chip_version
rtw_hal_read_chip_version(padapter);

View file

@ -251,12 +251,22 @@ static void rtw_dev_remove(struct usb_interface *pusb_intf);
/****** 8188EUS ********/ \
{USB_DEVICE(0x8179, 0x07B8)}, /* Abocom - Abocom */
#ifndef CONFIG_RTL8192C
#undef RTL8192C_USB_IDS
#define RTL8192C_USB_IDS
#endif
#ifndef CONFIG_RTL8192D
#undef RTL8192D_USB_IDS
#define RTL8192D_USB_IDS
#endif
#ifndef CONFIG_RTL8723A
#undef RTL8723A_USB_IDS
#define RTL8723A_USB_IDS
#endif
#ifndef CONFIG_RTL8188E
#undef RTL8188E_USB_IDS
#define RTL8188E_USB_IDS
#endif
static struct usb_device_id rtw_usb_id_tbl[] ={
RTL8192C_USB_IDS
@ -295,6 +305,78 @@ struct rtw_usb_drv {
#endif
};
#ifdef CONFIG_RTL8192C
static struct usb_device_id rtl8192c_usb_id_tbl[] ={
RTL8192C_USB_IDS
{} /* Terminating entry */
};
struct rtw_usb_drv rtl8192c_usb_drv = {
.usbdrv.name = (char*)"rtl8192cu",
.usbdrv.probe = rtw_drv_init,
.usbdrv.disconnect = rtw_dev_remove,
.usbdrv.id_table = rtl8192c_usb_id_tbl,
.usbdrv.suspend = rtw_suspend,
.usbdrv.resume = rtw_resume,
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))
.usbdrv.reset_resume = rtw_resume,
#endif
#ifdef CONFIG_AUTOSUSPEND
.usbdrv.supports_autosuspend = 1,
#endif
};
static struct rtw_usb_drv *usb_drv = &rtl8192c_usb_drv;
#endif /* CONFIG_RTL8192C */
#ifdef CONFIG_RTL8192D
static struct usb_device_id rtl8192d_usb_id_tbl[] ={
RTL8192D_USB_IDS
{} /* Terminating entry */
};
struct rtw_usb_drv rtl8192d_usb_drv = {
.usbdrv.name = (char*)"rtl8192du",
.usbdrv.probe = rtw_drv_init,
.usbdrv.disconnect = rtw_dev_remove,
.usbdrv.id_table = rtl8192d_usb_id_tbl,
.usbdrv.suspend = rtw_suspend,
.usbdrv.resume = rtw_resume,
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))
.usbdrv.reset_resume = rtw_resume,
#endif
#ifdef CONFIG_AUTOSUSPEND
.usbdrv.supports_autosuspend = 1,
#endif
};
static struct rtw_usb_drv *usb_drv = &rtl8192d_usb_drv;
#endif /* CONFIG_RTL8192D */
#ifdef CONFIG_RTL8723A
static struct usb_device_id rtl8723a_usb_id_tbl[] ={
RTL8723A_USB_IDS
{} /* Terminating entry */
};
struct rtw_usb_drv rtl8723a_usb_drv = {
.usbdrv.name = (char*)"rtl8723au",
.usbdrv.probe = rtw_drv_init,
.usbdrv.disconnect = rtw_dev_remove,
.usbdrv.id_table = rtl8723a_usb_id_tbl,
.usbdrv.suspend = rtw_suspend,
.usbdrv.resume = rtw_resume,
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))
.usbdrv.reset_resume = rtw_resume,
#endif
#ifdef CONFIG_AUTOSUSPEND
.usbdrv.supports_autosuspend = 1,
#endif
};
static struct rtw_usb_drv *usb_drv = &rtl8723a_usb_drv;
#endif /* CONFIG_RTL8723A */
#ifdef CONFIG_RTL8188E
static struct usb_device_id rtl8188e_usb_id_tbl[] ={
RTL8188E_USB_IDS
{} /* Terminating entry */
@ -316,6 +398,7 @@ struct rtw_usb_drv rtl8188e_usb_drv = {
};
static struct rtw_usb_drv *usb_drv = &rtl8188e_usb_drv;
#endif /* CONFIG_RTL8188E */
static inline int RT_usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
{
@ -1730,6 +1813,7 @@ static int __init rtw_drv_entry(void)
writel(tmp,(volatile unsigned int*)0xb801a608);//write dummy register for 1055
#endif
#ifdef CONFIG_PLATFORM_ARM_SUNxI
#ifndef CONFIG_RTL8723A
int ret = 0;
/* ----------get usb_wifi_usbc_num------------- */
ret = script_parser_fetch("usb_wifi_para", "usb_wifi_usbc_num", (int *)&usb_wifi_host, 64);
@ -1740,6 +1824,7 @@ static int __init rtw_drv_entry(void)
}
DBG_88E("sw_usb_enable_hcd: usbc_num = %d\n", usb_wifi_host);
sw_usb_enable_hcd(usb_wifi_host);
#endif //CONFIG_RTL8723A
#endif //CONFIG_PLATFORM_ARM_SUNxI
@ -1783,8 +1868,10 @@ static void __exit rtw_drv_halt(void)
_rtw_mutex_free(&usb_drv->setbw_mutex);
#endif
#ifdef CONFIG_PLATFORM_ARM_SUNxI
#ifndef CONFIG_RTL8723A
DBG_88E("sw_usb_disable_hcd: usbc_num = %d\n", usb_wifi_host);
sw_usb_disable_hcd(usb_wifi_host);
#endif //ifndef CONFIG_RTL8723A
#endif //CONFIG_PLATFORM_ARM_SUNxI
DBG_88E("-rtw_drv_halt\n");