M7350v7_en_gpl
This commit is contained in:
468
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXDM.c
Executable file
468
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXDM.c
Executable file
@ -0,0 +1,468 @@
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal88XXDM.c
|
||||
|
||||
Abstract:
|
||||
Defined RTL88XX HAL common Function
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2013-08-19 Filen Create.
|
||||
--*/
|
||||
|
||||
#include "../HalPrecomp.h"
|
||||
|
||||
#if CFG_HAL_MACDM
|
||||
|
||||
typedef enum _MACDM_STATE_CHANGE_{
|
||||
MACDM_STATE_CHANGE_NO = 0,
|
||||
MACDM_STATE_CHANGE_UP,
|
||||
MACDM_STATE_CHANGE_DOWN
|
||||
} MACDM_STATE_CHANGE, *PMACDM_STATE_CHANGE;
|
||||
|
||||
|
||||
static
|
||||
RSSI_LVL_DM_88XX
|
||||
TranslateRSSI88XX(
|
||||
u4Byte rssi
|
||||
)
|
||||
{
|
||||
// TODO:
|
||||
return RSSI_LVL_LOW;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
BOOLEAN
|
||||
LoadMACDMTable(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte MACDM_State,
|
||||
IN u4Byte rssi_lvl
|
||||
)
|
||||
{
|
||||
PHAL_DATA_TYPE pHalData = _GET_HAL_DATA(Adapter);
|
||||
u4Byte offset, value, tbl_idx = 0;
|
||||
|
||||
while(1) {
|
||||
|
||||
offset = pHalData->MACDM_Table[MACDM_State][rssi_lvl][tbl_idx].offset;
|
||||
value = pHalData->MACDM_Table[MACDM_State][rssi_lvl][tbl_idx].value;
|
||||
|
||||
if (offset == 0xFFFF) {
|
||||
break;
|
||||
}
|
||||
|
||||
HAL_RTL_W32(offset, value);
|
||||
tbl_idx++;
|
||||
|
||||
// TODO: timeout machinsm, to avoid hanging here
|
||||
}
|
||||
|
||||
return _TRUE;
|
||||
}
|
||||
|
||||
|
||||
VOID
|
||||
InitMACDM88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
)
|
||||
{
|
||||
//PHAL_INTERFACE pHalFunc = GET_HAL_INTERFACE(Adapter);
|
||||
PHAL_DATA_TYPE pHalData = _GET_HAL_DATA(Adapter);
|
||||
pu1Byte pRegFileStart;
|
||||
u4Byte RegFileLen;
|
||||
u4Byte stateThrs[MACDM_TP_THRS_MAX_NUM*RSSI_LVL_MAX_NUM+1]; //1: EOF
|
||||
u4Byte thrs_idx,rssi_idx;
|
||||
|
||||
|
||||
pHalData->MACDM_State = MACDM_TP_STATE_DEFAULT;
|
||||
|
||||
// TODO: should load from mib
|
||||
pHalData->MACDM_Mode_Sel = MACDM_MODE_MAX_TP;
|
||||
|
||||
pHalData->MACDM_preRssiLvl = RSSI_LVL_LOW;
|
||||
|
||||
//Load Raise/Fall state criteria from the para.c (translation from txt file)
|
||||
HAL_memset(stateThrs, 0, sizeof(stateThrs));
|
||||
HAL_memset(pHalData->MACDM_stateThrs, 0, sizeof(pHalData->MACDM_stateThrs));
|
||||
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_CRITERIA_START, (pu1Byte)&pRegFileStart);
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_CRITERIA_SIZE, (pu1Byte)&RegFileLen);
|
||||
LoadFileToOneParaTable(pRegFileStart,
|
||||
RegFileLen,
|
||||
(pu1Byte)stateThrs,
|
||||
(MACDM_TP_THRS_MAX_NUM*RSSI_LVL_MAX_NUM+1));
|
||||
|
||||
//one-way arrary translate to two-way arrary
|
||||
for(thrs_idx=0; thrs_idx<MACDM_TP_THRS_MAX_NUM; thrs_idx++) {
|
||||
for (rssi_idx=0; rssi_idx<RSSI_LVL_MAX_NUM; rssi_idx++){
|
||||
pHalData->MACDM_stateThrs[thrs_idx][rssi_idx] = stateThrs[thrs_idx*RSSI_LVL_MAX_NUM + rssi_idx];
|
||||
}
|
||||
}
|
||||
|
||||
#if 0 //Filen: for verification
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("pRegFileStart(0x%p), RegFileLen(0x%x)\n", pRegFileStart, RegFileLen) );
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("0: value(0x%x)\n", pHalData->MACDM_stateThrs[0]));
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("1: value(0x%x)\n", pHalData->MACDM_stateThrs[1]));
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("2: value(0x%x)\n", pHalData->MACDM_stateThrs[2]));
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("3: value(0x%x)\n", pHalData->MACDM_stateThrs[3]));
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("4: value(0x%x)\n", pHalData->MACDM_stateThrs[4]));
|
||||
#endif
|
||||
|
||||
//Load Table parameter from the para.c (translation from txt file)
|
||||
HAL_memset(pHalData->MACDM_Table, 0, sizeof(pHalData->MACDM_Table));
|
||||
|
||||
//(default, low)
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_DEF_LOW_START, (pu1Byte)&pRegFileStart);
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_DEF_LOW_SIZE, (pu1Byte)&RegFileLen);
|
||||
LoadFileToIORegTable(pRegFileStart,
|
||||
RegFileLen,
|
||||
pHalData->MACDM_Table[MACDM_TP_STATE_DEFAULT][RSSI_LVL_LOW],
|
||||
MAX_MACDM_REG_NUM);
|
||||
|
||||
//(default, normal)
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_DEF_NORMAL_START, (pu1Byte)&pRegFileStart);
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_DEF_NORMAL_SIZE, (pu1Byte)&RegFileLen);
|
||||
LoadFileToIORegTable(pRegFileStart,
|
||||
RegFileLen,
|
||||
pHalData->MACDM_Table[MACDM_TP_STATE_DEFAULT][RSSI_LVL_NORMAL],
|
||||
MAX_MACDM_REG_NUM);
|
||||
|
||||
//(default, high)
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_DEF_HIGH_START, (pu1Byte)&pRegFileStart);
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_DEF_HIGH_SIZE, (pu1Byte)&RegFileLen);
|
||||
LoadFileToIORegTable(pRegFileStart,
|
||||
RegFileLen,
|
||||
pHalData->MACDM_Table[MACDM_TP_STATE_DEFAULT][RSSI_LVL_HIGH],
|
||||
MAX_MACDM_REG_NUM);
|
||||
|
||||
//(general, low)
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_GEN_LOW_START, (pu1Byte)&pRegFileStart);
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_GEN_LOW_SIZE, (pu1Byte)&RegFileLen);
|
||||
LoadFileToIORegTable(pRegFileStart,
|
||||
RegFileLen,
|
||||
pHalData->MACDM_Table[MACDM_TP_STATE_GENERAL][RSSI_LVL_LOW],
|
||||
MAX_MACDM_REG_NUM);
|
||||
|
||||
//(general, normal)
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_GEN_NORMAL_START, (pu1Byte)&pRegFileStart);
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_GEN_NORMAL_SIZE, (pu1Byte)&RegFileLen);
|
||||
LoadFileToIORegTable(pRegFileStart,
|
||||
RegFileLen,
|
||||
pHalData->MACDM_Table[MACDM_TP_STATE_GENERAL][RSSI_LVL_NORMAL],
|
||||
MAX_MACDM_REG_NUM);
|
||||
|
||||
//(general, high)
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_GEN_HIGH_START, (pu1Byte)&pRegFileStart);
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_GEN_HIGH_SIZE, (pu1Byte)&RegFileLen);
|
||||
LoadFileToIORegTable(pRegFileStart,
|
||||
RegFileLen,
|
||||
pHalData->MACDM_Table[MACDM_TP_STATE_GENERAL][RSSI_LVL_HIGH],
|
||||
MAX_MACDM_REG_NUM);
|
||||
|
||||
//(txop, low)
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_TXOP_LOW_START, (pu1Byte)&pRegFileStart);
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_TXOP_LOW_SIZE, (pu1Byte)&RegFileLen);
|
||||
LoadFileToIORegTable(pRegFileStart,
|
||||
RegFileLen,
|
||||
pHalData->MACDM_Table[MACDM_TP_STATE_TXOP][RSSI_LVL_LOW],
|
||||
MAX_MACDM_REG_NUM);
|
||||
|
||||
//(general, normal)
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_TXOP_NORMAL_START, (pu1Byte)&pRegFileStart);
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_TXOP_NORMAL_SIZE, (pu1Byte)&RegFileLen);
|
||||
LoadFileToIORegTable(pRegFileStart,
|
||||
RegFileLen,
|
||||
pHalData->MACDM_Table[MACDM_TP_STATE_TXOP][RSSI_LVL_NORMAL],
|
||||
MAX_MACDM_REG_NUM);
|
||||
|
||||
//(general, high)
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_TXOP_HIGH_START, (pu1Byte)&pRegFileStart);
|
||||
GET_HAL_INTERFACE(Adapter)->GetHwRegHandler(Adapter, HW_VAR_MACDM_TXOP_HIGH_SIZE, (pu1Byte)&RegFileLen);
|
||||
LoadFileToIORegTable(pRegFileStart,
|
||||
RegFileLen,
|
||||
pHalData->MACDM_Table[MACDM_TP_STATE_TXOP][RSSI_LVL_HIGH],
|
||||
MAX_MACDM_REG_NUM);
|
||||
|
||||
|
||||
#if 0 //Filen: for verification
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("pRegFileStart(0x%p), RegFileLen(0x%x)\n", pRegFileStart, RegFileLen) );
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("0: offset(0x%x), value(0x%x)\n",
|
||||
pHalData->MACDM_Table[MACDM_TP_STATE_DEFAULT][RSSI_LVL_LOW][0].offset,
|
||||
pHalData->MACDM_Table[MACDM_TP_STATE_DEFAULT][RSSI_LVL_LOW][0].value)
|
||||
);
|
||||
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("1: offset(0x%x), value(0x%x)\n",
|
||||
pHalData->MACDM_Table[MACDM_TP_STATE_DEFAULT][RSSI_LVL_LOW][1].offset,
|
||||
pHalData->MACDM_Table[MACDM_TP_STATE_DEFAULT][RSSI_LVL_LOW][1].value)
|
||||
);
|
||||
#endif
|
||||
|
||||
//Load MACDM table by initial value
|
||||
LoadMACDMTable(Adapter, pHalData->MACDM_State, pHalData->MACDM_preRssiLvl);
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
MACDM_STATE_CHANGE
|
||||
CheckMACDMThrs(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte MACDM_State,
|
||||
IN u4Byte TP,
|
||||
IN u4Byte rssi_lvl
|
||||
)
|
||||
{
|
||||
PHAL_DATA_TYPE pHalData = _GET_HAL_DATA(Adapter);
|
||||
|
||||
switch(MACDM_State) {
|
||||
case MACDM_TP_STATE_DEFAULT:
|
||||
if (TP > pHalData->MACDM_stateThrs[MACDM_TP_THRS_DEF_TO_GEN][rssi_lvl]) {
|
||||
return MACDM_STATE_CHANGE_UP;
|
||||
}
|
||||
break;
|
||||
case MACDM_TP_STATE_GENERAL:
|
||||
if (TP < pHalData->MACDM_stateThrs[MACDM_TP_THRS_GEN_TO_DEF][rssi_lvl]) {
|
||||
return MACDM_STATE_CHANGE_DOWN;
|
||||
}
|
||||
else if (TP > pHalData->MACDM_stateThrs[MACDM_TP_THRS_GEN_TO_TXOP][rssi_lvl]) {
|
||||
return MACDM_STATE_CHANGE_UP;
|
||||
}
|
||||
break;
|
||||
case MACDM_TP_STATE_TXOP:
|
||||
if (TP < pHalData->MACDM_stateThrs[MACDM_TP_THRS_TXOP_TO_GEN][rssi_lvl]) {
|
||||
return MACDM_STATE_CHANGE_DOWN;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return MACDM_STATE_CHANGE_NO;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
BOOLEAN
|
||||
MACDM_Core88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte TP, // Mbps
|
||||
IN u4Byte rssi,
|
||||
IN u4Byte CurTxRate //Data Rate Index
|
||||
)
|
||||
{
|
||||
PHAL_DATA_TYPE pHalData = _GET_HAL_DATA(Adapter);
|
||||
u4Byte rssi_lvl = TranslateRSSI88XX(rssi);
|
||||
BOOLEAN StateChange = _FALSE;
|
||||
MACDM_STATE_CHANGE stateChange;
|
||||
|
||||
stateChange = CheckMACDMThrs(Adapter, pHalData->MACDM_State, TP, rssi_lvl);
|
||||
|
||||
switch(pHalData->MACDM_State) {
|
||||
case MACDM_TP_STATE_DEFAULT:
|
||||
if (MACDM_STATE_CHANGE_UP == stateChange) {
|
||||
pHalData->MACDM_State = MACDM_TP_STATE_GENERAL;
|
||||
LoadMACDMTable(Adapter, MACDM_TP_STATE_GENERAL, rssi_lvl);
|
||||
RT_TRACE_F(COMP_DBG, DBG_LOUD, ("state(%d -> %d)\n",
|
||||
MACDM_TP_STATE_DEFAULT,
|
||||
pHalData->MACDM_State));
|
||||
StateChange = _TRUE;
|
||||
}
|
||||
else if (MACDM_STATE_CHANGE_NO == stateChange) {
|
||||
if (pHalData->MACDM_preRssiLvl != rssi_lvl) {
|
||||
LoadMACDMTable(Adapter, MACDM_TP_STATE_DEFAULT, rssi_lvl);
|
||||
}
|
||||
}
|
||||
else {
|
||||
//Error, impossible
|
||||
}
|
||||
break;
|
||||
|
||||
case MACDM_TP_STATE_GENERAL:
|
||||
|
||||
if (MACDM_STATE_CHANGE_UP == stateChange) {
|
||||
pHalData->MACDM_State = MACDM_TP_STATE_TXOP;
|
||||
LoadMACDMTable(Adapter, MACDM_TP_STATE_TXOP, rssi_lvl);
|
||||
RT_TRACE_F(COMP_DBG, DBG_LOUD, ("state(%d -> %d)\n",
|
||||
MACDM_TP_STATE_GENERAL,
|
||||
pHalData->MACDM_State));
|
||||
StateChange = _TRUE;
|
||||
}
|
||||
else if (MACDM_STATE_CHANGE_DOWN == stateChange) {
|
||||
pHalData->MACDM_State = MACDM_TP_STATE_DEFAULT;
|
||||
LoadMACDMTable(Adapter, MACDM_TP_STATE_DEFAULT, rssi_lvl);
|
||||
RT_TRACE_F(COMP_DBG, DBG_LOUD, ("state(%d -> %d)\n",
|
||||
MACDM_TP_STATE_GENERAL,
|
||||
pHalData->MACDM_State));
|
||||
StateChange = _TRUE;
|
||||
}
|
||||
else {
|
||||
//MACDM_STATE_CHANGE_NO
|
||||
if (pHalData->MACDM_preRssiLvl != rssi_lvl) {
|
||||
LoadMACDMTable(Adapter, MACDM_TP_STATE_GENERAL, rssi_lvl);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MACDM_TP_STATE_TXOP:
|
||||
if (MACDM_STATE_CHANGE_DOWN == stateChange) {
|
||||
pHalData->MACDM_State = MACDM_TP_STATE_GENERAL;
|
||||
LoadMACDMTable(Adapter, MACDM_TP_STATE_GENERAL, rssi_lvl);
|
||||
RT_TRACE_F(COMP_DBG, DBG_LOUD, ("state(%d -> %d)\n",
|
||||
MACDM_TP_STATE_TXOP,
|
||||
pHalData->MACDM_State));
|
||||
StateChange = _TRUE;
|
||||
}
|
||||
else if (MACDM_STATE_CHANGE_NO == stateChange) {
|
||||
if (pHalData->MACDM_preRssiLvl != rssi_lvl) {
|
||||
LoadMACDMTable(Adapter, MACDM_TP_STATE_TXOP, rssi_lvl);
|
||||
}
|
||||
}
|
||||
else {
|
||||
//Error, impossible
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
//impossible
|
||||
break;
|
||||
};
|
||||
|
||||
//Record last one RSSI Level
|
||||
pHalData->MACDM_preRssiLvl = rssi_lvl;
|
||||
|
||||
return StateChange;
|
||||
}
|
||||
|
||||
|
||||
VOID
|
||||
Timer1SecDM88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
)
|
||||
{
|
||||
HAL_DATA_TYPE *pHalData = _GET_HAL_DATA(Adapter);
|
||||
u4Byte idx = 0;
|
||||
HAL_PSTAINFO pEntry = findNextSTA(Adapter, &idx);
|
||||
|
||||
//RT_TRACE_F(COMP_DBG, DBG_LOUD, ("mode(%d)\n", pHalData->MACDM_Mode_Sel));
|
||||
|
||||
switch(pHalData->MACDM_Mode_Sel) {
|
||||
case MACDM_MODE_MAX_TP:
|
||||
{
|
||||
u4Byte tmpTotal_tp = 0;
|
||||
u4Byte highest_tp = 0;
|
||||
HAL_PSTAINFO pstat_highest = NULL;
|
||||
|
||||
while(pEntry) {
|
||||
if(pEntry && pEntry->expire_to) {
|
||||
tmpTotal_tp = (pEntry->tx_avarage /*+ pEntry->rx_avarage*/)>>17; //unit: bytes -> Mb
|
||||
|
||||
if (tmpTotal_tp > highest_tp) {
|
||||
highest_tp = tmpTotal_tp;
|
||||
pstat_highest = pEntry;
|
||||
}
|
||||
}
|
||||
|
||||
pEntry = findNextSTA(Adapter, &idx);
|
||||
};
|
||||
|
||||
// TODO: current_tx_rate is not correct, we should get this value from FW
|
||||
// TODO: transform current_tx_rate format
|
||||
if (pstat_highest) {
|
||||
MACDM_Core88XX(Adapter,
|
||||
highest_tp,
|
||||
pstat_highest->rssi,
|
||||
pstat_highest->current_tx_rate
|
||||
);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MACDM_MODE_AVERAGE:
|
||||
{
|
||||
u4Byte tmpTotal_tp = 0, Total_tp = 0, average_tp = 0;
|
||||
u4Byte LinkedStaNum = 0;
|
||||
u4Byte Total_rssi = 0, average_rssi = 0;
|
||||
u4Byte Min_CurTxRate = 0xFFFFFFFF;
|
||||
|
||||
while(pEntry) {
|
||||
|
||||
if(pEntry && pEntry->expire_to) {
|
||||
|
||||
LinkedStaNum++;
|
||||
|
||||
//accumulate throughput
|
||||
tmpTotal_tp = (pEntry->tx_avarage /*+ pEntry->rx_avarage*/)>>17;//unit: bytes -> Mb
|
||||
Total_tp += tmpTotal_tp;
|
||||
|
||||
//accumulate RSSI
|
||||
Total_rssi += pEntry->rssi;
|
||||
|
||||
//find lowest rate of all linked sta
|
||||
if (pEntry->current_tx_rate < Min_CurTxRate) {
|
||||
Min_CurTxRate = pEntry->current_tx_rate;
|
||||
}
|
||||
}
|
||||
|
||||
pEntry = findNextSTA(Adapter, &idx);
|
||||
};
|
||||
|
||||
if (LinkedStaNum != 0) {
|
||||
average_tp = Total_tp / LinkedStaNum;
|
||||
average_rssi = Total_rssi / LinkedStaNum;
|
||||
|
||||
// TODO: current_tx_rate is not correct, we should get this value from FW
|
||||
// TODO: transform current_tx_rate format
|
||||
MACDM_Core88XX(Adapter,
|
||||
average_tp,
|
||||
average_rssi,
|
||||
Min_CurTxRate
|
||||
);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MACDM_MODE_MIN_TP:
|
||||
{
|
||||
u4Byte tmpTotal_tp = 0;
|
||||
u4Byte lowest_tp = 0xffffffff;
|
||||
HAL_PSTAINFO pstat_lowest = NULL;
|
||||
|
||||
while(pEntry) {
|
||||
if(pEntry && pEntry->expire_to) {
|
||||
tmpTotal_tp = (pEntry->tx_avarage /*+ pEntry->rx_avarage*/)>>17; //unit: bytes -> Mb
|
||||
|
||||
//find lowest sta
|
||||
if (tmpTotal_tp < lowest_tp) {
|
||||
lowest_tp = tmpTotal_tp;
|
||||
pstat_lowest = pEntry;
|
||||
}
|
||||
}
|
||||
|
||||
pEntry = findNextSTA(Adapter, &idx);
|
||||
};
|
||||
|
||||
// TODO: current_tx_rate is not correct, we should get this value from FW
|
||||
// TODO: transform current_tx_rate format
|
||||
if (pstat_lowest) {
|
||||
MACDM_Core88XX(Adapter,
|
||||
lowest_tp,
|
||||
pstat_lowest->rssi,
|
||||
pstat_lowest->current_tx_rate
|
||||
);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MACDM_MODE_STOP:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif //#if CFG_HAL_MACDM
|
||||
|
72
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXDM.h
Executable file
72
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXDM.h
Executable file
@ -0,0 +1,72 @@
|
||||
#ifndef __HAL88XX_DM_H__
|
||||
#define __HAL88XX_DM_H__
|
||||
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal88XXDM.h
|
||||
|
||||
Abstract:
|
||||
Defined HAL 88XX Dynamic Mechanism Related Define & Marco
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2013-08-19 Filen Create.
|
||||
--*/
|
||||
|
||||
typedef enum _RSSI_LVL_DM_88XX_ {
|
||||
RSSI_LVL_LOW = 0,
|
||||
RSSI_LVL_NORMAL = 1,
|
||||
RSSI_LVL_HIGH = 2,
|
||||
RSSI_LVL_MAX_NUM
|
||||
}RSSI_LVL_DM_88XX, *PRSSI_LVL_DM_88XX;
|
||||
|
||||
|
||||
typedef enum _MACDM_MODE_88XX_ {
|
||||
MACDM_MODE_STOP = 0,
|
||||
MACDM_MODE_MAX_TP = 1,
|
||||
MACDM_MODE_AVERAGE = 2,
|
||||
MACDM_MODE_MIN_TP = 3,
|
||||
MACDM_MODE_MAX_NUM
|
||||
}MACDM_MODE_88XX, *PMACDM_MODE_88XX;
|
||||
|
||||
|
||||
typedef enum _MACDM_TP_STATE_88XX_ {
|
||||
MACDM_TP_STATE_DEFAULT = 0,
|
||||
MACDM_TP_STATE_GENERAL = 1,
|
||||
MACDM_TP_STATE_TXOP = 2,
|
||||
MACDM_TP_STATE_MAX_NUM
|
||||
}MACDM_TP_STATE_88XX, *PMACDM_TP_STATE_88XX;
|
||||
|
||||
|
||||
typedef enum _MACDM_TP_THRS_88XX_ {
|
||||
MACDM_TP_THRS_DEF_TO_GEN = 0,
|
||||
MACDM_TP_THRS_GEN_TO_DEF = 1,
|
||||
MACDM_TP_THRS_GEN_TO_TXOP = 2,
|
||||
MACDM_TP_THRS_TXOP_TO_GEN = 3,
|
||||
MACDM_TP_THRS_MAX_NUM
|
||||
}MACDM_TP_THRS_88XX, *PMACDM_TP_THRS_88XX;
|
||||
|
||||
|
||||
|
||||
|
||||
VOID
|
||||
InitMACDM88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
|
||||
VOID
|
||||
Timer1SecDM88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif //__HAL88XX_DM_H__
|
||||
|
@ -0,0 +1,65 @@
|
||||
#ifndef __HAL88XXDEBUG_H__
|
||||
#define __HAL88XXDEBUG_H__
|
||||
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal88XXDebug.h
|
||||
|
||||
Abstract:
|
||||
Defined HAL 88XX debug reigster
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-09-07 Eric Create.
|
||||
--*/
|
||||
|
||||
|
||||
//
|
||||
//**Note**:
|
||||
// If one of these register is used, we should register MACRO at RTL88XXX_debug.h.
|
||||
//
|
||||
// Range List:
|
||||
// 1.) 0x5FE ~ 0x5FF : there are no control circuit. But these register can be R/W.
|
||||
|
||||
//1 Debug Register Location (from different IC)
|
||||
// 4 Bytes
|
||||
#define REG_DRV_DBG REG_PAGE5_DUMMY
|
||||
|
||||
#define REG_DBG_DWORD_0 REG_DRV_DBG
|
||||
|
||||
|
||||
|
||||
//3 Register Debug register for our purpose
|
||||
// 1.) Driver Component Error
|
||||
#define REGDUMP_DRV_ERR0 REG_DBG_DWORD_0
|
||||
|
||||
|
||||
//REGDUMP_DRV_ERR0
|
||||
typedef enum _DRV_ERR0_STATUS_
|
||||
{
|
||||
DRV_ER_INIT_PON = BIT0,
|
||||
DRV_ER_INIT_MAC = BIT1,
|
||||
DRV_ER_INIT_HCIDMA = BIT2,
|
||||
DRV_ER_INIT_MACPHYREGFILE = BIT3,
|
||||
DRV_ER_INIT_BBEGFILE = BIT4,
|
||||
DRV_ER_INIT_PHYRF = BIT5,
|
||||
DRV_ER_INIT_DLFW = BIT6,
|
||||
DRV_ER_INIT_RSVD_0 = BIT7,
|
||||
DRV_ER_INIT_RSVD_1 = BIT8,
|
||||
DRV_ER_INIT_RSVD_2 = BIT9,
|
||||
DRV_ER_CLOSE_STOP_HW = BIT10,
|
||||
DRV_ER_RSVD_0 = BIT11,
|
||||
DRV_ER_RSVD_1 = BIT12,
|
||||
DRV_ER_RSVD_2 = BIT13,
|
||||
DRV_ER_RSVD_3 = BIT14,
|
||||
DRV_ER_RSVD_4 = BIT15,
|
||||
DRV_ER_RSVD_5 = BIT16,
|
||||
|
||||
}DRV_ERR0_STATUS, *PDRV_ERR0_STATUS;
|
||||
|
||||
|
||||
#endif // __HAL88XXDEBUG_H__
|
||||
|
265
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXDef.h
Executable file
265
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXDef.h
Executable file
@ -0,0 +1,265 @@
|
||||
#ifndef __HAL88XX_DEF_H__
|
||||
#define __HAL88XX_DEF_H__
|
||||
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal88XXDef.h
|
||||
|
||||
Abstract:
|
||||
Defined HAL 88XX common data structure & Define
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-03-23 Filen Create.
|
||||
--*/
|
||||
|
||||
#ifdef WLAN_HAL_INTERNAL_USED
|
||||
|
||||
MIMO_TR_STATUS
|
||||
GetChipIDMIMO88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
|
||||
VOID
|
||||
CAMEmptyEntry88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte index
|
||||
);
|
||||
|
||||
|
||||
u4Byte
|
||||
CAMFindUsable88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte for_begin
|
||||
);
|
||||
|
||||
|
||||
VOID
|
||||
CAMReadMACConfig88XX
|
||||
(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte index,
|
||||
OUT pu1Byte pMacad,
|
||||
OUT PCAM_ENTRY_CFG pCfg
|
||||
);
|
||||
|
||||
|
||||
VOID
|
||||
CAMProgramEntry88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte index,
|
||||
IN pu1Byte macad,
|
||||
IN pu1Byte key128,
|
||||
IN u2Byte config
|
||||
);
|
||||
|
||||
|
||||
VOID
|
||||
SetHwReg88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte variable,
|
||||
IN pu1Byte val
|
||||
);
|
||||
|
||||
|
||||
VOID
|
||||
GetHwReg88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte variable,
|
||||
OUT pu1Byte val
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
GetMACIDQueueInTXPKTBUF88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
OUT pu1Byte MACIDList
|
||||
);
|
||||
|
||||
|
||||
RT_STATUS
|
||||
SetMACIDSleep88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN BOOLEAN bSleep,
|
||||
IN u4Byte aid
|
||||
);
|
||||
|
||||
#if (IS_RTL8881A_SERIES || IS_RTL8192E_SERIES)
|
||||
RT_STATUS
|
||||
InitLLT_Table88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
#endif //#if (IS_RTL8881A_SERIES || IS_RTL8192E_SERIES)
|
||||
|
||||
#if IS_RTL8814A_SERIES
|
||||
RT_STATUS
|
||||
InitLLT_Table88XX_V1(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
#endif //#if IS_RTL8814A_SERIES
|
||||
|
||||
RT_STATUS
|
||||
InitMAC88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
VOID
|
||||
InitIMR88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN RT_OP_MODE OPMode
|
||||
);
|
||||
|
||||
VOID
|
||||
InitVAPIMR88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte VapSeq
|
||||
);
|
||||
|
||||
|
||||
RT_STATUS
|
||||
InitHCIDMAMem88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
InitHCIDMAReg88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
VOID
|
||||
StopHCIDMASW88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
VOID
|
||||
StopHCIDMAHW88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
#if CFG_HAL_SUPPORT_MBSSID
|
||||
VOID
|
||||
InitMBSSID88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
VOID
|
||||
InitMBIDCAM88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
VOID
|
||||
StopMBSSID88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
#endif //CFG_HAL_SUPPORT_MBSSID
|
||||
|
||||
RT_STATUS
|
||||
SetMBIDCAM88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte MBID_Addr,
|
||||
IN u1Byte IsRoot
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
StopMBIDCAM88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte MBID_Addr
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
ResetHWForSurprise88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
#ifdef MULTI_MAC_CLONE
|
||||
VOID
|
||||
McloneSetMBSSID88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN pu1Byte macAddr,
|
||||
IN int entIdx
|
||||
);
|
||||
|
||||
VOID
|
||||
McloneStopMBSSID88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN int entIdx
|
||||
);
|
||||
#endif
|
||||
|
||||
RT_STATUS
|
||||
StopHW88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
StopSW88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
VOID
|
||||
DisableVXDAP88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
VOID
|
||||
Timer1Sec88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
GetTxRPTBuf88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte macID,
|
||||
IN u1Byte variable,
|
||||
OUT pu1Byte val
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
SetTxRPTBuf88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte macID,
|
||||
IN u1Byte variable,
|
||||
IN pu1Byte val
|
||||
);
|
||||
|
||||
u4Byte
|
||||
CheckHang88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
VOID
|
||||
SetCRC5ToRPTBuffer88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte val,
|
||||
IN u4Byte macID,
|
||||
IN u1Byte bValid
|
||||
);
|
||||
|
||||
VOID
|
||||
SetCRC5ValidBit88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte group,
|
||||
IN u1Byte bValid
|
||||
|
||||
);
|
||||
|
||||
VOID
|
||||
SetCRC5EndBit88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte group,
|
||||
IN u1Byte bEnd
|
||||
);
|
||||
|
||||
VOID
|
||||
InitMACIDSearch88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
|
||||
|
||||
#endif //WLAN_HAL_INTERNAL_USED
|
||||
|
||||
#endif //__HAL88XX_DEF_H__
|
54
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXDesc.h
Executable file
54
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXDesc.h
Executable file
@ -0,0 +1,54 @@
|
||||
#ifndef __HAL88XXDESC_H__
|
||||
#define __HAL88XXDESC_H__
|
||||
|
||||
|
||||
#define SET_MEM_OP(Dw, Value32, Mask, Shift) \
|
||||
(((Dw) & ~((Mask)<<(Shift)))|(((Value32)&(Mask))<<(Shift)))
|
||||
|
||||
|
||||
#if CFG_HAL_CHECK_SWAP
|
||||
|
||||
//No Clear First
|
||||
#define SET_DESC_FIELD_NO_CLR(Dw, Value32, Mask, Shift) \
|
||||
Dw |= (_GET_HAL_DATA(Adapter)->AccessSwapCtrl & HAL_ACCESS_SWAP_MEM) ? \
|
||||
(HAL_cpu_to_le32(((Value32)&(Mask))<<(Shift))): \
|
||||
(((Value32)&(Mask))<<(Shift));
|
||||
|
||||
//3 Note: Performance bad, don't use as possible
|
||||
//Clear first then set
|
||||
#define SET_DESC_FIELD_CLR(Dw, Value32, Mask, Shift) \
|
||||
{ \
|
||||
u4Byte lDw = Dw; \
|
||||
Dw = (_GET_HAL_DATA(Adapter)->AccessSwapCtrl & HAL_ACCESS_SWAP_MEM) ? \
|
||||
(HAL_cpu_to_le32(SET_MEM_OP(HAL_le32_to_cpu(lDw), Value32, Mask, Shift))) : \
|
||||
(SET_MEM_OP(lDw, Value32, Mask, Shift)); \
|
||||
}
|
||||
|
||||
#define GET_DESC_FIELD(Dw, Mask, Shift) \
|
||||
((_GET_HAL_DATA(Adapter)->AccessSwapCtrl & HAL_ACCESS_SWAP_MEM) ? \
|
||||
((HAL_le32_to_cpu(Dw)>>(Shift)) & (Mask)) : \
|
||||
(((Dw)>>(Shift)) & (Mask)))
|
||||
|
||||
#define GET_DESC(val) ((_GET_HAL_DATA(Adapter)->AccessSwapCtrl & HAL_ACCESS_SWAP_MEM) ? HAL_le32_to_cpu(val) : val)
|
||||
#define SET_DESC(val) ((_GET_HAL_DATA(Adapter)->AccessSwapCtrl & HAL_ACCESS_SWAP_MEM) ? HAL_cpu_to_le32(val) : val)
|
||||
|
||||
|
||||
#else
|
||||
|
||||
#define SET_DESC_FIELD_NO_CLR(Dw, Value32, Mask, Shift) \
|
||||
Dw |= (HAL_cpu_to_le32(((Value32)&(Mask))<<(Shift)));
|
||||
|
||||
|
||||
#define SET_DESC_FIELD_CLR(Dw, Value32, Mask, Shift) \
|
||||
Dw = (HAL_cpu_to_le32(SET_MEM_OP(HAL_le32_to_cpu(Dw), Value32, Mask, Shift)));
|
||||
|
||||
|
||||
#define GET_DESC_FIELD(Dw, Mask, Shift) \
|
||||
((HAL_le32_to_cpu(Dw)>>(Shift)) & (Mask))
|
||||
|
||||
#define GET_DESC(val) (val)
|
||||
#define SET_DESC(val) (val)
|
||||
|
||||
#endif
|
||||
|
||||
#endif // __HAL88XXDESC_H__
|
2225
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXFirmware.c
Executable file
2225
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXFirmware.c
Executable file
File diff suppressed because it is too large
Load Diff
371
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXFirmware.h
Executable file
371
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXFirmware.h
Executable file
@ -0,0 +1,371 @@
|
||||
#ifndef __HAL88XX_FIRMWARE_H__
|
||||
#define __HAL88XX_FIRMWARE_H__
|
||||
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal88XXFirmware.h
|
||||
|
||||
Abstract:
|
||||
Defined HAL 88XX Firmware data structure & Define
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-04-11 Filen Create.
|
||||
--*/
|
||||
|
||||
|
||||
/**********************/
|
||||
// Mapping C2H callback function
|
||||
|
||||
typedef enum _RTL88XX_C2H_EVT
|
||||
{
|
||||
C2H_88XX_DBG = 0,
|
||||
C2H_88XX_LB = 1,
|
||||
C2H_88XX_TXBF = 2,
|
||||
C2H_88XX_TX_REPORT = 3,
|
||||
C2H_88XX_TX_RATE =4,
|
||||
C2H_88XX_BT_INFO = 9,
|
||||
C2H_88XX_BT_MP = 11,
|
||||
C2H_88XX_RA_PARA_RPT=14,
|
||||
C2H_88XX_RA_DYNAMIC_TX_PATH_RPT = 15,
|
||||
C2H_88XX_EXTEND_IND = 0xFF,
|
||||
MAX_88XX_C2HEVENT
|
||||
}RTL88XX_C2H_EVT;
|
||||
|
||||
typedef enum _RTL88XX_EXTEND_C2H_EVT
|
||||
{
|
||||
EXTEND_C2H_88XX_DBG_PRINT = 0
|
||||
|
||||
}RTL88XX_EXTEND_C2H_EVT;
|
||||
|
||||
typedef struct _TXRPT_
|
||||
{
|
||||
u1Byte RPT_MACID;
|
||||
u2Byte RPT_TXOK;
|
||||
u2Byte RPT_TXFAIL;
|
||||
u1Byte RPT_InitialRate;
|
||||
}__attribute__ ((packed)) TXRPT,*PTXRPT ;
|
||||
|
||||
|
||||
typedef struct _APREQTXRPT_
|
||||
{
|
||||
TXRPT txrpt[2];
|
||||
}__attribute__ ((packed)) APREQTXRPT,*PAPREQTXRPT ;
|
||||
|
||||
|
||||
#define GEN_FW_CMD_HANDLER(size, cmd) {size, cmd##Handler},
|
||||
|
||||
|
||||
//void h2csetdsr(void);
|
||||
|
||||
struct cmdobj {
|
||||
u4Byte parmsize;
|
||||
VOID (*c2hfuns)(IN HAL_PADAPTER Adapter,u1Byte *pbuf);
|
||||
};
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------
|
||||
//
|
||||
// 0x1200h ~ 0x12FFh DDMA CTRL
|
||||
//
|
||||
//-----------------------------------------------------
|
||||
#define DDMA_LEN_MASK 0x0001FFFF
|
||||
#define DDMA_CH_CHKSUM_CNT BIT(24)
|
||||
#define DDMA_RST_CHKSUM_STS BIT(25)
|
||||
#define DDMA_MODE_BLOCK_CPU BIT(26)
|
||||
#define DDMA_CHKSUM_FAIL BIT(27)
|
||||
#define DDMA_DA_W_DISABLE BIT(28)
|
||||
#define DDMA_CHKSUM_EN BIT(29)
|
||||
#define DDMA_CH_OWN BIT(31)
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct _RTL88XX_FW_HDR_
|
||||
{
|
||||
u2Byte signature;
|
||||
u1Byte category;
|
||||
u1Byte function;
|
||||
|
||||
u2Byte version;
|
||||
u1Byte subversion;
|
||||
u1Byte rsvd1;
|
||||
|
||||
u1Byte month; //human easy reading format
|
||||
u1Byte day; //human easy reading format
|
||||
u1Byte hour; //human easy reading format
|
||||
u1Byte minute; //human easy reading format
|
||||
|
||||
u2Byte ram_code_size;
|
||||
u1Byte Foundry; //0: TSMC, 1:UMC, 2:SMIC
|
||||
u1Byte rsvd3;
|
||||
u4Byte svnidx;
|
||||
u4Byte rsvd5;
|
||||
u4Byte rsvd6;
|
||||
u4Byte rsvd7;
|
||||
|
||||
}RTL88XX_FW_HDR, *PRTL88XX_FW_HDR;
|
||||
|
||||
typedef struct _RTL88XX_MIPS_FW_HDR_
|
||||
{
|
||||
//offset0
|
||||
u2Byte signature;
|
||||
u1Byte category;
|
||||
u1Byte function;
|
||||
u2Byte version;
|
||||
u1Byte Subversion;
|
||||
u1Byte sub_index;
|
||||
//offset8
|
||||
u4Byte SVN_index;
|
||||
u4Byte rsvd1;
|
||||
//offset16
|
||||
u1Byte Month;
|
||||
u1Byte Date;
|
||||
u1Byte Hour;
|
||||
u1Byte Min;
|
||||
u2Byte Year;
|
||||
u1Byte Foundry;
|
||||
u1Byte rsvd2;
|
||||
//offset24
|
||||
u1Byte MEM_USAGE__DL_from:1;
|
||||
u1Byte MEM_USAGE__BOOT_from:1;
|
||||
u1Byte MEM_USAGE__BOOT_LOADER:1;
|
||||
u1Byte MEM_USAGE__IRAM:1;
|
||||
u1Byte MEM_USAGE__ERAM:1;
|
||||
u1Byte MEM_USAGE__rsvd4:3;
|
||||
u1Byte rsvd3;
|
||||
u2Byte BOOT_LOADER_SZ;
|
||||
u4Byte rsvd5;
|
||||
//offset32
|
||||
u4Byte TOTAL_DMEM_SZ;
|
||||
u2Byte FW_CFG_SZ;
|
||||
u2Byte FW_ATTR_SZ;
|
||||
//offset40
|
||||
u4Byte IROM_SZ;
|
||||
u4Byte EROM_SZ;
|
||||
//offset 48
|
||||
u4Byte IRAM_SZ;
|
||||
u4Byte ERAM_SZ;
|
||||
//offset 56
|
||||
u4Byte rsvd6;
|
||||
u4Byte rsvd7;
|
||||
}RTL88XX_MIPS_FW_HDR, *PRTL88XX_MIPS_FW_HDR;
|
||||
|
||||
// TODO: Filen, check below
|
||||
typedef enum _RTL88XX_H2C_CMD
|
||||
{
|
||||
// H2C_88XX_RSVDPAGE = 0,
|
||||
H2C_88XX_MSRRPT = 0x1,
|
||||
// H2C_88XX_KEEP_ALIVE_CTRL = 0x3,
|
||||
// H2C_88XX_WO_WLAN = 0x5, // Wake on Wlan.
|
||||
// H2C_88XX_REMOTE_WAKEUP = 0x7,
|
||||
H2C_88XX_AP_OFFLOAD = 0x8,
|
||||
H2C_88XX_BCN_RSVDPAGE = 0x9,
|
||||
H2C_88XX_PROBE_RSVDPAGE = 0xa,
|
||||
H2C_88XX_WAKEUP_PIN = 0x13,
|
||||
// H2C_88XX_SETPWRMODE = 0x20,
|
||||
// H2C_88XX_P2P_PS_MODE = 0x24,
|
||||
#if defined(SOFTAP_PS_DURATION) || defined(CONFIG_POWER_SAVE)
|
||||
H2C_88XX_SAP_PS = 0x26,
|
||||
#endif
|
||||
H2C_88XX_RA_MASK = 0x40,
|
||||
H2C_88XX_RSSI_REPORT = 0x42,
|
||||
H2C_88XX_AP_REQ_TXREP = 0x43,
|
||||
H2C_88XX_RA_MASK_3SS = 0x46,
|
||||
H2C_88XX_RA_PARA_ADJUST = 0x47,
|
||||
H2C_88XX_DYNAMIC_TX_PATH = 0x48,
|
||||
H2C_88XX_FW_TRACE_EN = 0x49,
|
||||
|
||||
H2C_88XX_NHM = 0xC1,
|
||||
H2C_88XX_BCN_IGNORE_EDCCA = 0xC2,
|
||||
H2C_88XX_REPEAT_WAKE_PULSE = 0xC4,
|
||||
MAX_88XX_H2CCMD
|
||||
}RTL88XX_H2C_CMD;
|
||||
|
||||
|
||||
typedef enum _RTL88XX_C2H_CMD
|
||||
{
|
||||
// C2H_88XX_DBG = 0,
|
||||
// C2H_88XX_C2H_LB = 0x1,
|
||||
// C2H_88XX_SND_TXBF = 0x2,
|
||||
// C2H_88XX_CCXRPT = 0x3,
|
||||
C2H_88XX_APREQTXRPT = 0x4,
|
||||
// C2H_88XX_INITIALRATE = 0x5,
|
||||
// C2H_88XX_PSD_RPT = 0x6,
|
||||
// C2H_88XX_SCAN_COMPLETE = 0x7,
|
||||
// C2H_88XX_PSD_CONTROL = 0x8,
|
||||
// C2H_88XX_BT_INFO = 0x9,
|
||||
// C2H_88XX_BT_LOOPBACK = 0xa,
|
||||
|
||||
MAX_88XX_C2HCMD
|
||||
}RTL88XX_C2H_CMD;
|
||||
|
||||
|
||||
VOID
|
||||
ReadMIPSFwHdr88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
InitMIPSFirmware88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
|
||||
RT_STATUS
|
||||
InitFirmware88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
#if 0
|
||||
typedef struct _H2C_CONTENT_
|
||||
{
|
||||
u4Byte content;
|
||||
u2Byte ext_content;
|
||||
}H2C_CONTENT, *PH2C_CONTENT;
|
||||
|
||||
|
||||
|
||||
BOOLEAN
|
||||
IsH2CBufOccupy88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
|
||||
BOOLEAN
|
||||
SigninH2C88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN PH2C_CONTENT pH2CContent
|
||||
);
|
||||
#else
|
||||
BOOLEAN
|
||||
CheckFwReadLastH2C88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte BoxNum
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
FillH2CCmd88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte ElementID,
|
||||
IN u4Byte CmdLen,
|
||||
IN pu1Byte pCmdBuffer
|
||||
);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
VOID
|
||||
UpdateHalRAMask88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
HAL_PSTAINFO pEntry,
|
||||
u1Byte rssi_level
|
||||
);
|
||||
|
||||
void
|
||||
UpdateHalMSRRPT88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
HAL_PSTAINFO pEntry,
|
||||
u1Byte opmode
|
||||
);
|
||||
|
||||
//#ifdef SDIO_AP_OFFLOAD
|
||||
void
|
||||
SetAPOffload88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
u1Byte bEn,
|
||||
#ifdef CONFIG_POWER_SAVE
|
||||
u1Byte bOn,
|
||||
#endif
|
||||
u1Byte numOfAP,
|
||||
u1Byte bHidden,
|
||||
u1Byte bDenyAny,
|
||||
pu1Byte loc_bcn,
|
||||
pu1Byte loc_probe
|
||||
);
|
||||
|
||||
#if defined(SOFTAP_PS_DURATION) || defined(CONFIG_POWER_SAVE)
|
||||
VOID
|
||||
SetSAPPS88XX
|
||||
(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
u1Byte en,
|
||||
#ifdef CONFIG_POWER_SAVE
|
||||
u1Byte en_32K,
|
||||
u1Byte lps,
|
||||
#endif
|
||||
u1Byte duration
|
||||
);
|
||||
#endif // SOFTAP_PS_DURATION || CONFIG_POWER_SAVE
|
||||
//#endif // SDIO_AP_OFFLOAD
|
||||
|
||||
VOID
|
||||
SetRsvdPage88XX
|
||||
(
|
||||
IN IN HAL_PADAPTER Adapter,
|
||||
IN pu1Byte prsp,
|
||||
IN pu1Byte beaconbuf,
|
||||
IN u4Byte pktLen,
|
||||
IN u4Byte bigPktLen
|
||||
);
|
||||
|
||||
u4Byte
|
||||
GetRsvdPageLoc88XX
|
||||
(
|
||||
IN IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte frlen,
|
||||
OUT pu1Byte loc_page
|
||||
);
|
||||
|
||||
BOOLEAN
|
||||
DownloadRsvdPage88XX
|
||||
(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN pu4Byte beaconbuf,
|
||||
IN u4Byte beaconPktLen,
|
||||
IN u1Byte bReDownload
|
||||
);
|
||||
|
||||
void C2HHandler88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
void C2HPacket88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN pu1Byte pBuf,
|
||||
IN u1Byte length
|
||||
);
|
||||
|
||||
VOID
|
||||
C2HEventHandler88XX
|
||||
(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte c2hCmdId,
|
||||
IN u1Byte c2hCmdLen,
|
||||
IN pu1Byte tmpBuf
|
||||
);
|
||||
|
||||
VOID
|
||||
C2HExtEventHandler88XX
|
||||
(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte c2hCmdId,
|
||||
IN u1Byte c2hCmdLen,
|
||||
IN pu1Byte tmpBuf
|
||||
);
|
||||
|
||||
#ifdef BEAMFORMING_SUPPORT
|
||||
VOID
|
||||
C2HTxBeamformingHandler88XX(
|
||||
struct rtl8192cd_priv *priv,
|
||||
pu1Byte CmdBuf,
|
||||
u1Byte CmdLen
|
||||
);
|
||||
#endif
|
||||
|
||||
#endif //__HAL88XX_FIRMWARE_H__
|
||||
|
5072
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXGen.c
Executable file
5072
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXGen.c
Executable file
File diff suppressed because it is too large
Load Diff
652
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXIsr.c
Executable file
652
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXIsr.c
Executable file
@ -0,0 +1,652 @@
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal88XXIsr.c
|
||||
|
||||
Abstract:
|
||||
Defined RTL88XX HAL common Function
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-04-30 Filen Create.
|
||||
--*/
|
||||
|
||||
|
||||
#include "../HalPrecomp.h"
|
||||
|
||||
VOID
|
||||
EnableIMR88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
)
|
||||
{
|
||||
PHAL_DATA_TYPE pHalData = _GET_HAL_DATA(Adapter);
|
||||
|
||||
RT_TRACE_F(COMP_INIT, DBG_LOUD, ("\n"));
|
||||
|
||||
HAL_RTL_W32(REG_HIMR0, pHalData->IntMask[0]);
|
||||
HAL_RTL_W32(REG_HIMR1, pHalData->IntMask[1]);
|
||||
|
||||
#if IS_EXIST_RTL8814AE
|
||||
if ( IS_HARDWARE_TYPE_8814AE(Adapter) ) {
|
||||
HAL_RTL_W32(REG_HIMR2, pHalData->IntMask[2]);
|
||||
HAL_RTL_W32(REG_HIMR3, pHalData->IntMask[3]);
|
||||
}
|
||||
#endif //#if IS_EXIST_RTL8814AE
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Description:
|
||||
// Recognize the interrupt content by reading the interrupt register or content and masking interrupt mask (IMR)
|
||||
// if it is our NIC's interrupt. After recognizing, we may clear the all interrupts (ISR).
|
||||
// Arguments:
|
||||
// [in] Adapter -
|
||||
// The adapter context.
|
||||
// [in] pContent -
|
||||
// Under PCI interface, this field is ignord.
|
||||
// Under USB interface, the content is the interrupt content pointer.
|
||||
// Under SDIO interface, this is the interrupt type which is Local interrupt or system interrupt.
|
||||
// [in] ContentLen -
|
||||
// The length in byte of pContent.
|
||||
// Return:
|
||||
// If any interrupt matches the mask (IMR), return TRUE, and return FALSE otherwise.
|
||||
//
|
||||
|
||||
HAL_IMEM
|
||||
BOOLEAN
|
||||
InterruptRecognized88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN PVOID pContent,
|
||||
IN u4Byte ContentLen
|
||||
)
|
||||
{
|
||||
PHAL_DATA_TYPE pHalData = _GET_HAL_DATA(Adapter);
|
||||
u1Byte result;
|
||||
|
||||
pHalData->IntArray_bak[0] = pHalData->IntArray[0];
|
||||
pHalData->IntArray_bak[1] = pHalData->IntArray[1];
|
||||
|
||||
pHalData->IntArray[0] = HAL_RTL_R32(REG_HISR0);
|
||||
pHalData->IntArray[0] &= pHalData->IntMask[0];
|
||||
HAL_RTL_W32(REG_HISR0, pHalData->IntArray[0]);
|
||||
|
||||
pHalData->IntArray[1] = HAL_RTL_R32(REG_HISR1);
|
||||
pHalData->IntArray[1] &= pHalData->IntMask[1];
|
||||
HAL_RTL_W32(REG_HISR1, pHalData->IntArray[1]);
|
||||
|
||||
result = (pHalData->IntArray[0]!=0 || pHalData->IntArray[1]!=0);
|
||||
|
||||
#if IS_EXIST_RTL8814AE
|
||||
if ( IS_HARDWARE_TYPE_8814AE(Adapter) ) {
|
||||
|
||||
pHalData->IntArray[2] = HAL_RTL_R32(REG_HISR2);
|
||||
pHalData->IntArray[2] &= pHalData->IntMask[2];
|
||||
HAL_RTL_W32(REG_HISR2, pHalData->IntArray[2]);
|
||||
|
||||
pHalData->IntArray[3] = HAL_RTL_R32(REG_HISR3);
|
||||
pHalData->IntArray[3] &= pHalData->IntMask[3];
|
||||
HAL_RTL_W32(REG_HISR3, pHalData->IntArray[3]);
|
||||
|
||||
result = (result || (pHalData->IntArray[2]!=0 || pHalData->IntArray[3]!=0 ));
|
||||
|
||||
}
|
||||
#endif // #if IS_EXIST_RTL8814AE
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Description:
|
||||
// Check the interrupt content (read from previous process) in HAL.
|
||||
// Arguments:
|
||||
// [in] pAdapter -
|
||||
// The adapter context pointer.
|
||||
// [in] intType -
|
||||
// The HAL interrupt type for querying.
|
||||
// Return:
|
||||
// If the corresponding interrupt content (bit) is toggled, return TRUE.
|
||||
// If the input interrupt type isn't recognized or this corresponding
|
||||
// hal interupt isn't toggled, return FALSE.
|
||||
// Note:
|
||||
// We don't perform I/O here to read interrupt such as ISR here, so the
|
||||
// interrupt content shall be read before this handler.
|
||||
//
|
||||
HAL_IMEM
|
||||
BOOLEAN
|
||||
GetInterrupt88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN HAL_INT_TYPE intType
|
||||
)
|
||||
{
|
||||
HAL_DATA_TYPE *pHalData = _GET_HAL_DATA(Adapter);
|
||||
BOOLEAN bResult = FALSE;
|
||||
|
||||
switch(intType)
|
||||
{
|
||||
default:
|
||||
// Unknown interrupt type, no need to alarm because this IC may not
|
||||
// support this interrupt.
|
||||
RT_TRACE_F(COMP_SYSTEM, DBG_WARNING, ("Unkown intType: %d!\n", intType));
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_ANY:
|
||||
bResult = (pHalData->IntArray[0] || pHalData->IntArray[1]) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
//4 // ========== DWORD 0 ==========
|
||||
case HAL_INT_TYPE_BCNDERR0:
|
||||
bResult = (pHalData->IntArray[0] & BIT_BCNDERR0) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TBDOK:
|
||||
bResult = (pHalData->IntArray[0] & BIT_TXBCN0OK) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TBDER:
|
||||
bResult = (pHalData->IntArray[0] & BIT_TXBCN0ERR) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BcnInt:
|
||||
bResult = (pHalData->IntArray[0] & BIT_BCNDMAINT0) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_PSTIMEOUT:
|
||||
bResult = (pHalData->IntArray[0] & BIT_PSTIMEOUT) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_PSTIMEOUT1:
|
||||
bResult = (pHalData->IntArray[0] & BIT_PSTIMEOUT1) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_PSTIMEOUT2:
|
||||
bResult = (pHalData->IntArray[0] & BIT_PSTIMEOUT2) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_C2HCMD:
|
||||
bResult = (pHalData->IntArray[0] & BIT_C2HCMD) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_VIDOK:
|
||||
bResult = (pHalData->IntArray[0] & BIT_VIDOK) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_VODOK:
|
||||
bResult = (pHalData->IntArray[0] & BIT_VODOK) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BEDOK:
|
||||
bResult = (pHalData->IntArray[0] & BIT_BEDOK) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BKDOK:
|
||||
bResult = (pHalData->IntArray[0] & BIT_BKDOK) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_MGNTDOK:
|
||||
bResult = (pHalData->IntArray[0] & BIT_MGTDOK) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_HIGHDOK:
|
||||
bResult = (pHalData->IntArray[0] & BIT_HIGHDOK) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
#if 0 //Filen: removed
|
||||
case HAL_INT_TYPE_BDOK:
|
||||
bResult = (pHalData->IntArray[0] & IMR_BCNDOK0_88E) ? TRUE : FALSE;
|
||||
break;
|
||||
#endif
|
||||
|
||||
case HAL_INT_TYPE_CPWM:
|
||||
bResult = (pHalData->IntArray[0] & BIT_CPWM) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TSF_BIT32_TOGGLE:
|
||||
bResult = (pHalData->IntArray[0] & BIT_TSF_BIT32_TOGGLE) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_RX_OK:
|
||||
bResult = (pHalData->IntArray[0] & BIT_RXOK) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_RDU:
|
||||
bResult = (pHalData->IntArray[0] & BIT_RDU) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_CTWEND:
|
||||
#if (IS_RTL8192E_SERIES || IS_RTL8881A_SERIES)
|
||||
if (IS_HARDWARE_TYPE_8192E(Adapter) || IS_HARDWARE_TYPE_8881A(Adapter)) {
|
||||
bResult = (pHalData->IntArray[0] & BIT_CTWEND) ? TRUE : FALSE;
|
||||
}
|
||||
#endif //(IS_RTL8192E_SERIES || IS_RTL8881A_SERIES)
|
||||
|
||||
#if IS_RTL8814A_SERIES
|
||||
if (IS_HARDWARE_TYPE_8814A(Adapter))
|
||||
{
|
||||
//this interrupt is removed at 8814A
|
||||
bResult = FALSE;
|
||||
}
|
||||
#endif // IS_RTL8192E_SERIES
|
||||
break;
|
||||
|
||||
//4 // ========== DWORD 1 ==========
|
||||
case HAL_INT_TYPE_RXFOVW:
|
||||
bResult = (pHalData->IntArray[1] & BIT_FOVW) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TXFOVW:
|
||||
bResult = (pHalData->IntArray[1] & BIT_TXFOVW) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_RXERR:
|
||||
bResult = (pHalData->IntArray[1] & BIT_RXERR_INT) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TXERR:
|
||||
bResult = (pHalData->IntArray[1] & BIT_TXERR_INT) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BcnInt_MBSSID:
|
||||
bResult = ((pHalData->IntArray[1] & (BIT_BCNDMAINT1|BIT_BCNDMAINT2|BIT_BCNDMAINT3|BIT_BCNDMAINT4|
|
||||
BIT_BCNDMAINT5|BIT_BCNDMAINT6|BIT_BCNDMAINT7)) ||
|
||||
(pHalData->IntArray[0] & BIT_BCNDMAINT0)
|
||||
) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BcnInt1:
|
||||
bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT1) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BcnInt2:
|
||||
bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT2) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BcnInt3:
|
||||
bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT3) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BcnInt4:
|
||||
bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT4) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BcnInt5:
|
||||
bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT5) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BcnInt6:
|
||||
bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT6) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BcnInt7:
|
||||
bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT7) ? TRUE : FALSE;
|
||||
break;
|
||||
|
||||
#if IS_EXIST_RTL8814AE
|
||||
if ( IS_HARDWARE_TYPE_8814AE(Adapter) ) {
|
||||
|
||||
case HAL_INT_TYPE_PwrInt0:
|
||||
bResult = (pHalData->IntArray[3] & BIT_PWR_INT_31to0) ? TRUE : FALSE;
|
||||
break;
|
||||
case HAL_INT_TYPE_PwrInt1:
|
||||
bResult = (pHalData->IntArray[3] & BIT_PWR_INT_63to32) ? TRUE : FALSE;
|
||||
break;
|
||||
case HAL_INT_TYPE_PwrInt2:
|
||||
bResult = (pHalData->IntArray[3] & BIT_PWR_INT_95to64) ? TRUE : FALSE;
|
||||
break;
|
||||
case HAL_INT_TYPE_PwrInt3:
|
||||
bResult = (pHalData->IntArray[3] & BIT_PWR_INT_126to96) ? TRUE : FALSE;
|
||||
break;
|
||||
case HAL_INT_TYPE_PwrInt4:
|
||||
bResult = (pHalData->IntArray[3] & BIT_PWR_INT_127) ? TRUE : FALSE;
|
||||
break;
|
||||
}
|
||||
#endif // #if IS_EXIST_RTL8814AE
|
||||
|
||||
}
|
||||
|
||||
return bResult;
|
||||
}
|
||||
|
||||
|
||||
// TODO: Pedro, we can set several IMR combination for different scenario. Ex: 1) AP, 2) Client, 3) ....
|
||||
// TODO: this can avoid to check non-necessary interrupt in __wlan_interrupt(..)...
|
||||
VOID
|
||||
AddInterruptMask88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN HAL_INT_TYPE intType
|
||||
)
|
||||
{
|
||||
HAL_DATA_TYPE *pHalData = _GET_HAL_DATA(Adapter);
|
||||
|
||||
switch(intType)
|
||||
{
|
||||
default:
|
||||
// Unknown interrupt type, no need to alarm because this IC may not
|
||||
// support this interrupt.
|
||||
RT_TRACE_F(COMP_SYSTEM, DBG_WARNING, ("Unkown intType: %d!\n", intType));
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_ANY:
|
||||
pHalData->IntMask[0] = 0xFFFFFFFF;
|
||||
pHalData->IntMask[1] = 0xFFFFFFFF;
|
||||
break;
|
||||
|
||||
//4 // ========== DWORD 0 ==========
|
||||
case HAL_INT_TYPE_BCNDERR0:
|
||||
pHalData->IntMask[0] |= BIT_BCNDERR0;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TBDOK:
|
||||
pHalData->IntMask[0] |= BIT_TXBCN0OK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TBDER:
|
||||
pHalData->IntMask[0] |= BIT_TXBCN0ERR;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BcnInt:
|
||||
pHalData->IntMask[0] |= BIT_BCNDMAINT0;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_PSTIMEOUT:
|
||||
pHalData->IntMask[0] |= BIT_PSTIMEOUT;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_PSTIMEOUT1:
|
||||
pHalData->IntMask[0] |= BIT_PSTIMEOUT1;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_PSTIMEOUT2:
|
||||
pHalData->IntMask[0] |= BIT_PSTIMEOUT2;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_C2HCMD:
|
||||
pHalData->IntMask[0] |= BIT_C2HCMD;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_VIDOK:
|
||||
pHalData->IntMask[0] |= BIT_VIDOK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_VODOK:
|
||||
pHalData->IntMask[0] |= BIT_VODOK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BEDOK:
|
||||
pHalData->IntMask[0] |= BIT_BEDOK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BKDOK:
|
||||
pHalData->IntMask[0] |= BIT_BKDOK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_MGNTDOK:
|
||||
pHalData->IntMask[0] |= BIT_MGTDOK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_HIGHDOK:
|
||||
pHalData->IntMask[0] |= BIT_HIGHDOK;
|
||||
break;
|
||||
|
||||
#if 0 //Filen: removed
|
||||
case HAL_INT_TYPE_BDOK:
|
||||
pHalData->IntMask[0] |= IMR_BCNDOK0_88E;
|
||||
break;
|
||||
#endif
|
||||
|
||||
case HAL_INT_TYPE_CPWM:
|
||||
pHalData->IntMask[0] |= BIT_CPWM;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TSF_BIT32_TOGGLE:
|
||||
pHalData->IntMask[0] |= BIT_TSF_BIT32_TOGGLE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_RX_OK:
|
||||
pHalData->IntMask[0] |= BIT_RXOK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_RDU:
|
||||
pHalData->IntMask[0] |= BIT_RDU;
|
||||
break;
|
||||
|
||||
//4 // ========== DWORD 1 ==========
|
||||
case HAL_INT_TYPE_RXFOVW:
|
||||
pHalData->IntMask[1] |= BIT_FOVW;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TXFOVW:
|
||||
pHalData->IntMask[1] |= BIT_TXFOVW;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_RXERR:
|
||||
pHalData->IntMask[1] |= BIT_RXERR_INT;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TXERR:
|
||||
pHalData->IntMask[1] |= BIT_TXERR_INT;
|
||||
break;
|
||||
|
||||
#if IS_EXIST_RTL8814AE
|
||||
if ( IS_HARDWARE_TYPE_8814AE(Adapter) ) {
|
||||
|
||||
case HAL_INT_TYPE_PwrInt0:
|
||||
pHalData->IntMask[3] |= BIT_PWR_INT_31to0;
|
||||
break;
|
||||
case HAL_INT_TYPE_PwrInt1:
|
||||
pHalData->IntMask[3] |= BIT_PWR_INT_63to32;
|
||||
break;
|
||||
case HAL_INT_TYPE_PwrInt2:
|
||||
pHalData->IntMask[3] |= BIT_PWR_INT_95to64;
|
||||
break;
|
||||
case HAL_INT_TYPE_PwrInt3:
|
||||
pHalData->IntMask[3] |= BIT_PWR_INT_126to96;
|
||||
break;
|
||||
case HAL_INT_TYPE_PwrInt4:
|
||||
pHalData->IntMask[3] |= BIT_PWR_INT_127;
|
||||
break;
|
||||
}
|
||||
#endif // #if IS_EXIST_RTL8814AE
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
VOID
|
||||
RemoveInterruptMask88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN HAL_INT_TYPE intType
|
||||
)
|
||||
{
|
||||
HAL_DATA_TYPE *pHalData = _GET_HAL_DATA(Adapter);
|
||||
|
||||
switch(intType)
|
||||
{
|
||||
default:
|
||||
// Unknown interrupt type, no need to alarm because this IC may not
|
||||
// support this interrupt.
|
||||
RT_TRACE_F(COMP_SYSTEM, DBG_WARNING, ("Unkown intType: %d!\n", intType));
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_ANY:
|
||||
pHalData->IntMask[0] &= ~0xFFFFFFFF;
|
||||
pHalData->IntMask[1] &= ~0xFFFFFFFF;
|
||||
break;
|
||||
|
||||
//4 // ========== DWORD 0 ==========
|
||||
case HAL_INT_TYPE_BCNDERR0:
|
||||
pHalData->IntMask[0] &= ~BIT_BCNDERR0;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TBDOK:
|
||||
pHalData->IntMask[0] &= ~BIT_TXBCN0OK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TBDER:
|
||||
pHalData->IntMask[0] &= ~BIT_TXBCN0ERR;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BcnInt:
|
||||
pHalData->IntMask[0] &= ~BIT_BCNDMAINT0;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_PSTIMEOUT:
|
||||
pHalData->IntMask[0] &= ~BIT_PSTIMEOUT;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_PSTIMEOUT1:
|
||||
pHalData->IntMask[0] &= ~BIT_PSTIMEOUT1;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_PSTIMEOUT2:
|
||||
pHalData->IntMask[0] &= ~BIT_PSTIMEOUT2;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_C2HCMD:
|
||||
pHalData->IntMask[0] &= ~BIT_C2HCMD;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_VIDOK:
|
||||
pHalData->IntMask[0] &= ~BIT_VIDOK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_VODOK:
|
||||
pHalData->IntMask[0] &= ~BIT_VODOK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BEDOK:
|
||||
pHalData->IntMask[0] &= ~BIT_BEDOK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_BKDOK:
|
||||
pHalData->IntMask[0] &= ~BIT_BKDOK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_MGNTDOK:
|
||||
pHalData->IntMask[0] &= ~BIT_MGTDOK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_HIGHDOK:
|
||||
pHalData->IntMask[0] &= ~BIT_HIGHDOK;
|
||||
break;
|
||||
|
||||
#if 0 //Filen: removed
|
||||
case HAL_INT_TYPE_BDOK:
|
||||
pHalData->IntMask[0] &= ~IMR_BCNDOK0_88E;
|
||||
break;
|
||||
#endif
|
||||
|
||||
case HAL_INT_TYPE_CPWM:
|
||||
pHalData->IntMask[0] &= ~BIT_CPWM;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TSF_BIT32_TOGGLE:
|
||||
pHalData->IntMask[0] &= ~BIT_TSF_BIT32_TOGGLE;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_RX_OK:
|
||||
pHalData->IntMask[0] &= ~BIT_RXOK;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_RDU:
|
||||
pHalData->IntMask[0] &= ~BIT_RDU;
|
||||
break;
|
||||
|
||||
//4 // ========== DWORD 1 ==========
|
||||
case HAL_INT_TYPE_RXFOVW:
|
||||
pHalData->IntMask[1] &= ~BIT_FOVW;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TXFOVW:
|
||||
pHalData->IntMask[1] &= ~BIT_TXFOVW;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_RXERR:
|
||||
pHalData->IntMask[1] &= ~BIT_RXERR_INT;
|
||||
break;
|
||||
|
||||
case HAL_INT_TYPE_TXERR:
|
||||
pHalData->IntMask[1] &= ~BIT_TXERR_INT;
|
||||
break;
|
||||
|
||||
#if IS_EXIST_RTL8814AE
|
||||
if ( IS_HARDWARE_TYPE_8814AE(Adapter) ) {
|
||||
|
||||
case HAL_INT_TYPE_PwrInt0:
|
||||
pHalData->IntMask[3] &= ~BIT_PWR_INT_31to0;
|
||||
break;
|
||||
case HAL_INT_TYPE_PwrInt1:
|
||||
pHalData->IntMask[3] &= ~BIT_PWR_INT_63to32;
|
||||
break;
|
||||
case HAL_INT_TYPE_PwrInt2:
|
||||
pHalData->IntMask[3] &= ~BIT_PWR_INT_95to64;
|
||||
break;
|
||||
case HAL_INT_TYPE_PwrInt3:
|
||||
pHalData->IntMask[3] &= ~BIT_PWR_INT_126to96;
|
||||
break;
|
||||
case HAL_INT_TYPE_PwrInt4:
|
||||
pHalData->IntMask[3] &= ~BIT_PWR_INT_127;
|
||||
break;
|
||||
}
|
||||
#endif // #if IS_EXIST_RTL8814AE
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
HAL_IMEM
|
||||
VOID
|
||||
DisableRxRelatedInterrupt88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
)
|
||||
{
|
||||
PHAL_DATA_TYPE pHalData = _GET_HAL_DATA(Adapter);
|
||||
HAL_PADAPTER priv = Adapter;
|
||||
ULONG flags;
|
||||
|
||||
#if 0
|
||||
HAL_SAVE_INT_AND_CLI(flags);
|
||||
|
||||
pHalData->IntMask_RxINTBackup[0] = pHalData->IntMask[0];
|
||||
pHalData->IntMask_RxINTBackup[1] = pHalData->IntMask[1];
|
||||
|
||||
pHalData->IntMask[0] &= ~BIT_RXOK;
|
||||
pHalData->IntMask[1] &= ~BIT_FOVW;
|
||||
|
||||
HAL_RESTORE_INT(flags);
|
||||
|
||||
HAL_RTL_W32(REG_HIMR0, pHalData->IntMask[0]);
|
||||
HAL_RTL_W32(REG_HIMR1, pHalData->IntMask[1]);
|
||||
#else
|
||||
HAL_RTL_W32(REG_HIMR0, pHalData->IntMask[0] & ~ (BIT_RXOK | BIT_RDU));
|
||||
HAL_RTL_W32(REG_HIMR1, pHalData->IntMask[1] & ~BIT_FOVW);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
HAL_IMEM
|
||||
VOID
|
||||
EnableRxRelatedInterrupt88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
)
|
||||
{
|
||||
PHAL_DATA_TYPE pHalData = _GET_HAL_DATA(Adapter);
|
||||
HAL_PADAPTER priv = Adapter;
|
||||
ULONG flags;
|
||||
|
||||
#if 0
|
||||
HAL_SAVE_INT_AND_CLI(flags);
|
||||
|
||||
pHalData->IntMask[0] = pHalData->IntMask_RxINTBackup[0];
|
||||
pHalData->IntMask[1] = pHalData->IntMask_RxINTBackup[1];
|
||||
|
||||
HAL_RESTORE_INT(flags);
|
||||
#endif
|
||||
HAL_RTL_W32(REG_HIMR0, pHalData->IntMask[0]);
|
||||
HAL_RTL_W32(REG_HIMR1, pHalData->IntMask[1]);
|
||||
|
||||
}
|
||||
|
||||
|
88
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXIsr.h
Executable file
88
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXIsr.h
Executable file
@ -0,0 +1,88 @@
|
||||
#ifndef __HAL88XX_ISR_H__
|
||||
#define __HAL88XX_ISR_H__
|
||||
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal88XXIsr.h
|
||||
|
||||
Abstract:
|
||||
Defined HAL 88XX Interrupt Service Routine Related Define & Marco
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-04-30 Filen Create.
|
||||
--*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
VOID
|
||||
EnableIMR88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
|
||||
BOOLEAN
|
||||
InterruptRecognized88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN PVOID pContent,
|
||||
IN u4Byte ContentLen
|
||||
);
|
||||
|
||||
|
||||
BOOLEAN
|
||||
GetInterrupt88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN HAL_INT_TYPE intType
|
||||
);
|
||||
|
||||
|
||||
VOID
|
||||
AddInterruptMask88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN HAL_INT_TYPE intType
|
||||
);
|
||||
|
||||
|
||||
VOID
|
||||
RemoveInterruptMask88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN HAL_INT_TYPE intType
|
||||
);
|
||||
|
||||
|
||||
VOID
|
||||
DisableRxRelatedInterrupt88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
|
||||
VOID
|
||||
EnableRxRelatedInterrupt88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif //__HAL88XX_ISR_H__
|
3469
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXPhyCfg.c
Executable file
3469
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXPhyCfg.c
Executable file
File diff suppressed because it is too large
Load Diff
289
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXPhyCfg.h
Executable file
289
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXPhyCfg.h
Executable file
@ -0,0 +1,289 @@
|
||||
#ifndef __HAL88XXPHYCFG_H__
|
||||
#define __HAL88XXPHYCFG_H__
|
||||
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal88XXPhyCfg.h
|
||||
|
||||
Abstract:
|
||||
Defined HAL 88XX PHY BB setting functions
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-11-14 Eric Create.
|
||||
--*/
|
||||
|
||||
|
||||
|
||||
typedef enum _RF88XX_RADIO_PATH_ {
|
||||
RF88XX_PATH_A = 0, //Radio Path A
|
||||
RF88XX_PATH_B = 1, //Radio Path B
|
||||
RF88XX_PATH_MAX //Max RF number
|
||||
} RFRF88XX_RADIO_PATH_E, *PRFRF88XX_RADIO_PATH_E;
|
||||
|
||||
typedef enum _BAND_TYPE{
|
||||
RF88XX_BAND_ON_2_4G = 0,
|
||||
RF88XX_BAND_ON_5G,
|
||||
RF88XX_BAND_ON_BOTH,
|
||||
RF88XX_BANDMAX
|
||||
}RF88XX_BAND_TYPE,*PRF88XX_BAND_TYPE;
|
||||
|
||||
typedef enum _RF88XX_HT_CHANNEL_WIDTH {
|
||||
RF88XX_HT_CHANNEL_WIDTH_20 = 0,
|
||||
RF88XX_HT_CHANNEL_WIDTH_20_40 = 1,
|
||||
RF88XX_HT_CHANNEL_WIDTH_80 = 2,
|
||||
RF88XX_HT_CHANNEL_WIDTH_160 = 3,
|
||||
RF88XX_HT_CHANNEL_WIDTH_10 = 4
|
||||
}RF88XX_HT_CHANNEL_WIDTH,*PRF88XXHT_CHANNEL_WIDTH;
|
||||
|
||||
typedef enum _RF88XX_HT_CHANNEL_WIDTH_AC {
|
||||
RF88XX_HT_CHANNEL_WIDTH_AC_20 = 0,
|
||||
RF88XX_HT_CHANNEL_WIDTH_AC_40 = 1,
|
||||
RF88XX_HT_CHANNEL_WIDTH_AC_80 = 2,
|
||||
RF88XX_HT_CHANNEL_WIDTH_AC_160 = 3,
|
||||
RF88XX_HT_CHANNEL_WIDTH_AC_10 = 4,
|
||||
RF88XX_HT_CHANNEL_WIDTH_AC_5 = 5
|
||||
}RF88XX_HT_CHANNEL_WIDTH_AC,*PRF88XX_HT_CHANNEL_WIDTH_AC;
|
||||
|
||||
|
||||
u4Byte
|
||||
phy_CalculateBitShift_88XX(
|
||||
IN u4Byte BitMask
|
||||
);
|
||||
|
||||
u4Byte
|
||||
PHY_QueryBBReg_88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte RegAddr,
|
||||
IN u4Byte BitMask
|
||||
);
|
||||
|
||||
void
|
||||
PHY_SetBBReg_88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte RegAddr,
|
||||
IN u4Byte BitMask,
|
||||
IN u4Byte Data
|
||||
);
|
||||
|
||||
void
|
||||
PHY_SetRFReg_88XX_AC
|
||||
(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte eRFPath,
|
||||
IN u4Byte RegAddr,
|
||||
IN u4Byte BitMask,
|
||||
IN u4Byte Data
|
||||
);
|
||||
|
||||
u4Byte
|
||||
PHY_QueryRFReg_88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte eRFPath,
|
||||
IN u4Byte RegAddr,
|
||||
IN u4Byte BitMask
|
||||
);
|
||||
|
||||
void
|
||||
SwBWMode88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte bandwidth,
|
||||
IN s4Byte offset
|
||||
);
|
||||
|
||||
|
||||
void
|
||||
SetChannelPara88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte channel,
|
||||
IN s4Byte offset
|
||||
);
|
||||
|
||||
void
|
||||
CheckBand88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte RequestChannel
|
||||
);
|
||||
|
||||
|
||||
void SwitchWirelessBand88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte RequestChannel,
|
||||
IN u1Byte Band
|
||||
);
|
||||
|
||||
|
||||
void UpdateBBRFVal88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte channel,
|
||||
IN s4Byte offset
|
||||
);
|
||||
|
||||
|
||||
RT_STATUS
|
||||
PHYSetCCKTxPower88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte channel
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
PHYSetOFDMTxPower88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte channel
|
||||
);
|
||||
|
||||
|
||||
void
|
||||
CalOFDMTxPower5G_88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte ch_idx
|
||||
);
|
||||
|
||||
void
|
||||
CalOFDMTxPower2G_88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte ch_idx
|
||||
);
|
||||
|
||||
s1Byte
|
||||
convert_diff_88XX_AC(
|
||||
IN s1Byte value
|
||||
);
|
||||
|
||||
void
|
||||
Write_1S_A_88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte writeVal
|
||||
);
|
||||
|
||||
void
|
||||
Write_2S_A_88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte writeVal
|
||||
);
|
||||
|
||||
void
|
||||
Write_OFDM_A_88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte writeVal
|
||||
);
|
||||
|
||||
void
|
||||
Write_OFDM_B_88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte writeVal
|
||||
);
|
||||
|
||||
void
|
||||
Write_1S_B_88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte writeVal
|
||||
);
|
||||
|
||||
void
|
||||
Write_2S_B_88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte writeVal
|
||||
);
|
||||
|
||||
void
|
||||
use_DefaultOFDMTxPowerPathA88XX_AC(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
void
|
||||
use_DefaultOFDMTxPowerPathB88XX_AC(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
|
||||
RT_STATUS
|
||||
PHYSetOFDMTxPower88XX_N(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte channel
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
PHYSetCCKTxPower88XX_N(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte channel
|
||||
);
|
||||
|
||||
void
|
||||
SwBWMode88XX_N(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte bandwidth,
|
||||
IN s4Byte offset
|
||||
);
|
||||
|
||||
void
|
||||
PHY_SetRFReg_88XX_N
|
||||
(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte eRFPath,
|
||||
IN u4Byte RegAddr,
|
||||
IN u4Byte BitMask,
|
||||
IN u4Byte Data
|
||||
);
|
||||
|
||||
u4Byte
|
||||
PHY_QueryRFReg_88XX_N
|
||||
(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte eRFPath,
|
||||
IN u4Byte RegAddr,
|
||||
IN u4Byte BitMask
|
||||
);
|
||||
|
||||
#if 0
|
||||
s4Byte
|
||||
get_tx_tracking_index_88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN s4Byte channel,
|
||||
IN s4Byte i,
|
||||
IN s4Byte delta,
|
||||
IN s4Byte is_decrease,
|
||||
IN s4Byte is_CCK
|
||||
);
|
||||
|
||||
|
||||
void
|
||||
set_CCK_swing_index_88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN s2Byte CCK_index
|
||||
);
|
||||
|
||||
void TXPowerTracking_ThermalMeter_88XX
|
||||
(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
#endif
|
||||
RT_STATUS
|
||||
AddTxPower88XX_AC(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN s1Byte index
|
||||
);
|
||||
#if (IS_RTL8192E_SERIES || IS_RTL8881A_SERIES)
|
||||
BOOLEAN
|
||||
IsBBRegRange88XX
|
||||
(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte RegAddr
|
||||
);
|
||||
#endif //#if (IS_RTL8192E_SERIES || IS_RTL8881A_SERIES)
|
||||
|
||||
|
||||
#if (IS_RTL8814A_SERIES)
|
||||
BOOLEAN
|
||||
IsBBRegRange88XX_V1
|
||||
(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte RegAddr
|
||||
);
|
||||
#endif //#if (IS_RTL8814A_SERIES)
|
||||
|
||||
#endif // #ifndef __HAL88XXPHYCFG_H__
|
||||
|
@ -0,0 +1,150 @@
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal88XXPwrSeqCmd.c
|
||||
|
||||
Abstract:
|
||||
Implement HW Power sequence configuration CMD handling routine for Realtek devices.
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-04-03 Filen Create.
|
||||
--*/
|
||||
|
||||
#include "../HalPrecomp.h"
|
||||
|
||||
//
|
||||
// Description:
|
||||
// This routine deal with the Power Configuration CMDs parsing for RTL8723/RTL8188E Series IC.
|
||||
//
|
||||
// Assumption:
|
||||
// We should follow specific format which was released from HW SD.
|
||||
//
|
||||
// 2011.07.07, added by Roger.
|
||||
//
|
||||
BOOLEAN
|
||||
HalPwrSeqCmdParsing88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte CutVersion,
|
||||
IN u1Byte FabVersion,
|
||||
IN u1Byte InterfaceType,
|
||||
IN WLAN_PWR_CFG PwrSeqCmd[]
|
||||
)
|
||||
{
|
||||
|
||||
WLAN_PWR_CFG PwrCfgCmd = {0};
|
||||
u32 bPollingBit = _FALSE;
|
||||
u32 AryIdx=0;
|
||||
u8 value = 0;
|
||||
u32 offset = 0;
|
||||
u32 pollingCount = 0; // polling autoload done.
|
||||
u32 maxPollingCnt = 5000;
|
||||
|
||||
do {
|
||||
PwrCfgCmd=PwrSeqCmd[AryIdx];
|
||||
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("%s %d, ENTRY, offset:0x%x, cut_msk:0x%x, fab_msk:0x%x, if_msk:0x%x, base:0x%x, cmd:0x%x, msk:0x%x, value:0x%x\n",
|
||||
__FUNCTION__, __LINE__, GET_PWR_CFG_OFFSET(PwrCfgCmd), GET_PWR_CFG_CUT_MASK(PwrCfgCmd),
|
||||
GET_PWR_CFG_FAB_MASK(PwrCfgCmd), GET_PWR_CFG_INTF_MASK(PwrCfgCmd), GET_PWR_CFG_BASE(PwrCfgCmd),
|
||||
GET_PWR_CFG_CMD(PwrCfgCmd), GET_PWR_CFG_MASK(PwrCfgCmd), GET_PWR_CFG_VALUE(PwrCfgCmd)) );
|
||||
|
||||
HAL_delay_us(600);
|
||||
//2 Only Handle the command whose FAB, CUT, and Interface are matched
|
||||
if((GET_PWR_CFG_FAB_MASK(PwrCfgCmd)&FabVersion)&&
|
||||
(GET_PWR_CFG_CUT_MASK(PwrCfgCmd)&CutVersion)&&
|
||||
(GET_PWR_CFG_INTF_MASK(PwrCfgCmd)&InterfaceType)) {
|
||||
switch(GET_PWR_CFG_CMD(PwrCfgCmd))
|
||||
{
|
||||
case PWR_CMD_READ:
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("%s %d, PWR_CMD_READ\n", __FUNCTION__, __LINE__));
|
||||
break;
|
||||
|
||||
case PWR_CMD_WRITE:
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("%s %d, PWR_CMD_WRITE\n", __FUNCTION__, __LINE__));
|
||||
offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
|
||||
|
||||
#ifdef CONFIG_SDIO_HCI
|
||||
//
|
||||
// <Roger_Notes> We should deal with interface specific address mapping for some interfaces, e.g., SDIO interface
|
||||
// 2011.07.07.
|
||||
//
|
||||
if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
|
||||
{
|
||||
// Read Back SDIO Local value
|
||||
value = SdioLocalCmd52Read1Byte(Adapter, offset);
|
||||
|
||||
value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
|
||||
value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd));
|
||||
|
||||
// Write Back SDIO Local value
|
||||
SdioLocalCmd52Write1Byte(Adapter, offset, value);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
//Read the value from system register
|
||||
value = HAL_RTL_R8(offset);
|
||||
value = value&(~(GET_PWR_CFG_MASK(PwrCfgCmd)));
|
||||
value = value|(GET_PWR_CFG_VALUE(PwrCfgCmd)&GET_PWR_CFG_MASK(PwrCfgCmd));
|
||||
|
||||
//Write the value back to sytem register
|
||||
HAL_RTL_W8(offset, value);
|
||||
}
|
||||
break;
|
||||
|
||||
case PWR_CMD_POLLING:
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("%s %d, PWR_CMD_POLLING\n", __FUNCTION__, __LINE__));
|
||||
bPollingBit = _FALSE;
|
||||
offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
|
||||
|
||||
do {
|
||||
#ifdef CONFIG_SDIO_HCI
|
||||
if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
|
||||
value = SdioLocalCmd52Read1Byte(Adapter, offset);
|
||||
else
|
||||
#endif
|
||||
value = HAL_RTL_R8(offset);
|
||||
value = value & GET_PWR_CFG_MASK(PwrCfgCmd);
|
||||
if(value==(GET_PWR_CFG_VALUE(PwrCfgCmd)&GET_PWR_CFG_MASK(PwrCfgCmd)))
|
||||
bPollingBit = _TRUE;
|
||||
else
|
||||
HAL_delay_us(20);
|
||||
|
||||
if(pollingCount++ > maxPollingCnt){
|
||||
RT_TRACE(COMP_INIT, DBG_WARNING, ("%s %d, PWR_CMD_POLLING, Fail to polling Offset[0x%x]\n", __FUNCTION__, __LINE__, offset));
|
||||
return _FALSE;
|
||||
}
|
||||
}while(!bPollingBit);
|
||||
|
||||
break;
|
||||
|
||||
case PWR_CMD_DELAY:
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("%s %d, PWR_CMD_DELAY\n", __FUNCTION__, __LINE__));
|
||||
if(GET_PWR_CFG_VALUE(PwrCfgCmd) == PWRSEQ_DELAY_US)
|
||||
HAL_delay_us(GET_PWR_CFG_OFFSET(PwrCfgCmd));
|
||||
else
|
||||
HAL_delay_us(GET_PWR_CFG_OFFSET(PwrCfgCmd)*1000);
|
||||
break;
|
||||
|
||||
case PWR_CMD_END:
|
||||
// When this command is parsed, end the process
|
||||
RT_TRACE(COMP_INIT, DBG_LOUD, ("%s %d, PWR_CMD_END\n", __FUNCTION__, __LINE__));
|
||||
return _TRUE;
|
||||
break;
|
||||
|
||||
default:
|
||||
RT_TRACE(COMP_INIT, DBG_SERIOUS, ("%s %d, Unknown CMD!!\n", __FUNCTION__, __LINE__));
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
AryIdx++;//Add Array Index
|
||||
}while(1);
|
||||
|
||||
return _TRUE;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,132 @@
|
||||
#ifndef __HAL88XX_PWRSEQCMD_H__
|
||||
#define __HAL88XX_PWRSEQCMD_H__
|
||||
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal88XXPwrSeqCmd.h
|
||||
|
||||
Abstract:
|
||||
Defined HAL 88XX Power Sequence Command
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-04-03 Filen Create.
|
||||
--*/
|
||||
|
||||
#if 0
|
||||
/*---------------------------------------------*/
|
||||
//3 The value of cmd: 4 bits
|
||||
/*---------------------------------------------*/
|
||||
#define PWR_CMD_READ 0x00
|
||||
// offset: the read register offset
|
||||
// msk: the mask of the read value
|
||||
// value: N/A, left by 0
|
||||
// note: dirver shall implement this function by read & msk
|
||||
#define PWR_CMD_WRITE 0x01
|
||||
// offset: the read register offset
|
||||
// msk: the mask of the write bits
|
||||
// value: write value
|
||||
// note: driver shall implement this cmd by read & msk after write
|
||||
#define PWR_CMD_POLLING 0x02
|
||||
// offset: the read register offset
|
||||
// msk: the mask of the polled value
|
||||
// value: the value to be polled, masked by the msd field.
|
||||
// note: driver shall implement this cmd by
|
||||
// do{
|
||||
// if( (Read(offset) & msk) == (value & msk) )
|
||||
// break;
|
||||
// } while(not timeout);
|
||||
#define PWR_CMD_DELAY 0x03
|
||||
// offset: the value to delay
|
||||
// msk: N/A
|
||||
// value: the unit of delay, 0: us, 1: ms
|
||||
#define PWR_CMD_END 0x04
|
||||
// offset: N/A
|
||||
// msk: N/A
|
||||
// value: N/A
|
||||
|
||||
/*---------------------------------------------*/
|
||||
//3 The value of base: 4 bits
|
||||
/*---------------------------------------------*/
|
||||
// define the base address of each block
|
||||
#define PWR_BASEADDR_MAC 0x00
|
||||
#define PWR_BASEADDR_USB 0x01
|
||||
#define PWR_BASEADDR_PCIE 0x02
|
||||
#define PWR_BASEADDR_SDIO 0x03
|
||||
|
||||
/*---------------------------------------------*/
|
||||
//3 The value of interface_msk: 4 bits
|
||||
/*---------------------------------------------*/
|
||||
#define PWR_INTF_SDIO_MSK BIT(0)
|
||||
#define PWR_INTF_USB_MSK BIT(1)
|
||||
#define PWR_INTF_PCI_MSK BIT(2)
|
||||
#define PWR_INTF_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
|
||||
|
||||
/*---------------------------------------------*/
|
||||
//3 The value of fab_msk: 4 bits
|
||||
/*---------------------------------------------*/
|
||||
#define PWR_FAB_TSMC_MSK BIT(0)
|
||||
#define PWR_FAB_UMC_MSK BIT(1)
|
||||
#define PWR_FAB_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
|
||||
|
||||
/*---------------------------------------------*/
|
||||
//3The value of cut_msk: 8 bits
|
||||
/*---------------------------------------------*/
|
||||
#define PWR_CUT_TESTCHIP_MSK BIT(0)
|
||||
#define PWR_CUT_A_MSK BIT(1)
|
||||
#define PWR_CUT_B_MSK BIT(2)
|
||||
#define PWR_CUT_C_MSK BIT(3)
|
||||
#define PWR_CUT_D_MSK BIT(4)
|
||||
#define PWR_CUT_E_MSK BIT(5)
|
||||
#define PWR_CUT_F_MSK BIT(6)
|
||||
#define PWR_CUT_G_MSK BIT(7)
|
||||
#define PWR_CUT_ALL_MSK 0xFF
|
||||
|
||||
|
||||
typedef enum _PWRSEQ_CMD_DELAY_UNIT_
|
||||
{
|
||||
PWRSEQ_DELAY_US,
|
||||
PWRSEQ_DELAY_MS,
|
||||
} PWRSEQ_DELAY_UNIT;
|
||||
|
||||
typedef struct _WL_PWR_CFG_
|
||||
{
|
||||
unsigned short offset;
|
||||
unsigned char cut_msk;
|
||||
unsigned char fab_msk:4;
|
||||
unsigned char interface_msk:4;
|
||||
unsigned char base:4;
|
||||
unsigned char cmd:4;
|
||||
unsigned char msk;
|
||||
unsigned char value;
|
||||
} WLAN_PWR_CFG, *PWLAN_PWR_CFG;
|
||||
|
||||
|
||||
#define GET_PWR_CFG_OFFSET(__PWR_CMD) __PWR_CMD.offset
|
||||
#define GET_PWR_CFG_CUT_MASK(__PWR_CMD) __PWR_CMD.cut_msk
|
||||
#define GET_PWR_CFG_FAB_MASK(__PWR_CMD) __PWR_CMD.fab_msk
|
||||
#define GET_PWR_CFG_INTF_MASK(__PWR_CMD) __PWR_CMD.interface_msk
|
||||
#define GET_PWR_CFG_BASE(__PWR_CMD) __PWR_CMD.base
|
||||
#define GET_PWR_CFG_CMD(__PWR_CMD) __PWR_CMD.cmd
|
||||
#define GET_PWR_CFG_MASK(__PWR_CMD) __PWR_CMD.msk
|
||||
#define GET_PWR_CFG_VALUE(__PWR_CMD) __PWR_CMD.value
|
||||
|
||||
#else
|
||||
#include "../../HalPwrSeqCmd.h"
|
||||
#endif
|
||||
|
||||
BOOLEAN
|
||||
HalPwrSeqCmdParsing88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte CutVersion,
|
||||
IN u1Byte FabVersion,
|
||||
IN u1Byte InterfaceType,
|
||||
IN WLAN_PWR_CFG PwrSeqCmd[]
|
||||
);
|
||||
|
||||
|
||||
#endif //#define __HAL88XX_PWRSEQCMD_H__
|
||||
|
25
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXReg.h
Executable file
25
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXReg.h
Executable file
@ -0,0 +1,25 @@
|
||||
#ifndef __RTL88XX_REG_H__
|
||||
#define __RTL88XX_REG_H__
|
||||
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal88XXReg.h
|
||||
|
||||
Abstract:
|
||||
Defined RTL88XX Register Offset & Marco & Bit define
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-03-23 Filen Create.
|
||||
2012-03-29 Lun-Wu Yeh Add Tx/Rx Desc Reg
|
||||
--*/
|
||||
|
||||
/*--------------------------Define -------------------------------------------*/
|
||||
|
||||
|
||||
|
||||
#endif //__RTL88XX_REG_H__
|
||||
|
748
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXRxDesc.c
Executable file
748
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXRxDesc.c
Executable file
@ -0,0 +1,748 @@
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal88XXRxDesc.c
|
||||
|
||||
Abstract:
|
||||
Defined RTL88XX HAL rx desc common function
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-03-29 Lun-Wu Yeh Add PrepareRxDesc88XX().
|
||||
--*/
|
||||
|
||||
|
||||
#include "../HalPrecomp.h"
|
||||
|
||||
#if (HAL_DEV_BUS_TYPE & (HAL_RT_EMBEDDED_INTERFACE | HAL_RT_PCI_INTERFACE))
|
||||
|
||||
#ifdef CONFIG_RTL_PROC_NEW
|
||||
#define PROC_PRINT(fmt, arg...) seq_printf(s, fmt, ## arg)
|
||||
#else
|
||||
#define PROC_PRINT printk
|
||||
#endif
|
||||
|
||||
void DumpRxBDesc88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
#ifdef CONFIG_RTL_PROC_NEW
|
||||
IN struct seq_file *s,
|
||||
#endif
|
||||
IN u4Byte q_num
|
||||
)
|
||||
{
|
||||
PHCI_RX_DMA_MANAGER_88XX prx_dma;
|
||||
int i=0;
|
||||
prx_dma = (PHCI_RX_DMA_MANAGER_88XX)(_GET_HAL_DATA(Adapter)->PRxDMA88XX);
|
||||
|
||||
#ifdef NOT_RTK_BSP
|
||||
if (NULL == prx_dma->rx_queue[q_num].pRXBD_head)
|
||||
return;
|
||||
#endif
|
||||
|
||||
#if RXBD_READY_CHECK_METHOD
|
||||
PROC_PRINT(" q_num:%d, hw_idx=%d,host_idx= %d,cur_host_idx:%d, rxtag_seq_num:%d\n", q_num,
|
||||
prx_dma->rx_queue[q_num].hw_idx, prx_dma->rx_queue[q_num].host_idx,
|
||||
prx_dma->rx_queue[q_num].cur_host_idx, prx_dma->rx_queue[q_num].rxtag_seq_num);
|
||||
#else
|
||||
PROC_PRINT(" q_num:%d, hw_idx=%d,host_idx= %d,cur_host_idx:%d\n", q_num,
|
||||
prx_dma->rx_queue[q_num].hw_idx, prx_dma->rx_queue[q_num].host_idx,
|
||||
prx_dma->rx_queue[q_num].cur_host_idx);
|
||||
#endif
|
||||
|
||||
PROC_PRINT("total_rxbd_num=%d,avail_rxbd_num= %d,reg_rwptr_idx:%x\n",
|
||||
prx_dma->rx_queue[q_num].total_rxbd_num, prx_dma->rx_queue[q_num].avail_rxbd_num, prx_dma->rx_queue[q_num].reg_rwptr_idx);
|
||||
|
||||
PROC_PRINT("RWreg(%x):%08x\n", REG_RXQ_RXBD_IDX, HAL_RTL_R32(REG_RXQ_RXBD_IDX));
|
||||
|
||||
#ifdef CONFIG_NET_PCI
|
||||
if (HAL_IS_PCIBIOS_TYPE(Adapter)) {
|
||||
PROC_PRINT("pRXBD_head=%08x, %08lx, reg(%x):%08x\n",
|
||||
(u4Byte)prx_dma->rx_queue[q_num].pRXBD_head ,
|
||||
prx_dma->rx_queue[q_num].rxbd_dma_addr,
|
||||
REG_RXQ_RXBD_DESA, HAL_RTL_R32(REG_RXQ_RXBD_DESA));
|
||||
|
||||
for (i=0;i<RX_Q_RXBD_NUM;i++ ){
|
||||
PROC_PRINT("pRXBD_head[%d], addr:%08x,%08lx: Dword0: 0x%x, Dword1: 0x%x\n",
|
||||
i,
|
||||
(u4Byte)&prx_dma->rx_queue[q_num].pRXBD_head[i],
|
||||
prx_dma->rx_queue[q_num].rxbd_dma_addr + sizeof(RX_BUFFER_DESCRIPTOR)*i,
|
||||
(u4Byte)GET_DESC(prx_dma->rx_queue[q_num].pRXBD_head[i].Dword0),
|
||||
(u4Byte)GET_DESC(prx_dma->rx_queue[q_num].pRXBD_head[i].Dword1) );
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
PROC_PRINT("pRXBD_head=%p, %08lx, reg(%x):%08x\n",
|
||||
prx_dma->rx_queue[q_num].pRXBD_head ,
|
||||
HAL_VIRT_TO_BUS1(Adapter, (PVOID)prx_dma->rx_queue[q_num].pRXBD_head,sizeof(RX_BUFFER_DESCRIPTOR) * RX_Q_RXBD_NUM, PCI_DMA_TODEVICE),
|
||||
REG_RXQ_RXBD_DESA, HAL_RTL_R32(REG_RXQ_RXBD_DESA));
|
||||
|
||||
for (i=0;i<RX_Q_RXBD_NUM;i++ ){
|
||||
PROC_PRINT("pRXBD_head[%d], addr:%08x,%08x: Dword0: 0x%x, Dword1: 0x%x\n",
|
||||
i,
|
||||
(u4Byte)&prx_dma->rx_queue[q_num].pRXBD_head[i],
|
||||
(u4Byte)HAL_VIRT_TO_BUS1(Adapter, (PVOID)&prx_dma->rx_queue[q_num].pRXBD_head[i],sizeof(RX_BUFFER_DESCRIPTOR), PCI_DMA_TODEVICE),
|
||||
(u4Byte)GET_DESC(prx_dma->rx_queue[q_num].pRXBD_head[i].Dword0),
|
||||
(u4Byte)GET_DESC(prx_dma->rx_queue[q_num].pRXBD_head[i].Dword1) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
typedef void (*INIT_RXBUF_FUNC)(HAL_PADAPTER Adapter, PVOID pSkb, u2Byte rxbd_idx, pu4Byte pBufAddr, pu4Byte pBufLen);
|
||||
|
||||
//
|
||||
// bufferLen: SKB Buffer Size (Linux, SKB Format)(RXDESC + Payload)
|
||||
//
|
||||
RT_STATUS
|
||||
PrepareRXBD88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u2Byte bufferLen,
|
||||
IN PVOID Callback // callback function
|
||||
)
|
||||
{
|
||||
PHCI_RX_DMA_MANAGER_88XX prx_dma;
|
||||
HCI_RX_DMA_QUEUE_88XX q_num;
|
||||
u2Byte rxbd_idx;
|
||||
|
||||
pu1Byte pdesc_dma_buf, desc_dma_buf_start;
|
||||
u4Byte value32 = 0;
|
||||
PHAL_BUF pbuf;
|
||||
|
||||
u4Byte RXBD_NUM[HCI_RX_DMA_QUEUE_MAX_NUM] =
|
||||
{
|
||||
RX_Q_RXBD_NUM
|
||||
};
|
||||
|
||||
u4Byte RXBD_Reg[HCI_RX_DMA_QUEUE_MAX_NUM] =
|
||||
{
|
||||
REG_RXQ_RXBD_DESA
|
||||
};
|
||||
|
||||
u4Byte RXBD_RWPtr_Reg[HCI_RX_DMA_QUEUE_MAX_NUM] =
|
||||
{
|
||||
REG_RXQ_RXBD_IDX
|
||||
};
|
||||
|
||||
prx_dma = (PHCI_RX_DMA_MANAGER_88XX)(_GET_HAL_DATA(Adapter)->PRxDMA88XX);
|
||||
PlatformZeroMemory(prx_dma, sizeof(HCI_RX_DMA_MANAGER_88XX));
|
||||
|
||||
#ifdef CONFIG_NET_PCI
|
||||
if (HAL_IS_PCIBIOS_TYPE(Adapter)) {
|
||||
unsigned long tmp_dma_ring_addr =0;
|
||||
PlatformZeroMemory((void*)_GET_HAL_DATA(Adapter)->alloc_dma_buf, DESC_DMA_PAGE_SIZE_MAX_HAL);
|
||||
|
||||
pdesc_dma_buf = (pu1Byte)(_GET_HAL_DATA(Adapter)->ring_virt_addr);
|
||||
printk("%s(%d):size=%d, ring_dma_addr:%08lx, alloc_dma_buf:%08lx, ring_virt_addr:%08lx\n",
|
||||
__FUNCTION__,__LINE__, DESC_DMA_PAGE_SIZE_MAX_HAL,
|
||||
_GET_HAL_DATA(Adapter)->ring_dma_addr, _GET_HAL_DATA(Adapter)->alloc_dma_buf,
|
||||
_GET_HAL_DATA(Adapter)->ring_virt_addr);
|
||||
|
||||
for (q_num = 0; q_num < HCI_RX_DMA_QUEUE_MAX_NUM; q_num++)
|
||||
{
|
||||
prx_dma->rx_queue[q_num].hw_idx = 0;
|
||||
prx_dma->rx_queue[q_num].host_idx = 0;
|
||||
prx_dma->rx_queue[q_num].cur_host_idx = 0;
|
||||
#if RXBD_READY_CHECK_METHOD
|
||||
prx_dma->rx_queue[q_num].rxtag_seq_num = 0;
|
||||
#endif
|
||||
#if CFG_HAL_DELAY_REFILL_RX_BUF
|
||||
prx_dma->rx_queue[q_num].rxbd_ok_cnt = 0;
|
||||
#endif
|
||||
prx_dma->rx_queue[q_num].total_rxbd_num = RXBD_NUM[q_num];
|
||||
prx_dma->rx_queue[q_num].avail_rxbd_num = RXBD_NUM[q_num];
|
||||
prx_dma->rx_queue[q_num].reg_rwptr_idx = RXBD_RWPtr_Reg[q_num];
|
||||
|
||||
if ( 0 == q_num ) {
|
||||
prx_dma->rx_queue[q_num].pRXBD_head = (PRX_BUFFER_DESCRIPTOR)pdesc_dma_buf;
|
||||
tmp_dma_ring_addr = _GET_HAL_DATA(Adapter)->ring_dma_addr;
|
||||
}
|
||||
else {
|
||||
prx_dma->rx_queue[q_num].pRXBD_head = prx_dma->rx_queue[q_num-1].pRXBD_head + \
|
||||
sizeof(RX_BUFFER_DESCRIPTOR) * RXBD_NUM[q_num-1];
|
||||
tmp_dma_ring_addr = tmp_dma_ring_addr + sizeof(RX_BUFFER_DESCRIPTOR) * RXBD_NUM[q_num-1];
|
||||
}
|
||||
prx_dma->rx_queue[q_num].rxbd_dma_addr = tmp_dma_ring_addr;
|
||||
|
||||
printk ("QNum: 0x%x, RXBDHead: 0x%p, tmp_dma_ring_addr:0x%08lx\n",
|
||||
(u4Byte)q_num, prx_dma->rx_queue[q_num].pRXBD_head, tmp_dma_ring_addr);
|
||||
|
||||
HAL_RTL_W32(RXBD_Reg[q_num], tmp_dma_ring_addr);
|
||||
|
||||
//Init Read/Write Pointer for RX queue
|
||||
HAL_RTL_W32(RXBD_RWPtr_Reg[q_num], 0);
|
||||
|
||||
for(rxbd_idx = 0; rxbd_idx < RXBD_NUM[q_num]; rxbd_idx++)
|
||||
{
|
||||
pbuf = HAL_OS_malloc(Adapter, bufferLen, _SKB_RX_, TRUE);
|
||||
if ( NULL == pbuf ) {
|
||||
panic_printk("%s:%d Allocate HAL Memory Failed\n", __FUNCTION__, __LINE__);
|
||||
return RT_STATUS_FAILURE;
|
||||
}
|
||||
else {
|
||||
UpdateRXBDInfo88XX(Adapter, q_num, rxbd_idx, (pu1Byte)pbuf, Callback, _TRUE);
|
||||
|
||||
#if 0
|
||||
RT_TRACE_F(COMP_INIT, DBG_TRACE, ("pRXBD_head[%d]: Dword0: 0x%lx, Dword1: 0x%lx\n", \
|
||||
rxbd_idx, \
|
||||
(u4Byte)GET_DESC(prx_dma->rx_queue[q_num].pRXBD_head[rxbd_idx].Dword0), \
|
||||
(u4Byte)GET_DESC(prx_dma->rx_queue[q_num].pRXBD_head[rxbd_idx].Dword1) \
|
||||
));
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
//DumpRxBDesc88XX(Adapter, 0);
|
||||
return RT_STATUS_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
desc_dma_buf_start = _GET_HAL_DATA(Adapter)->desc_dma_buf;
|
||||
|
||||
PlatformZeroMemory(desc_dma_buf_start, _GET_HAL_DATA(Adapter)->desc_dma_buf_len);
|
||||
#ifdef TRXBD_CACHABLE_REGION
|
||||
_dma_cache_wback((unsigned long)((PVOID)(desc_dma_buf_start)-CONFIG_LUNA_SLAVE_PHYMEM_OFFSET), _GET_HAL_DATA(Adapter)->desc_dma_buf_len);
|
||||
#endif
|
||||
pdesc_dma_buf = (pu1Byte)(((unsigned long)desc_dma_buf_start) + \
|
||||
(HAL_PAGE_SIZE - (((unsigned long)desc_dma_buf_start) & (HAL_PAGE_SIZE-1))));
|
||||
|
||||
//Transfer to Non-cachable address
|
||||
#ifndef TRXBD_CACHABLE_REGION
|
||||
pdesc_dma_buf = (pu1Byte)HAL_TO_NONCACHE_ADDR((u4Byte)pdesc_dma_buf);
|
||||
#endif
|
||||
|
||||
for (q_num = 0; q_num < HCI_RX_DMA_QUEUE_MAX_NUM; q_num++)
|
||||
{
|
||||
prx_dma->rx_queue[q_num].hw_idx = 0;
|
||||
prx_dma->rx_queue[q_num].host_idx = 0;
|
||||
prx_dma->rx_queue[q_num].cur_host_idx = 0;
|
||||
#if RXBD_READY_CHECK_METHOD
|
||||
prx_dma->rx_queue[q_num].rxtag_seq_num = 0;
|
||||
#endif
|
||||
#if CFG_HAL_DELAY_REFILL_RX_BUF
|
||||
prx_dma->rx_queue[q_num].rxbd_ok_cnt = 0;
|
||||
#endif
|
||||
prx_dma->rx_queue[q_num].total_rxbd_num = RXBD_NUM[q_num];
|
||||
prx_dma->rx_queue[q_num].avail_rxbd_num = RXBD_NUM[q_num];
|
||||
prx_dma->rx_queue[q_num].reg_rwptr_idx = RXBD_RWPtr_Reg[q_num];
|
||||
|
||||
if ( 0 == q_num ) {
|
||||
prx_dma->rx_queue[q_num].pRXBD_head = (PRX_BUFFER_DESCRIPTOR)pdesc_dma_buf;
|
||||
}
|
||||
else {
|
||||
prx_dma->rx_queue[q_num].pRXBD_head = prx_dma->rx_queue[q_num-1].pRXBD_head + \
|
||||
sizeof(RX_BUFFER_DESCRIPTOR) * RXBD_NUM[q_num-1];
|
||||
}
|
||||
|
||||
RT_TRACE_F(COMP_INIT, DBG_TRACE, ("QNum: 0x%lx, RXBDHead: 0x%lx\n", \
|
||||
(u4Byte)q_num, \
|
||||
(u4Byte)(prx_dma->rx_queue[q_num].pRXBD_head) \
|
||||
));
|
||||
|
||||
HAL_RTL_W32(RXBD_Reg[q_num], \
|
||||
HAL_VIRT_TO_BUS1(Adapter, (PVOID)prx_dma->rx_queue[q_num].pRXBD_head, \
|
||||
sizeof(RX_BUFFER_DESCRIPTOR) * RXBD_NUM[q_num], HAL_PCI_DMA_TODEVICE) + CONFIG_LUNA_SLAVE_PHYMEM_OFFSET_HAL);
|
||||
|
||||
//Init Read/Write Pointer for RX queue
|
||||
HAL_RTL_W32(RXBD_RWPtr_Reg[q_num], 0);
|
||||
|
||||
for(rxbd_idx = 0; rxbd_idx < RXBD_NUM[q_num]; rxbd_idx++)
|
||||
{
|
||||
pbuf = HAL_OS_malloc(Adapter, bufferLen, _SKB_RX_, TRUE);
|
||||
if ( NULL == pbuf ) {
|
||||
panic_printk("%s:%d [%d]Allocate HAL Memory Failed\n", __FUNCTION__, __LINE__, rxbd_idx);
|
||||
return RT_STATUS_FAILURE;
|
||||
}
|
||||
else {
|
||||
UpdateRXBDInfo88XX(Adapter, q_num, rxbd_idx, (pu1Byte)pbuf, Callback, _TRUE);
|
||||
|
||||
/* RT_TRACE_F(COMP_INIT, DBG_TRACE, ("pRXBD_head[%d]: Dword0: 0x%lx, Dword1: 0x%lx\n",
|
||||
rxbd_idx,
|
||||
(u4Byte)GET_DESC(prx_dma->rx_queue[q_num].pRXBD_head[rxbd_idx].Dword0),
|
||||
(u4Byte)GET_DESC(prx_dma->rx_queue[q_num].pRXBD_head[rxbd_idx].Dword1)
|
||||
)); */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return RT_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
HAL_IMEM
|
||||
RT_STATUS
|
||||
UpdateRXBDInfo88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte queueIndex, //HCI_RX_DMA_QUEUE_88XX
|
||||
IN u2Byte rxbd_idx,
|
||||
IN pu1Byte pBuf,
|
||||
IN PVOID Callback, // callback function
|
||||
IN BOOLEAN bInit
|
||||
)
|
||||
{
|
||||
PHCI_RX_DMA_MANAGER_88XX prx_dma;
|
||||
INIT_RXBUF_FUNC InitRXDescFunc = (INIT_RXBUF_FUNC)Callback;
|
||||
u4Byte bufAddr;
|
||||
u4Byte bufLen;
|
||||
unsigned long dma_addr;
|
||||
|
||||
prx_dma = (PHCI_RX_DMA_MANAGER_88XX)(_GET_HAL_DATA(Adapter)->PRxDMA88XX);
|
||||
|
||||
InitRXDescFunc(Adapter, pBuf, rxbd_idx, &bufAddr, &bufLen);
|
||||
|
||||
#if 0
|
||||
//#ifdef CFG_HAL_DBG
|
||||
|
||||
RT_TRACE_F(COMP_RECV, DBG_TRACE, ("rxbd_idx:0x%lx, bufAddr:0x%lx, phy(bufAddr):0x%lx\n",
|
||||
rxbd_idx, bufAddr, HAL_VIRT_TO_BUS1(Adapter, (PVOID)bufAddr, bufLen, HAL_PCI_DMA_TODEVICE)));
|
||||
|
||||
#endif
|
||||
|
||||
#if 0 //Filen_test
|
||||
if ( _TRUE == bInit ) {
|
||||
SET_DESC_FIELD_CLR(prx_dma->rx_queue[queueIndex].pRXBD_head[rxbd_idx].Dword0,
|
||||
bufLen,
|
||||
RXBD_DW0_RXBUFSIZE_MSK, RXBD_DW0_RXBUFSIZE_SH);
|
||||
}
|
||||
#else
|
||||
SET_DESC_FIELD_CLR(prx_dma->rx_queue[queueIndex].pRXBD_head[rxbd_idx].Dword0,
|
||||
bufLen,
|
||||
RXBD_DW0_RXBUFSIZE_MSK, RXBD_DW0_RXBUFSIZE_SH);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_NET_PCI) && defined(NOT_RTK_BSP)
|
||||
dma_addr = GET_HW(Adapter)->rx_infoL[rxbd_idx].paddr;
|
||||
#else
|
||||
dma_addr = HAL_VIRT_TO_BUS1(Adapter, (PVOID)bufAddr, bufLen, HAL_PCI_DMA_TODEVICE);
|
||||
#endif
|
||||
SET_DESC_FIELD_CLR(prx_dma->rx_queue[queueIndex].pRXBD_head[rxbd_idx].Dword1,
|
||||
dma_addr + CONFIG_LUNA_SLAVE_PHYMEM_OFFSET_HAL,
|
||||
RXBD_DW1_PHYADDR_LOW_MSK, RXBD_DW1_PHYADDR_LOW_SH);
|
||||
|
||||
#if RXBD_READY_CHECK_METHOD
|
||||
if ( _TRUE == bInit ) {
|
||||
SET_DESC_FIELD_CLR(prx_dma->rx_queue[queueIndex].pRXBD_head[rxbd_idx].Dword0,
|
||||
0xFFFF, RXBD_DW0_TOTALRXPKTSIZE_MSK, RXBD_DW0_TOTALRXPKTSIZE_SH);
|
||||
}
|
||||
#else
|
||||
SET_DESC_FIELD_CLR(prx_dma->rx_queue[queueIndex].pRXBD_head[rxbd_idx].Dword0,
|
||||
0, RXBD_DW0_TOTALRXPKTSIZE_MSK, RXBD_DW0_TOTALRXPKTSIZE_SH);
|
||||
#endif //RXBD_READY_CHECK_METHOD
|
||||
|
||||
#ifdef CONFIG_NET_PCI
|
||||
if (HAL_IS_PCIBIOS_TYPE(Adapter)) {
|
||||
HAL_CACHE_SYNC_WBACK(Adapter,
|
||||
prx_dma->rx_queue[queueIndex].rxbd_dma_addr + rxbd_idx * sizeof(RX_BUFFER_DESCRIPTOR),
|
||||
sizeof(RX_BUFFER_DESCRIPTOR), HAL_PCI_DMA_TODEVICE);
|
||||
} else
|
||||
#endif
|
||||
|
||||
#ifdef TRXBD_CACHABLE_REGION
|
||||
_dma_cache_wback((unsigned long)((PVOID)(prx_dma->rx_queue[queueIndex].pRXBD_head + rxbd_idx)-CONFIG_LUNA_SLAVE_PHYMEM_OFFSET), sizeof(RX_BUFFER_DESCRIPTOR));
|
||||
#else
|
||||
HAL_CACHE_SYNC_WBACK(Adapter,
|
||||
HAL_VIRT_TO_BUS1(Adapter, (PVOID)(prx_dma->rx_queue[queueIndex].pRXBD_head + rxbd_idx), sizeof(RX_BUFFER_DESCRIPTOR), HAL_PCI_DMA_TODEVICE),
|
||||
sizeof(RX_BUFFER_DESCRIPTOR), HAL_PCI_DMA_TODEVICE);
|
||||
#endif
|
||||
if ( 0 == GET_DESC(prx_dma->rx_queue[queueIndex].pRXBD_head[rxbd_idx].Dword1) ) {
|
||||
RT_TRACE(COMP_INIT, DBG_SERIOUS, ("Address(0x%lx) Error\n", prx_dma->rx_queue[queueIndex].pRXBD_head[rxbd_idx].Dword1));
|
||||
return RT_STATUS_FAILURE;
|
||||
}
|
||||
|
||||
return RT_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DumpRxPktContent88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte queueIndex //HCI_RX_DMA_QUEUE_88XX
|
||||
)
|
||||
{
|
||||
#if 0
|
||||
PHCI_RX_DMA_MANAGER_88XX prx_dma;
|
||||
PHCI_RX_DMA_QUEUE_STRUCT_88XX cur_q;
|
||||
PRX_DESC_88XX prx_desc;
|
||||
// TODO: no initial value for prx_desc
|
||||
|
||||
prx_dma = (PHCI_RX_DMA_MANAGER_88XX)(_GET_HAL_DATA(Adapter)->PRxDMA88XX);
|
||||
cur_q = &(prx_dma->rx_queue[queueIndex]);
|
||||
|
||||
|
||||
//RXBD
|
||||
RT_TRACE_F(COMP_RECV, DBG_TRACE, ("\n\nRXBD[%ld]:\nDword0=0x%lx, Dword1=0x%lx \n", \
|
||||
(u4Byte)cur_q->cur_host_idx, \
|
||||
(u4Byte)GET_DESC(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword0), \
|
||||
(u4Byte)GET_DESC(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword1) \
|
||||
));
|
||||
|
||||
//RXDESC
|
||||
RT_PRINT_DATA(COMP_RECV, DBG_TRACE, "RXDESC:\n", prx_desc, sizeof(RX_DESC_88XX));
|
||||
|
||||
//PHYStatus
|
||||
RT_PRINT_DATA(COMP_RECV, DBG_TRACE, "PHYStatus:\n", ((pu1Byte)prx_desc + SIZE_RXDESC_88XX), (GET_DESC_FIELD(prx_desc->Dword0, RX_DW0_DRV_INFO_SIZE_MSK, RX_DW0_DRV_INFO_SIZE_SH)<<3) + GET_DESC_FIELD(prx_desc->Dword0, RX_DW0_SHIFT_MSK, RX_DW0_SHIFT_SH));
|
||||
|
||||
//RXPkt
|
||||
RT_PRINT_DATA(COMP_RECV, DBG_TRACE, "Payload:\n", (pu1Byte)prx_desc + SIZE_RXDESC_88XX + (GET_DESC_FIELD(prx_desc->Dword0, RX_DW0_DRV_INFO_SIZE_MSK, RX_DW0_DRV_INFO_SIZE_SH)<<3) + GET_DESC_FIELD(prx_desc->Dword0, RX_DW0_SHIFT_MSK, RX_DW0_SHIFT_SH), \
|
||||
GET_DESC_FIELD(prx_desc->Dword0, RX_DW0_PKT_LEN_MSK, RX_DW0_PKT_LEN_SH));
|
||||
#endif
|
||||
}
|
||||
|
||||
#define RXBD_RXTAG_POLLING_CNT 100
|
||||
#define RXBD_RXTAG_MASK 0x1FFF
|
||||
|
||||
HAL_IMEM
|
||||
RT_STATUS
|
||||
QueryRxDesc88XX (
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte queueIndex, //HCI_RX_DMA_QUEUE_88XX
|
||||
IN pu1Byte pBufAddr,
|
||||
OUT PVOID pRxDescStatus
|
||||
)
|
||||
{
|
||||
BOOLEAN bResult = SUCCESS;
|
||||
u4Byte PollingCnt = 0;
|
||||
PHCI_RX_DMA_MANAGER_88XX prx_dma;
|
||||
PHCI_RX_DMA_QUEUE_STRUCT_88XX cur_q;
|
||||
PRX_DESC_STATUS_88XX prx_desc_status;
|
||||
PRX_DESC_88XX prx_desc;
|
||||
#if CFG_HAL_DBG
|
||||
u4Byte crc32;
|
||||
pu1Byte pFrame;
|
||||
u2Byte frameLen;
|
||||
BOOLEAN bDivisionCRC = _FALSE;
|
||||
u2Byte cnt = 0;
|
||||
u2Byte shift = 0;
|
||||
u1Byte tempByte;
|
||||
u4Byte rx_crc32;
|
||||
#endif
|
||||
|
||||
prx_dma = (PHCI_RX_DMA_MANAGER_88XX)(_GET_HAL_DATA(Adapter)->PRxDMA88XX);
|
||||
cur_q = &(prx_dma->rx_queue[queueIndex]);
|
||||
|
||||
prx_desc_status = (PRX_DESC_STATUS_88XX)pRxDescStatus;
|
||||
#ifdef CONFIG_NET_PCI
|
||||
unsigned long rxbd_dma_addr = cur_q->rxbd_dma_addr + sizeof(RX_BUFFER_DESCRIPTOR)*cur_q->cur_host_idx;
|
||||
#endif
|
||||
|
||||
do {
|
||||
#ifdef CONFIG_NET_PCI
|
||||
if (HAL_IS_PCIBIOS_TYPE(Adapter)) {
|
||||
HAL_CACHE_SYNC_WBACK(Adapter, rxbd_dma_addr, sizeof(RX_BUFFER_DESCRIPTOR), HAL_PCI_DMA_FROMDEVICE);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if RXBD_READY_CHECK_METHOD
|
||||
#ifdef TRXBD_CACHABLE_REGION
|
||||
_dma_cache_inv((unsigned long)((&(cur_q->pRXBD_head[cur_q->cur_host_idx]))-CONFIG_LUNA_SLAVE_PHYMEM_OFFSET),
|
||||
sizeof(RX_BUFFER_DESCRIPTOR));
|
||||
#endif
|
||||
|
||||
if ( cur_q->rxtag_seq_num != GET_DESC_FIELD(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword0, RXBD_DW0_TOTALRXPKTSIZE_MSK, RXBD_DW0_TOTALRXPKTSIZE_SH) ) {
|
||||
RT_TRACE(COMP_RECV, DBG_WARNING, ("Polling failed(cnt: %d), keep trying, DW0(0x%x), RXBDCheckRdySeqNum(0x%x) FS,LS(0x%x,0x%x)\n",
|
||||
PollingCnt,
|
||||
GET_DESC_FIELD(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword0, RXBD_DW0_TOTALRXPKTSIZE_MSK, RXBD_DW0_TOTALRXPKTSIZE_SH),
|
||||
cur_q->rxtag_seq_num,
|
||||
GET_DESC_FIELD(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword0, RXBD_DW0_FS_MSK, RXBD_DW0_FS_SH),
|
||||
GET_DESC_FIELD(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword0, RXBD_DW0_LS_MSK, RXBD_DW0_LS_SH)
|
||||
));
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
#else
|
||||
if (0 == GET_DESC_FIELD(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword0, RXBD_DW0_TOTALRXPKTSIZE_MSK, RXBD_DW0_TOTALRXPKTSIZE_SH)) {
|
||||
RT_TRACE(COMP_RECV, DBG_WARNING, ("Polling failed(cnt: %d), keep trying, DW0(0x%x)\n", PollingCnt, GET_DESC_FIELD(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword0, RXBD_DW0_TOTALRXPKTSIZE_MSK, RXBD_DW0_TOTALRXPKTSIZE_SH)));
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
#endif //RXBD_READY_CHECK_METHOD
|
||||
|
||||
PollingCnt++;
|
||||
//HAL_delay_ms(1);
|
||||
} while(PollingCnt < RXBD_RXTAG_POLLING_CNT);
|
||||
|
||||
|
||||
if ( PollingCnt >= RXBD_RXTAG_POLLING_CNT ) {
|
||||
|
||||
RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Polling failed(0x%x)\n", Adapter->pshare->RxTagPollingCount));
|
||||
|
||||
Adapter->pshare->RxTagPollingCount++;
|
||||
Adapter->pshare->RxTagMismatchCount++;
|
||||
|
||||
#if CFG_HAL_DBG
|
||||
//code below in order to dump packet
|
||||
bResult = FAIL;
|
||||
prx_desc_status->FS = 1;
|
||||
prx_desc_status->LS = 1;
|
||||
goto _RXPKT_DUMP;
|
||||
#else
|
||||
// return RT_STATUS_FAILURE;
|
||||
|
||||
#if RXBD_READY_CHECK_METHOD
|
||||
cur_q->rxtag_seq_num = GET_DESC_FIELD(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword0, RXBD_DW0_TOTALRXPKTSIZE_MSK, RXBD_DW0_TOTALRXPKTSIZE_SH);
|
||||
#endif
|
||||
#endif //#if CFG_HAL_DBG
|
||||
|
||||
}
|
||||
else {
|
||||
Adapter->pshare->RxTagPollingCount=0;
|
||||
}
|
||||
#if RXBD_READY_CHECK_METHOD
|
||||
cur_q->rxtag_seq_num++;
|
||||
cur_q->rxtag_seq_num &= RXBD_RXTAG_MASK;
|
||||
#endif //#if RXBD_READY_CHECK_METHOD
|
||||
|
||||
|
||||
#if 0
|
||||
//Cache flush for current RXDESC, becuase we don't flush rxdesc in some cases. ex. memory allocate fail then reuse
|
||||
// TODO: move to other better place
|
||||
HAL_CACHE_SYNC_WBACK(Adapter,
|
||||
HAL_VIRT_TO_BUS1(Adapter, (PVOID)prx_desc, sizeof(RX_DESC_88XX), HAL_PCI_DMA_TODEVICE),
|
||||
sizeof(RX_DESC_88XX), HAL_PCI_DMA_TODEVICE);
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
HAL_CACHE_SYNC_WBACK(Adapter,
|
||||
HAL_VIRT_TO_BUS1(Adapter, (PVOID)(prx_desc), 2048, HAL_PCI_DMA_TODEVICE),
|
||||
2048, HAL_PCI_DMA_TODEVICE);
|
||||
#endif
|
||||
|
||||
|
||||
// get rxbd
|
||||
prx_desc_status->FS = GET_DESC_FIELD(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword0,
|
||||
RXBD_DW0_FS_MSK, RXBD_DW0_FS_SH);
|
||||
prx_desc_status->LS = GET_DESC_FIELD(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword0,
|
||||
RXBD_DW0_LS_MSK, RXBD_DW0_LS_SH);
|
||||
prx_desc_status->RXBuffSize = GET_DESC_FIELD(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword0,
|
||||
RXBD_DW0_RXBUFSIZE_MSK, RXBD_DW0_RXBUFSIZE_SH);
|
||||
|
||||
if ( prx_desc_status->FS==0x01 ) {
|
||||
#ifdef CONFIG_NET_PCI
|
||||
if (HAL_IS_PCIBIOS_TYPE(Adapter)) {
|
||||
HAL_CACHE_SYNC_WBACK(Adapter, GET_HW(Adapter)->rx_infoL[cur_q->cur_host_idx].paddr, sizeof(RX_DESC_88XX), HAL_PCI_DMA_FROMDEVICE);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef TRXBD_CACHABLE_REGION
|
||||
_dma_cache_inv((unsigned long)(pBufAddr-CONFIG_LUNA_SLAVE_PHYMEM_OFFSET), sizeof(RX_DESC_88XX));
|
||||
#endif
|
||||
prx_desc = (PRX_DESC_88XX)pBufAddr;
|
||||
// get rx desc
|
||||
prx_desc_status->PKT_LEN = GET_DESC_FIELD(prx_desc->Dword0, RX_DW0_PKT_LEN_MSK, RX_DW0_PKT_LEN_SH);
|
||||
prx_desc_status->CRC32 = GET_DESC_FIELD(prx_desc->Dword0, RX_DW0_CRC32_MSK, RX_DW0_CRC32_SH);
|
||||
prx_desc_status->ICVERR = GET_DESC_FIELD(prx_desc->Dword0, RX_DW0_ICVERR_MSK, RX_DW0_ICVERR_SH);
|
||||
prx_desc_status->DRV_INFO_SIZE = GET_DESC_FIELD(prx_desc->Dword0, RX_DW0_DRV_INFO_SIZE_MSK, RX_DW0_DRV_INFO_SIZE_SH)<<3;
|
||||
prx_desc_status->SHIFT = GET_DESC_FIELD(prx_desc->Dword0, RX_DW0_SHIFT_MSK, RX_DW0_SHIFT_SH);
|
||||
prx_desc_status->PHYST = GET_DESC_FIELD(prx_desc->Dword0, RX_DW0_PHYST_MSK, RX_DW0_PHYST_SH);
|
||||
prx_desc_status->SWDEC = GET_DESC_FIELD(prx_desc->Dword0, RX_DW0_SWDEC_MSK, RX_DW0_SWDEC_SH);
|
||||
prx_desc_status->PAGGR = GET_DESC_FIELD(prx_desc->Dword1, RX_DW1_PAGGR_MSK, RX_DW1_PAGGR_SH);
|
||||
prx_desc_status->C2HPkt = GET_DESC_FIELD(prx_desc->Dword2, RX_DW2_C2HPKT_MSK, RX_DW2_C2HPKT_SH);
|
||||
prx_desc_status->RX_RATE = GET_DESC_FIELD(prx_desc->Dword3, RX_DW3_RX_RATE_MSK, RX_DW3_RX_RATE_SH);
|
||||
|
||||
#if (IS_RTL8192E_SERIES || IS_RTL8881A_SERIES)
|
||||
if (IS_HARDWARE_TYPE_8192E(Adapter) || IS_HARDWARE_TYPE_8881A(Adapter)) {
|
||||
prx_desc_status->OFDM_SGI = GET_DESC_FIELD(prx_desc->Dword4, RX_DW4_OFDM_SGI_MSK, RX_DW4_OFDM_SGI_SH);
|
||||
}
|
||||
#endif //#if (IS_RTL8192E_SERIES || IS_RTL8881A_SERIES)
|
||||
|
||||
prx_desc_status->BW = GET_DESC_FIELD(prx_desc->Dword4, RX_DW4_BW_MSK, RX_DW4_BW_SH);
|
||||
#if CFG_HAL_HW_FILL_MACID
|
||||
if (IS_HARDWARE_TYPE_8814A(Adapter)) {
|
||||
prx_desc_status->rxMACID = GET_DESC_FIELD(prx_desc->Dword4, RX_DW4_MACID_MSK, RX_DW4_MACID_SH);
|
||||
}
|
||||
#endif //#if IS_RTL8814A_SERIES
|
||||
|
||||
#if 0 //CFG_HAL_DBG
|
||||
RT_TRACE_F(COMP_RECV, DBG_TRACE, ("pBufAddr: 0x%lx\n", (u4Byte)pBufAddr));
|
||||
|
||||
RT_TRACE_F(COMP_RECV, DBG_TRACE, ("RXBuffSize: 0x%lx, fs,ls:(0x%lx,0x%lx), PKT_LEN:0x%lx, DRV_INFO:0x%lx, SHIFT:0x%lx\n", \
|
||||
prx_desc_status->RXBuffSize, prx_desc_status->FS, prx_desc_status->LS, \
|
||||
prx_desc_status->PKT_LEN, prx_desc_status->DRV_INFO_SIZE, prx_desc_status->SHIFT));
|
||||
#endif
|
||||
}
|
||||
|
||||
_RXPKT_DUMP:
|
||||
|
||||
#if 0 // CFG_HAL_DBG
|
||||
//RXBD
|
||||
RT_TRACE_F(COMP_RECV, DBG_TRACE, ("RXBD[%ld]:\nDword0=0x%lx, Dword1=0x%lx \n",
|
||||
(u4Byte)cur_q->cur_host_idx,
|
||||
(u4Byte)GET_DESC(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword0),
|
||||
(u4Byte)GET_DESC(cur_q->pRXBD_head[cur_q->cur_host_idx].Dword1)
|
||||
));
|
||||
|
||||
if ( prx_desc_status->FS==0x01 && prx_desc_status->LS==0x01 ) {
|
||||
//RXDESC
|
||||
RT_PRINT_DATA(COMP_RECV, DBG_TRACE, "RXDESC:(FS=1 & LS=1)\n", prx_desc, sizeof(RX_DESC_88XX));
|
||||
|
||||
//PHYStatus
|
||||
// RT_PRINT_DATA(COMP_RECV, DBG_TRACE, "PHYStatus:\n", ((pu1Byte)prx_desc + SIZE_RXDESC_88XX), prx_desc_status->DRV_INFO_SIZE + prx_desc_status->SHIFT);
|
||||
|
||||
//RXPkt
|
||||
pFrame = (pu1Byte)prx_desc + SIZE_RXDESC_88XX + prx_desc_status->DRV_INFO_SIZE + prx_desc_status->SHIFT;
|
||||
RT_PRINT_DATA(COMP_RECV, DBG_TRACE, "Payload:\n", pFrame, prx_desc_status->PKT_LEN);
|
||||
|
||||
#if 0
|
||||
crc32 = 0;
|
||||
SoftwareCRC32(pFrame, prx_desc_status->PKT_LEN - _CRCLNG_, &crc32);
|
||||
|
||||
if (HAL_memcmp(pFrame + prx_desc_status->PKT_LEN - _CRCLNG_, (PVOID)&crc32, _CRCLNG_)) {
|
||||
RT_TRACE_F(COMP_RECV, DBG_WARNING, ("SW CRC32 error. 0x%lx\n", crc32));
|
||||
} else {
|
||||
RT_TRACE_F(COMP_RECV, DBG_TRACE, ("SW CRC32 ok. 0x%lx\n", crc32) );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else if ( prx_desc_status->FS==0x01 && prx_desc_status->LS==0x0 ) {
|
||||
//RXDESC
|
||||
RT_PRINT_DATA(COMP_RECV, DBG_TRACE, "RXDESC:(FS=1 & LS=0)\n", prx_desc, sizeof(RX_DESC_88XX));
|
||||
|
||||
//PHYStatus
|
||||
RT_PRINT_DATA(COMP_RECV, DBG_TRACE, "PHYStatus:\n", ((pu1Byte)prx_desc + SIZE_RXDESC_88XX), prx_desc_status->DRV_INFO_SIZE + prx_desc_status->SHIFT);
|
||||
|
||||
//Partial RXPkt
|
||||
pFrame = (pu1Byte)prx_desc + SIZE_RXDESC_88XX + prx_desc_status->DRV_INFO_SIZE + prx_desc_status->SHIFT;
|
||||
frameLen = prx_desc_status->RXBuffSize - SIZE_RXDESC_88XX - prx_desc_status->DRV_INFO_SIZE - prx_desc_status->SHIFT;
|
||||
RT_PRINT_DATA(COMP_RECV, DBG_TRACE, "Payload:\n", pFrame, frameLen);
|
||||
|
||||
prx_desc_status->pktNum = 0;
|
||||
prx_desc_status->pktBufAddr[prx_desc_status->pktNum] = pFrame;
|
||||
prx_desc_status->pktBufLen[prx_desc_status->pktNum] = frameLen;
|
||||
RT_TRACE_F(COMP_RECV, DBG_TRACE, ("pktBufLen[0x%lx]:0x%lx,%d\n", \
|
||||
prx_desc_status->pktNum, prx_desc_status->pktBufLen[prx_desc_status->pktNum], prx_desc_status->pktBufLen[prx_desc_status->pktNum]) );
|
||||
prx_desc_status->pktNum++;
|
||||
prx_desc_status->remaining_pkt_len = SIZE_RXDESC_88XX + prx_desc_status->DRV_INFO_SIZE + prx_desc_status->SHIFT + \
|
||||
prx_desc_status->PKT_LEN - prx_desc_status->RXBuffSize;
|
||||
}
|
||||
else if ( prx_desc_status->FS==0x0 && prx_desc_status->LS==0x0 ) {
|
||||
// No RXDESC
|
||||
//Partial RXPkt
|
||||
RT_PRINT_DATA(COMP_RECV, DBG_TRACE, "Payload:(FS=0 & LS=0)\n", (pu1Byte)pBufAddr, prx_desc_status->RXBuffSize);
|
||||
|
||||
prx_desc_status->pktBufAddr[prx_desc_status->pktNum] = pBufAddr;
|
||||
prx_desc_status->pktBufLen[prx_desc_status->pktNum] = prx_desc_status->RXBuffSize;
|
||||
RT_TRACE_F(COMP_RECV, DBG_TRACE, ("pktBufLen[0x%lx]:0x%lx,%d\n", \
|
||||
prx_desc_status->pktNum, prx_desc_status->pktBufLen[prx_desc_status->pktNum], prx_desc_status->pktBufLen[prx_desc_status->pktNum]) );
|
||||
prx_desc_status->pktNum++;
|
||||
|
||||
prx_desc_status->remaining_pkt_len -= prx_desc_status->RXBuffSize;
|
||||
}
|
||||
else if ( prx_desc_status->FS==0x0 && prx_desc_status->LS==0x1 ) {
|
||||
// No RXDESC
|
||||
//Partial RXPkt
|
||||
|
||||
RT_PRINT_DATA(COMP_RECV, DBG_TRACE, "Payload:(FS=0 & LS=1)\n", (pu1Byte)pBufAddr, prx_desc_status->remaining_pkt_len);
|
||||
|
||||
prx_desc_status->pktBufAddr[prx_desc_status->pktNum] = pBufAddr;
|
||||
prx_desc_status->pktBufLen[prx_desc_status->pktNum] = prx_desc_status->remaining_pkt_len;
|
||||
RT_TRACE_F(COMP_RECV, DBG_TRACE, ("pktBufLen[0x%lx]:0x%lx,%d\n", \
|
||||
prx_desc_status->pktNum, prx_desc_status->pktBufLen[prx_desc_status->pktNum], prx_desc_status->pktBufLen[prx_desc_status->pktNum]) );
|
||||
|
||||
prx_desc_status->pktNum++;
|
||||
crc32 = 0;
|
||||
|
||||
// for special case: CRC in last one and two packets...
|
||||
if (prx_desc_status->pktBufLen[prx_desc_status->pktNum-1] < _CRCLNG_) {
|
||||
prx_desc_status->pktBufLen[prx_desc_status->pktNum-2] = prx_desc_status->pktBufLen[prx_desc_status->pktNum-2] + prx_desc_status->pktBufLen[prx_desc_status->pktNum-1] - _CRCLNG_;
|
||||
prx_desc_status->pktBufLen[prx_desc_status->pktNum-1] = 0;
|
||||
bDivisionCRC = _TRUE;
|
||||
printk("special case: CRC in last one and two packets.\n");
|
||||
} else {
|
||||
prx_desc_status->pktBufLen[prx_desc_status->pktNum-1] -= _CRCLNG_;
|
||||
}
|
||||
|
||||
SoftwareCRC32_RXBuffGather(&(prx_desc_status->pktBufAddr[0]), &(prx_desc_status->pktBufLen[0]), prx_desc_status->pktNum, &crc32);
|
||||
|
||||
if (bDivisionCRC == _TRUE) {
|
||||
while(cnt < (_CRCLNG_ - prx_desc_status->remaining_pkt_len)) {
|
||||
tempByte = *((pu1Byte)prx_desc_status->pktBufAddr[prx_desc_status->pktNum-2] + \
|
||||
prx_desc_status->pktBufLen[prx_desc_status->pktNum-2] + cnt);
|
||||
HAL_memcpy((pu1Byte)&rx_crc32+shift, (pu1Byte)&tempByte, sizeof(tempByte));
|
||||
cnt++;
|
||||
shift++;
|
||||
}
|
||||
|
||||
cnt = 0;
|
||||
while(cnt < prx_desc_status->remaining_pkt_len) {
|
||||
tempByte = *((pu1Byte)prx_desc_status->pktBufAddr[prx_desc_status->pktNum-1] + cnt);
|
||||
HAL_memcpy((pu1Byte)&rx_crc32+shift, (pu1Byte)&tempByte, sizeof(tempByte));
|
||||
cnt++;
|
||||
shift++;
|
||||
}
|
||||
|
||||
if ( HAL_memcmp( (PVOID)&rx_crc32, (PVOID)&crc32, _CRCLNG_) ) {
|
||||
RT_TRACE_F(COMP_RECV, DBG_WARNING, ("SW CRC32 error in division case. 0x%lx\n", crc32));
|
||||
} else {
|
||||
RT_TRACE_F(COMP_RECV, DBG_TRACE, ("SW CRC32 ok in division case. 0x%lx\n", crc32) );
|
||||
}
|
||||
} else {
|
||||
if (HAL_memcmp(pBufAddr + prx_desc_status->remaining_pkt_len - _CRCLNG_, (PVOID)&crc32, _CRCLNG_)) {
|
||||
RT_TRACE_F(COMP_RECV, DBG_WARNING, ("SW CRC32 error. 0x%lx\n", crc32));
|
||||
} else {
|
||||
RT_TRACE_F(COMP_RECV, DBG_TRACE, ("SW CRC32 ok. 0x%lx\n", crc32) );
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if ( SUCCESS == bResult ) {
|
||||
#ifdef TRXBD_CACHABLE_REGION
|
||||
_dma_cache_inv((unsigned long)( (pBufAddr)-CONFIG_LUNA_SLAVE_PHYMEM_OFFSET),
|
||||
sizeof(RX_DESC_88XX) + prx_desc_status->DRV_INFO_SIZE + prx_desc_status->SHIFT + prx_desc_status->PKT_LEN);
|
||||
#endif
|
||||
return RT_STATUS_SUCCESS;
|
||||
}
|
||||
else {
|
||||
return RT_STATUS_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
HAL_IMEM
|
||||
u2Byte
|
||||
UpdateRXBDHWIdx88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte queueIndex //HCI_RX_DMA_QUEUE_88XX
|
||||
)
|
||||
{
|
||||
PHCI_RX_DMA_MANAGER_88XX prx_dma;
|
||||
PHCI_RX_DMA_QUEUE_STRUCT_88XX cur_q;
|
||||
|
||||
prx_dma = (PHCI_RX_DMA_MANAGER_88XX)(_GET_HAL_DATA(Adapter)->PRxDMA88XX);
|
||||
cur_q = &(prx_dma->rx_queue[queueIndex]);
|
||||
|
||||
cur_q->hw_idx = HAL_RTL_R16(cur_q->reg_rwptr_idx + 2) & 0xFFF;
|
||||
|
||||
return cur_q->hw_idx;
|
||||
}
|
||||
|
||||
HAL_IMEM
|
||||
VOID
|
||||
UpdateRXBDHostIdx88XX (
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte queueIndex, //HCI_RX_DMA_QUEUE_88XX
|
||||
IN u4Byte count
|
||||
)
|
||||
{
|
||||
PHCI_RX_DMA_MANAGER_88XX prx_dma;
|
||||
PHCI_RX_DMA_QUEUE_STRUCT_88XX cur_q;
|
||||
|
||||
prx_dma = (PHCI_RX_DMA_MANAGER_88XX)(_GET_HAL_DATA(Adapter)->PRxDMA88XX);
|
||||
cur_q = &(prx_dma->rx_queue[queueIndex]);
|
||||
|
||||
if ( 0 != count ) {
|
||||
cur_q->host_idx = (cur_q->host_idx + count) % cur_q->total_rxbd_num;
|
||||
HAL_RTL_W16(cur_q->reg_rwptr_idx, (cur_q->host_idx & 0xFFF));
|
||||
|
||||
// RT_TRACE_F(COMP_RECV, DBG_TRACE, ("host_idx:0x%lx\n", cur_q->host_idx));
|
||||
}
|
||||
else {
|
||||
// RT_TRACE_F(COMP_RECV, DBG_LOUD, ("count = 0\n"));
|
||||
}
|
||||
}
|
||||
|
||||
#endif // (HAL_DEV_BUS_TYPE & (HAL_RT_EMBEDDED_INTERFACE | HAL_RT_PCI_INTERFACE))
|
||||
|
||||
|
165
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXRxDesc.h
Executable file
165
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXRxDesc.h
Executable file
@ -0,0 +1,165 @@
|
||||
#ifndef __HAL88XXRXDESC_H__
|
||||
#define __HAL88XXRXDESC_H__
|
||||
|
||||
#if defined(_PC_) || defined(_PUMA6_)
|
||||
#ifdef FS
|
||||
#undef FS
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef struct _RX_DESC_88XX_
|
||||
{
|
||||
volatile u4Byte Dword0;
|
||||
volatile u4Byte Dword1;
|
||||
volatile u4Byte Dword2;
|
||||
volatile u4Byte Dword3;
|
||||
volatile u4Byte Dword4;
|
||||
volatile u4Byte Dword5;
|
||||
} RX_DESC_88XX, *PRX_DESC_88XX;
|
||||
|
||||
#define SIZE_RXDESC_88XX 24
|
||||
|
||||
typedef enum _HCI_RX_DMA_QUEUE_88XX_
|
||||
{
|
||||
HCI_RX_DMA_QUEUE_Q0 = 0,
|
||||
HCI_RX_DMA_QUEUE_MAX_NUM
|
||||
} HCI_RX_DMA_QUEUE_88XX, *PHCI_RX_DMA_QUEUE_88XX;
|
||||
|
||||
typedef struct _RX_BUFFER_DESCRIPTOR_
|
||||
{
|
||||
u4Byte Dword0;
|
||||
u4Byte Dword1;
|
||||
#if TXBD_SEG_32_64_SEL
|
||||
u4Byte Dword2;
|
||||
u4Byte Dword3;
|
||||
#endif
|
||||
} RX_BUFFER_DESCRIPTOR, *PRX_BUFFER_DESCRIPTOR;
|
||||
|
||||
typedef struct _HCI_RX_DMA_QUEUE_STRUCT_88XX_
|
||||
{
|
||||
PRX_BUFFER_DESCRIPTOR pRXBD_head;
|
||||
#ifdef CONFIG_NET_PCI
|
||||
unsigned long rxbd_dma_addr;
|
||||
#endif
|
||||
|
||||
u2Byte hw_idx; //Mapping to HW register
|
||||
u2Byte host_idx; //Mapping to HW register
|
||||
//Special case:
|
||||
// If we can't allocate a new SKB(RXDESC+Payload) to mapping RXBD,
|
||||
// we still need to maintain a pointer in order to recieve RxPkt continuously
|
||||
u2Byte cur_host_idx; // the index to indicate the next location that we have received RxPkt
|
||||
|
||||
#if CFG_HAL_DELAY_REFILL_RX_BUF
|
||||
u2Byte rxbd_ok_cnt;
|
||||
#endif
|
||||
|
||||
u2Byte total_rxbd_num;
|
||||
u2Byte avail_rxbd_num;
|
||||
u4Byte reg_rwptr_idx;
|
||||
#if RXBD_READY_CHECK_METHOD
|
||||
// reset signal from 0x100[1], CR[HCI_RXDMA_EN]
|
||||
u2Byte rxtag_seq_num;
|
||||
#endif
|
||||
} HCI_RX_DMA_QUEUE_STRUCT_88XX, *PHCI_RX_DMA_QUEUE_STRUCT_88XX;
|
||||
|
||||
typedef struct _HCI_RX_DMA_MANAGER_88XX_
|
||||
{
|
||||
HCI_RX_DMA_QUEUE_STRUCT_88XX rx_queue[HCI_RX_DMA_QUEUE_MAX_NUM];
|
||||
} HCI_RX_DMA_MANAGER_88XX, *PHCI_RX_DMA_MANAGER_88XX;
|
||||
|
||||
typedef struct _RX_DESC_STATUS_88XX_
|
||||
{
|
||||
// RXBD
|
||||
BOOLEAN FS;
|
||||
BOOLEAN LS;
|
||||
u2Byte RXBuffSize;
|
||||
|
||||
#if CFG_HAL_DBG
|
||||
u2Byte remaining_pkt_len;
|
||||
u4Byte pktBufAddr[32];
|
||||
u2Byte pktBufLen[32];
|
||||
u2Byte pktNum;
|
||||
#endif
|
||||
|
||||
//4 Note: value below Only valid in FS=1
|
||||
// Dword0
|
||||
u2Byte PKT_LEN;
|
||||
BOOLEAN CRC32;
|
||||
BOOLEAN ICVERR;
|
||||
u1Byte DRV_INFO_SIZE;
|
||||
u1Byte SECURITY;
|
||||
u1Byte SHIFT;
|
||||
BOOLEAN PHYST;
|
||||
BOOLEAN SWDEC;
|
||||
BOOLEAN EOR;
|
||||
|
||||
// Dword 1
|
||||
BOOLEAN PAGGR;
|
||||
|
||||
// Dword 2
|
||||
BOOLEAN C2HPkt;
|
||||
|
||||
// Dowrd 3
|
||||
u1Byte RX_RATE;
|
||||
|
||||
// Dword 4
|
||||
BOOLEAN OFDM_SGI;
|
||||
BOOLEAN CCK_SPLCP;
|
||||
BOOLEAN LDPC;
|
||||
BOOLEAN STBC;
|
||||
BOOLEAN NOT_SOUNDING;
|
||||
u1Byte BW;
|
||||
#if CFG_HAL_HW_FILL_MACID
|
||||
u1Byte rxMACID;
|
||||
#endif
|
||||
} RX_DESC_STATUS_88XX, *PRX_DESC_STATUS_88XX;
|
||||
|
||||
RT_STATUS
|
||||
QueryRxDesc88XX (
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte queueIndex,
|
||||
IN pu1Byte pBufAddr,
|
||||
OUT PVOID pRxDescStatus
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
UpdateRXBDInfo88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte queueIndex, //HCI_RX_DMA_QUEUE_88XX
|
||||
IN u2Byte rxbd_idx,
|
||||
IN pu1Byte pBuf,
|
||||
IN PVOID Callback, // callback function
|
||||
IN BOOLEAN bInit
|
||||
);
|
||||
|
||||
u2Byte
|
||||
UpdateRXBDHWIdx88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte queueIndex
|
||||
);
|
||||
|
||||
VOID
|
||||
UpdateRXBDHostIdx88XX (
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte queueIndex, //HCI_TX_DMA_QUEUE_88XX
|
||||
IN u4Byte Count
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
PrepareRXBD88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u2Byte bufferLen,
|
||||
IN PVOID Callback // callback function
|
||||
);
|
||||
|
||||
void DumpRxBDesc88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
#ifdef CONFIG_RTL_PROC_NEW
|
||||
IN struct seq_file *s,
|
||||
#endif
|
||||
IN u4Byte q_num
|
||||
);
|
||||
|
||||
#endif //#ifndef __HAL88XXRXDESC_H__
|
||||
|
||||
|
2239
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXTxDesc.c
Executable file
2239
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXTxDesc.c
Executable file
File diff suppressed because it is too large
Load Diff
333
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXTxDesc.h
Executable file
333
wlan/8192es/DriverSrcPkg/Driver/rtl8192cd_92es/WlanHAL/RTL88XX/Hal88XXTxDesc.h
Executable file
@ -0,0 +1,333 @@
|
||||
#ifndef __HAL88XX_TXDESC_H__
|
||||
#define __HAL88XX_TXDESC_H__
|
||||
|
||||
typedef struct _TX_DESC_88XX_
|
||||
{
|
||||
volatile u4Byte Dword0;
|
||||
volatile u4Byte Dword1;
|
||||
volatile u4Byte Dword2;
|
||||
volatile u4Byte Dword3;
|
||||
volatile u4Byte Dword4;
|
||||
volatile u4Byte Dword5;
|
||||
volatile u4Byte Dword6;
|
||||
volatile u4Byte Dword7;
|
||||
volatile u4Byte Dword8;
|
||||
volatile u4Byte Dword9;
|
||||
} TX_DESC_88XX, *PTX_DESC_88XX;
|
||||
|
||||
#define SIZE_TXDESC_88XX 40
|
||||
|
||||
typedef enum _HCI_TX_DMA_QUEUE_88XX_
|
||||
{
|
||||
//MGT
|
||||
HCI_TX_DMA_QUEUE_MGT = 0,
|
||||
|
||||
//QoS
|
||||
HCI_TX_DMA_QUEUE_BK,
|
||||
HCI_TX_DMA_QUEUE_BE,
|
||||
HCI_TX_DMA_QUEUE_VI,
|
||||
HCI_TX_DMA_QUEUE_VO,
|
||||
|
||||
//HI
|
||||
HCI_TX_DMA_QUEUE_HI0,
|
||||
HCI_TX_DMA_QUEUE_HI1,
|
||||
HCI_TX_DMA_QUEUE_HI2,
|
||||
HCI_TX_DMA_QUEUE_HI3,
|
||||
HCI_TX_DMA_QUEUE_HI4,
|
||||
HCI_TX_DMA_QUEUE_HI5,
|
||||
HCI_TX_DMA_QUEUE_HI6,
|
||||
HCI_TX_DMA_QUEUE_HI7,
|
||||
|
||||
// Beacon
|
||||
HCI_TX_DMA_QUEUE_BCN,
|
||||
|
||||
HCI_TX_DMA_QUEUE_MAX_NUM //14
|
||||
} HCI_TX_DMA_QUEUE_88XX, *PHCI_TX_DMA_QUEUE_88XX;
|
||||
|
||||
#if 0
|
||||
// TODO: endian....
|
||||
#ifdef _BIG_ENDIAN_
|
||||
typedef struct _TXBD_ELEMENT_DW0_
|
||||
{
|
||||
u4Byte Rsvd_31 :1;
|
||||
u4Byte PsbLen :15;
|
||||
u4Byte Rsvd_14_15 :2;
|
||||
u4Byte Len :14;
|
||||
} TXBD_ELEMENT_DW0,*PTXBD_ELEMENT_DW0;
|
||||
|
||||
typedef struct _TXBD_ELEMENT_DW_
|
||||
{
|
||||
u4Byte AmpduEn :1;
|
||||
u4Byte Rsvd16To30 :15;
|
||||
u4Byte Len :16;
|
||||
} TXBD_ELEMENT_DW,*PTXBD_ELEMENT_DW;
|
||||
#else // _LITTLE_ENDIAN_
|
||||
typedef struct _TXBD_ELEMENT_DW0_
|
||||
{
|
||||
u4Byte Len :14;
|
||||
u4Byte Rsvd_14_15 :2;
|
||||
u4Byte PsbLen :15;
|
||||
u4Byte Rsvd_31 :1;
|
||||
} TXBD_ELEMENT_DW0,*PTXBD_ELEMENT_DW0;
|
||||
|
||||
typedef struct _TXBD_ELEMENT_DW_
|
||||
{
|
||||
u4Byte Len :16;
|
||||
u4Byte Rsvd16To30 :15;
|
||||
u4Byte AmpduEn :1;
|
||||
} TXBD_ELEMENT_DW,*PTXBD_ELEMENT_DW;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef struct _TXBD_ELEMENT_
|
||||
{
|
||||
u4Byte Dword0;
|
||||
u4Byte Dword1;
|
||||
#if TXBD_SEG_32_64_SEL
|
||||
u4Byte Dword2;
|
||||
u4Byte Dword3;
|
||||
#endif //TXBD_SEG_32_64_SEL
|
||||
} TXBD_ELEMENT,*PTXBD_ELEMENT;
|
||||
|
||||
typedef struct _TX_BUFFER_DESCRIPTOR_
|
||||
{
|
||||
TXBD_ELEMENT TXBD_ELE[TXBD_ELE_NUM];
|
||||
} TX_BUFFER_DESCRIPTOR, *PTX_BUFFER_DESCRIPTOR;
|
||||
|
||||
typedef struct _HCI_TX_DMA_QUEUE_STRUCT_88XX_
|
||||
{
|
||||
//TXBD
|
||||
PTX_BUFFER_DESCRIPTOR pTXBD_head;
|
||||
|
||||
//TXBD Queue management
|
||||
u2Byte hw_idx;
|
||||
u2Byte host_idx;
|
||||
|
||||
//Two Method:
|
||||
// 1.) TXDESC Only
|
||||
// 2.) TXDESC + Payload
|
||||
PVOID ptx_desc_head;
|
||||
u2Byte total_txbd_num;
|
||||
u2Byte avail_txbd_num;
|
||||
|
||||
// RWPtr IDX Reg
|
||||
u4Byte reg_rwptr_idx;
|
||||
} HCI_TX_DMA_QUEUE_STRUCT_88XX, *PHCI_TX_DMA_QUEUE_STRUCT_88XX;
|
||||
|
||||
typedef struct _HCI_TX_DMA_MANAGER_88XX_
|
||||
{
|
||||
HCI_TX_DMA_QUEUE_STRUCT_88XX tx_queue[HCI_TX_DMA_QUEUE_MAX_NUM];
|
||||
} HCI_TX_DMA_MANAGER_88XX, *PHCI_TX_DMA_MANAGER_88XX;
|
||||
|
||||
//typedef struct _TXBD_INFO_
|
||||
//{
|
||||
// u4Byte Length;
|
||||
// u4Byte AddrLow;
|
||||
//} TXBD_INFO_88XX, *PTXBD_INFO_88XX;
|
||||
|
||||
typedef struct _TX_DESC_DATA_88XX_
|
||||
{
|
||||
// header
|
||||
pu1Byte pHdr;
|
||||
u4Byte hdrLen;
|
||||
u4Byte llcLen;
|
||||
|
||||
// frame
|
||||
pu1Byte pBuf;
|
||||
u4Byte frLen;
|
||||
|
||||
// encryption
|
||||
pu1Byte pMic;
|
||||
pu1Byte pIcv;
|
||||
|
||||
// TXDESC Dword 1
|
||||
u4Byte rateId;
|
||||
u1Byte macId;
|
||||
u1Byte tid;
|
||||
BOOLEAN moreData;
|
||||
|
||||
// TXDESC Dword 2
|
||||
BOOLEAN aggEn;
|
||||
u1Byte ampduDensity;
|
||||
BOOLEAN frag;
|
||||
BOOLEAN bk;
|
||||
u4Byte p_aid;
|
||||
BOOLEAN g_id;
|
||||
#if CFG_HAL_HW_AES_IV
|
||||
BOOLEAN hwAESIv;
|
||||
#endif
|
||||
|
||||
// TXDESC Dword 3
|
||||
BOOLEAN RTSEn;
|
||||
BOOLEAN HWRTSEn;
|
||||
BOOLEAN CTS2Self;
|
||||
BOOLEAN useRate;
|
||||
BOOLEAN disRTSFB;
|
||||
BOOLEAN disDataFB;
|
||||
u1Byte maxAggNum;
|
||||
BOOLEAN navUseHdr;
|
||||
BOOLEAN ndpa;
|
||||
|
||||
// TXDESC Dword 4
|
||||
u1Byte RTSRate;
|
||||
u1Byte RTSRateFBLmt;
|
||||
u1Byte dataRate;
|
||||
BOOLEAN rtyLmtEn;
|
||||
u1Byte dataRtyLmt;
|
||||
u1Byte dataRateFBLmt;
|
||||
|
||||
// TXDESC Dword 5
|
||||
u1Byte dataBW;
|
||||
u1Byte dataSC;
|
||||
u1Byte RTSSC;
|
||||
u1Byte dataStbc;
|
||||
u1Byte dataLdpc;
|
||||
u1Byte dataShort;
|
||||
u1Byte RTSShort;
|
||||
u1Byte TXPowerOffset;
|
||||
u1Byte TXAnt;
|
||||
#if (CFG_HAL_HW_TX_SHORTCUT_REUSE_TXDESC || CFG_HAL_HW_TX_SHORTCUT_HDR_CONV)
|
||||
// TXDESC Dword 8
|
||||
BOOLEAN smhEn;
|
||||
BOOLEAN stwEn;
|
||||
BOOLEAN stwAntDis;
|
||||
BOOLEAN stwRateDis;
|
||||
BOOLEAN stwRbDis;
|
||||
BOOLEAN stwPktReDis;
|
||||
BOOLEAN macCp;
|
||||
BOOLEAN txwifiCp;
|
||||
#endif
|
||||
|
||||
// encrypt
|
||||
u4Byte iv;
|
||||
u4Byte icv;
|
||||
u4Byte mic;
|
||||
u4Byte secType;
|
||||
BOOLEAN swCrypt;
|
||||
|
||||
} TX_DESC_DATA_88XX, *PTX_DESC_DATA_88XX;
|
||||
|
||||
VOID
|
||||
TxPolling88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u1Byte QueueIndex
|
||||
);
|
||||
|
||||
VOID
|
||||
SigninBeaconTXBD88XX
|
||||
(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN pu4Byte beaconbuf,
|
||||
IN u2Byte frlen
|
||||
);
|
||||
|
||||
VOID
|
||||
SetBeaconDownload88XX (
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte Value
|
||||
);
|
||||
|
||||
u2Byte
|
||||
GetTxQueueHWIdx88XX
|
||||
(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte q_num //enum _TX_QUEUE_
|
||||
);
|
||||
|
||||
BOOLEAN
|
||||
FillTxHwCtrl88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte queueIndex, //HCI_TX_DMA_QUEUE_88XX
|
||||
IN PVOID pDescData
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
SyncSWTXBDHostIdxToHW88XX (
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte queueIndex //HCI_TX_DMA_QUEUE_88XX
|
||||
);
|
||||
|
||||
BOOLEAN
|
||||
QueryTxConditionMatch88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
PrepareTXBD88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
VOID
|
||||
FillBeaconDesc88XX
|
||||
(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN PVOID _pdesc,
|
||||
IN PVOID data_content,
|
||||
IN u2Byte txLength,
|
||||
IN BOOLEAN bForceUpdate
|
||||
);
|
||||
|
||||
VOID
|
||||
GetBeaconTXBDTXDESC88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
OUT PTX_BUFFER_DESCRIPTOR *pTXBD,
|
||||
OUT PTX_DESC_88XX *ptx_desc
|
||||
);
|
||||
|
||||
#if CFG_HAL_TX_SHORTCUT
|
||||
#if 0
|
||||
PVOID
|
||||
GetShortCutTxDesc88XX(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
VOID
|
||||
ReleaseShortCutTxDesc88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN PVOID pTxDesc
|
||||
);
|
||||
#endif
|
||||
|
||||
VOID
|
||||
SetShortCutTxBuffSize88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN PVOID pTxDesc,
|
||||
IN u2Byte txPktSize
|
||||
);
|
||||
|
||||
u2Byte
|
||||
GetShortCutTxBuffSize88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN PVOID pTxDesc
|
||||
);
|
||||
|
||||
PVOID
|
||||
CopyShortCutTxDesc88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte queueIndex, //HCI_TX_DMA_QUEUE_88XX
|
||||
IN PVOID pTxDesc,
|
||||
IN u4Byte direction
|
||||
);
|
||||
|
||||
BOOLEAN
|
||||
FillShortCutTxHwCtrl88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte queueIndex, //HCI_TX_DMA_QUEUE_88XX
|
||||
IN PVOID pDescData,
|
||||
IN PVOID pTxDesc,
|
||||
IN u4Byte direction
|
||||
);
|
||||
|
||||
#endif // CFG_HAL_TX_SHORTCUT
|
||||
|
||||
void DumpTxBDesc88XX(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
#ifdef CONFIG_RTL_PROC_NEW
|
||||
IN struct seq_file *s,
|
||||
#endif
|
||||
IN u4Byte q_num
|
||||
);
|
||||
|
||||
#endif //#ifndef __HAL88XX_TXDESC_H__
|
||||
|
||||
|
@ -0,0 +1,141 @@
|
||||
#ifndef __HAL8192E_DEF_H__
|
||||
#define __HAL8192E_DEF_H__
|
||||
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal8192EDef.h
|
||||
|
||||
Abstract:
|
||||
Defined HAL 8192E data structure & Define
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-04-16 Filen Create.
|
||||
--*/
|
||||
|
||||
extern u1Byte *data_AGC_TAB_8192E_start, *data_AGC_TAB_8192E_end;
|
||||
extern u1Byte *data_MAC_REG_8192E_start, *data_MAC_REG_8192E_end;
|
||||
extern u1Byte *data_PHY_REG_8192E_start, *data_PHY_REG_8192E_end;
|
||||
//extern u1Byte *data_PHY_REG_1T_8192E_start, *data_PHY_REG_1T_8192E_end;
|
||||
extern u1Byte *data_PHY_REG_MP_8192E_start, *data_PHY_REG_MP_8192E_end;
|
||||
#ifdef TXPWR_LMT_92EE
|
||||
extern u1Byte *data_PHY_REG_PG_8192E_new_start, *data_PHY_REG_PG_8192E_new_end;
|
||||
#endif
|
||||
extern u1Byte *data_PHY_REG_PG_8192E_start, *data_PHY_REG_PG_8192E_end;
|
||||
|
||||
|
||||
extern u1Byte *data_RadioA_8192E_start, *data_RadioA_8192E_end;
|
||||
extern u1Byte *data_RadioB_8192E_start, *data_RadioB_8192E_end;
|
||||
|
||||
//High Power
|
||||
|
||||
#if CFG_HAL_HIGH_POWER_EXT_PA
|
||||
#ifdef PWR_BY_RATE_92E_HP
|
||||
extern u1Byte *data_PHY_REG_PG_8192Emp_hp_start, *data_PHY_REG_PG_8192Emp_hp_end;
|
||||
#endif
|
||||
|
||||
#if CFG_HAL_HIGH_POWER_EXT_LNA
|
||||
#if IS_EXIST_PCI
|
||||
extern u1Byte *data_AGC_TAB_8192E_hp_start, *data_AGC_TAB_8192E_hp_end;
|
||||
extern u1Byte *data_PHY_REG_8192E_hp_start, *data_PHY_REG_8192E_hp_end;
|
||||
extern u1Byte *data_RadioA_8192E_hp_start, *data_RadioA_8192E_hp_end;
|
||||
extern u1Byte *data_RadioB_8192E_hp_start, *data_RadioB_8192E_hp_end;
|
||||
#endif
|
||||
#if IS_EXIST_SDIO
|
||||
extern u1Byte *data_AGC_TAB_8192ES_hp_start, *data_AGC_TAB_8192ES_hp_end;
|
||||
extern u1Byte *data_PHY_REG_8192ES_hp_start, *data_PHY_REG_8192ES_hp_end;
|
||||
extern u1Byte *data_RadioA_8192ES_hp_start, *data_RadioA_8192ES_hp_end;
|
||||
extern u1Byte *data_RadioB_8192ES_hp_start, *data_RadioB_8192ES_hp_end;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
extern u1Byte *data_AGC_TAB_8192E_extpa_start, *data_AGC_TAB_8192E_extpa_end;
|
||||
extern u1Byte *data_PHY_REG_8192E_extpa_start, *data_PHY_REG_8192E_extpa_end;
|
||||
extern u1Byte *data_RadioA_8192E_extpa_start, *data_RadioA_8192E_extpa_end;
|
||||
extern u1Byte *data_RadioB_8192E_extpa_start, *data_RadioB_8192E_extpa_end;
|
||||
#endif
|
||||
|
||||
#if CFG_HAL_HIGH_POWER_EXT_LNA
|
||||
#if IS_EXIST_PCI
|
||||
extern u1Byte *data_AGC_TAB_8192E_extlna_start, *data_AGC_TAB_8192E_extlna_end;
|
||||
extern u1Byte *data_PHY_REG_8192E_extlna_start, *data_PHY_REG_8192E_extlna_end;
|
||||
extern u1Byte *data_RadioA_8192E_extlna_start, *data_RadioA_8192E_extlna_end;
|
||||
extern u1Byte *data_RadioB_8192E_extlna_start, *data_RadioB_8192E_extlna_end;
|
||||
#endif
|
||||
#if IS_EXIST_SDIO
|
||||
extern u1Byte *data_AGC_TAB_8192ES_extlna_start, *data_AGC_TAB_8192ES_extlna_end;
|
||||
extern u1Byte *data_PHY_REG_8192ES_extlna_start, *data_PHY_REG_8192ES_extlna_end;
|
||||
extern u1Byte *data_RadioA_8192ES_extlna_start, *data_RadioA_8192ES_extlna_end;
|
||||
extern u1Byte *data_RadioB_8192ES_extlna_start, *data_RadioB_8192ES_extlna_end;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// B-cut support
|
||||
extern u1Byte *data_MAC_REG_8192Eb_start, *data_MAC_REG_8192Eb_end;
|
||||
extern u1Byte *data_PHY_REG_8192Eb_start, *data_PHY_REG_8192Eb_end;
|
||||
#if IS_EXIST_PCI
|
||||
extern u1Byte *data_RadioA_8192Eb_start, *data_RadioA_8192Eb_end;
|
||||
extern u1Byte *data_RadioB_8192Eb_start, *data_RadioB_8192Eb_end;
|
||||
#endif
|
||||
|
||||
// MP chip
|
||||
#if IS_EXIST_PCI
|
||||
extern u1Byte *data_AGC_TAB_8192Emp_start, *data_AGC_TAB_8192Emp_end;
|
||||
extern u1Byte *data_RadioA_8192Emp_start, *data_RadioA_8192Emp_end;
|
||||
extern u1Byte *data_RadioB_8192Emp_start, *data_RadioB_8192Emp_end;
|
||||
extern u1Byte *data_RadioA_8192EmpA_start, *data_RadioA_8192EmpA_end;
|
||||
extern u1Byte *data_RadioB_8192EmpA_start, *data_RadioB_8192EmpA_end;
|
||||
#endif
|
||||
#if IS_EXIST_SDIO
|
||||
extern u1Byte *data_AGC_TAB_8192ES_start, *data_AGC_TAB_8192ES_end;
|
||||
extern u1Byte *data_RadioA_8192ES_start, *data_RadioA_8192ES_end;
|
||||
extern u1Byte *data_RadioB_8192ES_start, *data_RadioB_8192ES_end;
|
||||
#endif
|
||||
extern u1Byte *data_PHY_REG_MP_8192Emp_start, *data_PHY_REG_MP_8192Emp_end;
|
||||
extern u1Byte *data_PHY_REG_PG_8192Emp_start, *data_PHY_REG_PG_8192Emp_end;
|
||||
extern u1Byte *data_MAC_REG_8192Emp_start, *data_MAC_REG_8192Emp_end;
|
||||
extern u1Byte *data_PHY_REG_8192Emp_start, *data_PHY_REG_8192Emp_end;
|
||||
|
||||
// FW
|
||||
extern u1Byte *data_rtl8192Efw_start, *data_rtl8192Efw_end;
|
||||
extern u1Byte *data_rtl8192EfwMP_start, *data_rtl8192EfwMP_end;
|
||||
|
||||
// Power Tracking
|
||||
extern u1Byte *data_TxPowerTrack_AP_start, *data_TxPowerTrack_AP_end;
|
||||
|
||||
#ifdef TXPWR_LMT_92EE
|
||||
extern unsigned char *data_TXPWR_LMT_92EE_new_start, *data_TXPWR_LMT_92EE_new_end;
|
||||
#ifdef PWR_BY_RATE_92E_HP
|
||||
#if CFG_HAL_HIGH_POWER_EXT_PA
|
||||
extern unsigned char *data_TXPWR_LMT_92EE_hp_start, *data_TXPWR_LMT_92EE_hp_end;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//3 MACDM
|
||||
//default
|
||||
extern u1Byte *data_MACDM_def_high_8192E_start, *data_MACDM_def_high_8192E_end;
|
||||
extern u1Byte *data_MACDM_def_low_8192E_start, *data_MACDM_def_low_8192E_end;
|
||||
extern u1Byte *data_MACDM_def_normal_8192E_start, *data_MACDM_def_normal_8192E_end;
|
||||
|
||||
//general
|
||||
extern u1Byte *data_MACDM_gen_high_8192E_start, *data_MACDM_gen_high_8192E_end;
|
||||
extern u1Byte *data_MACDM_gen_low_8192E_start, *data_MACDM_gen_low_8192E_end;
|
||||
extern u1Byte *data_MACDM_gen_normal_8192E_start, *data_MACDM_gen_normal_8192E_end;
|
||||
|
||||
//txop
|
||||
extern u1Byte *data_MACDM_txop_high_8192E_start, *data_MACDM_txop_high_8192E_end;
|
||||
extern u1Byte *data_MACDM_txop_low_8192E_start, *data_MACDM_txop_low_8192E_end;
|
||||
extern u1Byte *data_MACDM_txop_normal_8192E_start, *data_MACDM_txop_normal_8192E_end;
|
||||
|
||||
//criteria
|
||||
extern u1Byte *data_MACDM_state_criteria_8192E_start, *data_MACDM_state_criteria_8192E_end;
|
||||
|
||||
|
||||
|
||||
#endif //__HAL8192E_DEF_H__
|
||||
|
||||
|
@ -0,0 +1,240 @@
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal8192EGen.c
|
||||
|
||||
Abstract:
|
||||
Defined RTL8192E HAL Function
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-04-16 Filen Create.
|
||||
--*/
|
||||
|
||||
|
||||
#include "../../HalPrecomp.h"
|
||||
|
||||
|
||||
#include "../../../data_AGC_TAB_8192E.c"
|
||||
#include "../../../data_MAC_REG_8192E.c"
|
||||
#include "../../../data_PHY_REG_8192E.c"
|
||||
//#include "../../../data_PHY_REG_1T_8192E.c"
|
||||
#include "../../../data_PHY_REG_MP_8192E.c"
|
||||
#include "../../../data_PHY_REG_PG_8192E.c"
|
||||
#ifdef TXPWR_LMT_92EE
|
||||
#include "../../../data_PHY_REG_PG_8192E_new.c"
|
||||
#endif
|
||||
#include "../../../data_RadioA_8192E.c"
|
||||
#include "../../../data_RadioB_8192E.c"
|
||||
#include "../../../data_rtl8192Efw.c"
|
||||
//#include "data_RTL8192EFW_Test_T.c"
|
||||
|
||||
// High Power
|
||||
#if CFG_HAL_HIGH_POWER_EXT_PA
|
||||
#ifdef PWR_BY_RATE_92E_HP
|
||||
#include "../../../data_PHY_REG_PG_8192Emp_hp.c"
|
||||
#endif
|
||||
#if CFG_HAL_HIGH_POWER_EXT_LNA
|
||||
#if IS_EXIST_PCI
|
||||
#include "../../../data_AGC_TAB_8192E_hp.c"
|
||||
#include "../../../data_PHY_REG_8192E_hp.c"
|
||||
#include "../../../data_RadioA_8192E_hp.c"
|
||||
#include "../../../data_RadioB_8192E_hp.c"
|
||||
#endif
|
||||
#if IS_EXIST_SDIO
|
||||
#include "../../../data_AGC_TAB_8192ES_hp.c"
|
||||
#include "../../../data_PHY_REG_8192ES_hp.c"
|
||||
#include "../../../data_RadioA_8192ES_hp.c"
|
||||
#include "../../../data_RadioB_8192ES_hp.c"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#include "../../../data_AGC_TAB_8192E_extpa.c"
|
||||
#include "../../../data_PHY_REG_8192E_extpa.c"
|
||||
#include "../../../data_RadioA_8192E_extpa.c"
|
||||
#include "../../../data_RadioB_8192E_extpa.c"
|
||||
#endif
|
||||
#if CFG_HAL_HIGH_POWER_EXT_LNA
|
||||
#if IS_EXIST_PCI
|
||||
#include "../../../data_AGC_TAB_8192E_extlna.c"
|
||||
#include "../../../data_PHY_REG_8192E_extlna.c"
|
||||
#include "../../../data_RadioA_8192E_extlna.c"
|
||||
#include "../../../data_RadioB_8192E_extlna.c"
|
||||
#endif
|
||||
#if IS_EXIST_SDIO
|
||||
#include "../../../data_AGC_TAB_8192ES_extlna.c"
|
||||
#include "../../../data_PHY_REG_8192ES_extlna.c"
|
||||
#include "../../../data_RadioA_8192ES_extlna.c"
|
||||
#include "../../../data_RadioB_8192ES_extlna.c"
|
||||
#endif
|
||||
#endif
|
||||
// B-cut
|
||||
#include "../../../data_MAC_REG_8192Eb.c"
|
||||
#include "../../../data_PHY_REG_8192Eb.c"
|
||||
#if IS_EXIST_PCI
|
||||
#include "../../../data_RadioA_8192Eb.c"
|
||||
#include "../../../data_RadioB_8192Eb.c"
|
||||
#endif
|
||||
//
|
||||
|
||||
// MP
|
||||
#if IS_EXIST_PCI
|
||||
#include "../../../data_AGC_TAB_8192Emp.c"
|
||||
#include "../../../data_RadioA_8192Emp.c"
|
||||
#include "../../../data_RadioB_8192Emp.c"
|
||||
#include "../../../data_RadioA_8192EmpA.c"
|
||||
#include "../../../data_RadioB_8192EmpA.c"
|
||||
#endif
|
||||
#if IS_EXIST_SDIO
|
||||
#include "../../../data_AGC_TAB_8192ES.c"
|
||||
#include "../../../data_RadioA_8192ES.c"
|
||||
#include "../../../data_RadioB_8192ES.c"
|
||||
#endif
|
||||
#include "../../../data_MAC_REG_8192Emp.c"
|
||||
#include "../../../data_PHY_REG_8192Emp.c"
|
||||
#include "../../../data_PHY_REG_MP_8192Emp.c"
|
||||
#include "../../../data_PHY_REG_PG_8192Emp.c"
|
||||
#include "../../../data_rtl8192EfwMP.c"
|
||||
|
||||
// Power Tracking
|
||||
#include "../../../data_TxPowerTrack_AP.c"
|
||||
|
||||
|
||||
//3 MACDM
|
||||
//default
|
||||
#include "../../../data_MACDM_def_high_8192E.c"
|
||||
#include "../../../data_MACDM_def_low_8192E.c"
|
||||
#include "../../../data_MACDM_def_normal_8192E.c"
|
||||
//general
|
||||
#include "../../../data_MACDM_gen_high_8192E.c"
|
||||
#include "../../../data_MACDM_gen_low_8192E.c"
|
||||
#include "../../../data_MACDM_gen_normal_8192E.c"
|
||||
//txop
|
||||
#include "../../../data_MACDM_txop_high_8192E.c"
|
||||
#include "../../../data_MACDM_txop_low_8192E.c"
|
||||
#include "../../../data_MACDM_txop_normal_8192E.c"
|
||||
//criteria
|
||||
#include "../../../data_MACDM_state_criteria_8192E.c"
|
||||
|
||||
|
||||
|
||||
|
||||
#define VAR_MAPPING(dst,src) \
|
||||
u1Byte *data_##dst##_start = &data_##src[0]; \
|
||||
u1Byte *data_##dst##_end = &data_##src[sizeof(data_##src)];
|
||||
|
||||
VAR_MAPPING(AGC_TAB_8192E, AGC_TAB_8192E);
|
||||
VAR_MAPPING(MAC_REG_8192E, MAC_REG_8192E);
|
||||
VAR_MAPPING(PHY_REG_8192E, PHY_REG_8192E);
|
||||
//VAR_MAPPING(PHY_REG_1T_8192E, PHY_REG_1T_8192E);
|
||||
VAR_MAPPING(PHY_REG_PG_8192E, PHY_REG_PG_8192E);
|
||||
VAR_MAPPING(PHY_REG_MP_8192E, PHY_REG_MP_8192E);
|
||||
VAR_MAPPING(RadioA_8192E, RadioA_8192E);
|
||||
VAR_MAPPING(RadioB_8192E, RadioB_8192E);
|
||||
VAR_MAPPING(rtl8192Efw, rtl8192Efw);
|
||||
|
||||
#ifdef TXPWR_LMT_92EE
|
||||
VAR_MAPPING(PHY_REG_PG_8192E_new, PHY_REG_PG_8192E_new);
|
||||
#endif
|
||||
// High Power
|
||||
#if CFG_HAL_HIGH_POWER_EXT_PA
|
||||
#ifdef PWR_BY_RATE_92E_HP
|
||||
VAR_MAPPING(PHY_REG_PG_8192Emp_hp, PHY_REG_PG_8192Emp_hp);
|
||||
#endif
|
||||
#if CFG_HAL_HIGH_POWER_EXT_LNA
|
||||
#if IS_EXIST_PCI
|
||||
VAR_MAPPING(AGC_TAB_8192E_hp, AGC_TAB_8192E_hp);
|
||||
VAR_MAPPING(PHY_REG_8192E_hp, PHY_REG_8192E_hp);
|
||||
VAR_MAPPING(RadioA_8192E_hp, RadioA_8192E_hp);
|
||||
VAR_MAPPING(RadioB_8192E_hp, RadioB_8192E_hp);
|
||||
#endif
|
||||
#if IS_EXIST_SDIO
|
||||
VAR_MAPPING(AGC_TAB_8192ES_hp, AGC_TAB_8192ES_hp);
|
||||
VAR_MAPPING(PHY_REG_8192ES_hp, PHY_REG_8192ES_hp);
|
||||
VAR_MAPPING(RadioA_8192ES_hp, RadioA_8192ES_hp);
|
||||
VAR_MAPPING(RadioB_8192ES_hp, RadioB_8192ES_hp);
|
||||
#endif
|
||||
#endif
|
||||
VAR_MAPPING(AGC_TAB_8192E_extpa, AGC_TAB_8192E_extpa);
|
||||
VAR_MAPPING(PHY_REG_8192E_extpa, PHY_REG_8192E_extpa);
|
||||
VAR_MAPPING(RadioA_8192E_extpa, RadioA_8192E_extpa);
|
||||
VAR_MAPPING(RadioB_8192E_extpa, RadioB_8192E_extpa);
|
||||
#endif
|
||||
|
||||
#if CFG_HAL_HIGH_POWER_EXT_LNA
|
||||
#if IS_EXIST_PCI
|
||||
VAR_MAPPING(AGC_TAB_8192E_extlna, AGC_TAB_8192E_extlna);
|
||||
VAR_MAPPING(PHY_REG_8192E_extlna, PHY_REG_8192E_extlna);
|
||||
VAR_MAPPING(RadioA_8192E_extlna, RadioA_8192E_extlna);
|
||||
VAR_MAPPING(RadioB_8192E_extlna, RadioB_8192E_extlna);
|
||||
#endif
|
||||
#if IS_EXIST_SDIO
|
||||
VAR_MAPPING(AGC_TAB_8192ES_extlna, AGC_TAB_8192ES_extlna);
|
||||
VAR_MAPPING(PHY_REG_8192ES_extlna, PHY_REG_8192ES_extlna);
|
||||
VAR_MAPPING(RadioA_8192ES_extlna, RadioA_8192ES_extlna);
|
||||
VAR_MAPPING(RadioB_8192ES_extlna, RadioB_8192ES_extlna);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// B-cut
|
||||
VAR_MAPPING(MAC_REG_8192Eb, MAC_REG_8192Eb);
|
||||
VAR_MAPPING(PHY_REG_8192Eb, PHY_REG_8192Eb);
|
||||
#if IS_EXIST_PCI
|
||||
VAR_MAPPING(RadioA_8192Eb, RadioA_8192Eb);
|
||||
VAR_MAPPING(RadioB_8192Eb, RadioB_8192Eb);
|
||||
#endif
|
||||
|
||||
// MP
|
||||
#if IS_EXIST_PCI
|
||||
VAR_MAPPING(AGC_TAB_8192Emp, AGC_TAB_8192Emp);
|
||||
VAR_MAPPING(RadioA_8192Emp, RadioA_8192Emp);
|
||||
VAR_MAPPING(RadioB_8192Emp, RadioB_8192Emp);
|
||||
VAR_MAPPING(RadioA_8192EmpA, RadioA_8192EmpA);
|
||||
VAR_MAPPING(RadioB_8192EmpA, RadioB_8192EmpA);
|
||||
#endif
|
||||
#if IS_EXIST_SDIO
|
||||
VAR_MAPPING(AGC_TAB_8192ES, AGC_TAB_8192ES);
|
||||
VAR_MAPPING(RadioA_8192ES, RadioA_8192ES);
|
||||
VAR_MAPPING(RadioB_8192ES, RadioB_8192ES);
|
||||
#endif
|
||||
VAR_MAPPING(MAC_REG_8192Emp, MAC_REG_8192Emp);
|
||||
VAR_MAPPING(PHY_REG_8192Emp, PHY_REG_8192Emp);
|
||||
VAR_MAPPING(PHY_REG_PG_8192Emp, PHY_REG_PG_8192Emp);
|
||||
VAR_MAPPING(PHY_REG_MP_8192Emp, PHY_REG_MP_8192Emp);
|
||||
VAR_MAPPING(rtl8192EfwMP, rtl8192EfwMP);
|
||||
|
||||
// Power Tracking
|
||||
VAR_MAPPING(TxPowerTrack_AP, TxPowerTrack_AP);
|
||||
|
||||
#ifdef TXPWR_LMT_92EE
|
||||
#include "../../../data_TXPWR_LMT_92EE_new.c"
|
||||
VAR_MAPPING(TXPWR_LMT_92EE_new,TXPWR_LMT_92EE_new);
|
||||
#ifdef PWR_BY_RATE_92E_HP
|
||||
#if CFG_HAL_HIGH_POWER_EXT_PA
|
||||
#include "../../../data_TXPWR_LMT_92EE_hp.c"
|
||||
VAR_MAPPING(TXPWR_LMT_92EE_hp,TXPWR_LMT_92EE_hp);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//3 MACDM
|
||||
VAR_MAPPING(MACDM_def_high_8192E, MACDM_def_high_8192E);
|
||||
VAR_MAPPING(MACDM_def_low_8192E, MACDM_def_low_8192E);
|
||||
VAR_MAPPING(MACDM_def_normal_8192E, MACDM_def_normal_8192E);
|
||||
|
||||
VAR_MAPPING(MACDM_gen_high_8192E, MACDM_gen_high_8192E);
|
||||
VAR_MAPPING(MACDM_gen_low_8192E, MACDM_gen_low_8192E);
|
||||
VAR_MAPPING(MACDM_gen_normal_8192E, MACDM_gen_normal_8192E);
|
||||
|
||||
VAR_MAPPING(MACDM_txop_high_8192E, MACDM_txop_high_8192E);
|
||||
VAR_MAPPING(MACDM_txop_low_8192E, MACDM_txop_low_8192E);
|
||||
VAR_MAPPING(MACDM_txop_normal_8192E, MACDM_txop_normal_8192E);
|
||||
|
||||
VAR_MAPPING(MACDM_state_criteria_8192E, MACDM_state_criteria_8192E);
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,19 @@
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal8192EPhyCfg.c
|
||||
|
||||
Abstract:
|
||||
Defined HAL 92E PHY BB setting functions
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-11-22 Eric Create.
|
||||
--*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,23 @@
|
||||
#ifndef __HAL8192EPHYCFG_H__
|
||||
#define __HAL8192EPHYCFG_H__
|
||||
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal8192EPhyCfg.h
|
||||
|
||||
Abstract:
|
||||
Defined HAL 92E PHY BB setting functions
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-11-22 Eric Create.
|
||||
--*/
|
||||
|
||||
|
||||
|
||||
|
||||
#endif //__HAL8192EPHYCFG_H__
|
||||
|
@ -0,0 +1,97 @@
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal8192EAPwrSeqCmd.c
|
||||
|
||||
Abstract:
|
||||
This file includes all kinds of Power Action event for RTL8192E and
|
||||
corresponding hardware configurtions which are released from HW SD.
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-04-16 Filen Create.
|
||||
|
||||
--*/
|
||||
|
||||
|
||||
#include "../../HalPrecomp.h"
|
||||
|
||||
/*
|
||||
* drivers should parse below arrays and do the corresponding actions
|
||||
*/
|
||||
|
||||
/* Power on Array */
|
||||
WLAN_PWR_CFG rtl8192E_power_on_flow[RTL8192E_TRANS_CARDEMU_TO_ACT_STEPS+RTL8192E_TRANS_END_STEPS]=
|
||||
{
|
||||
RTL8192E_TRANS_CARDEMU_TO_ACT
|
||||
RTL8192E_TRANS_END
|
||||
};
|
||||
|
||||
/* Radio off Array */
|
||||
WLAN_PWR_CFG rtl8192E_radio_off_flow[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8192E_TRANS_END_STEPS]=
|
||||
{
|
||||
RTL8192E_TRANS_ACT_TO_CARDEMU
|
||||
RTL8192E_TRANS_END
|
||||
};
|
||||
|
||||
/* Card Disable Array */
|
||||
WLAN_PWR_CFG rtl8192E_card_disable_flow[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8192E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8192E_TRANS_END_STEPS]=
|
||||
{
|
||||
RTL8192E_TRANS_ACT_TO_CARDEMU
|
||||
RTL8192E_TRANS_CARDEMU_TO_CARDDIS
|
||||
RTL8192E_TRANS_END
|
||||
};
|
||||
|
||||
/* Card Enable Array */
|
||||
WLAN_PWR_CFG rtl8192E_card_enable_flow[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8192E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8192E_TRANS_END_STEPS]=
|
||||
{
|
||||
RTL8192E_TRANS_CARDDIS_TO_CARDEMU
|
||||
RTL8192E_TRANS_CARDEMU_TO_ACT
|
||||
RTL8192E_TRANS_END
|
||||
};
|
||||
|
||||
/* Suspend Array */
|
||||
WLAN_PWR_CFG rtl8192E_suspend_flow[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8192E_TRANS_CARDEMU_TO_SUS_STEPS+RTL8192E_TRANS_END_STEPS]=
|
||||
{
|
||||
RTL8192E_TRANS_ACT_TO_CARDEMU
|
||||
RTL8192E_TRANS_CARDEMU_TO_SUS
|
||||
RTL8192E_TRANS_END
|
||||
};
|
||||
|
||||
/* Resume Array */
|
||||
WLAN_PWR_CFG rtl8192E_resume_flow[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8192E_TRANS_CARDEMU_TO_SUS_STEPS+RTL8192E_TRANS_END_STEPS]=
|
||||
{
|
||||
RTL8192E_TRANS_SUS_TO_CARDEMU
|
||||
RTL8192E_TRANS_CARDEMU_TO_ACT
|
||||
RTL8192E_TRANS_END
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* HWPDN Array */
|
||||
WLAN_PWR_CFG rtl8192E_hwpdn_flow[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8192E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8192E_TRANS_END_STEPS]=
|
||||
{
|
||||
RTL8192E_TRANS_ACT_TO_CARDEMU
|
||||
RTL8192E_TRANS_CARDEMU_TO_PDN
|
||||
RTL8192E_TRANS_END
|
||||
};
|
||||
|
||||
/* Enter LPS */
|
||||
WLAN_PWR_CFG rtl8192E_enter_lps_flow[RTL8192E_TRANS_ACT_TO_LPS_STEPS+RTL8192E_TRANS_END_STEPS]=
|
||||
{
|
||||
//FW behavior
|
||||
RTL8192E_TRANS_ACT_TO_LPS
|
||||
RTL8192E_TRANS_END
|
||||
};
|
||||
|
||||
/* Leave LPS */
|
||||
WLAN_PWR_CFG rtl8192E_leave_lps_flow[RTL8192E_TRANS_LPS_TO_ACT_STEPS+RTL8192E_TRANS_END_STEPS]=
|
||||
{
|
||||
//FW behavior
|
||||
RTL8192E_TRANS_LPS_TO_ACT
|
||||
RTL8192E_TRANS_END
|
||||
};
|
||||
|
||||
|
@ -0,0 +1,211 @@
|
||||
#ifndef REALTEK_POWER_SEQUENCE_8192E
|
||||
#define REALTEK_POWER_SEQUENCE_8192E
|
||||
|
||||
|
||||
/*
|
||||
Check document WM-20110607-Paul-RTL8192E_Power_Architecture-R02.vsd
|
||||
There are 6 HW Power States:
|
||||
0: POFF--Power Off
|
||||
1: PDN--Power Down
|
||||
2: CARDEMU--Card Emulation
|
||||
3: ACT--Active Mode
|
||||
4: LPS--Low Power State
|
||||
5: SUS--Suspend
|
||||
|
||||
The transision from different states are defined below
|
||||
TRANS_CARDEMU_TO_ACT
|
||||
TRANS_ACT_TO_CARDEMU
|
||||
TRANS_CARDEMU_TO_SUS
|
||||
TRANS_SUS_TO_CARDEMU
|
||||
TRANS_CARDEMU_TO_PDN
|
||||
TRANS_ACT_TO_LPS
|
||||
TRANS_LPS_TO_ACT
|
||||
|
||||
TRANS_END
|
||||
*/
|
||||
#define RTL8192E_TRANS_CARDEMU_TO_ACT_STEPS 20
|
||||
#define RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS 15
|
||||
#define RTL8192E_TRANS_CARDEMU_TO_SUS_STEPS 15
|
||||
#define RTL8192E_TRANS_SUS_TO_CARDEMU_STEPS 15
|
||||
#define RTL8192E_TRANS_CARDEMU_TO_PDN_STEPS 15
|
||||
#define RTL8192E_TRANS_PDN_TO_CARDEMU_STEPS 15
|
||||
#define RTL8192E_TRANS_ACT_TO_LPS_STEPS 15
|
||||
#define RTL8192E_TRANS_LPS_TO_ACT_STEPS 15
|
||||
#define RTL8192E_TRANS_END_STEPS 1
|
||||
|
||||
|
||||
#define RTL8192E_TRANS_CARDEMU_TO_ACT \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
|
||||
{0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0}, /*0x20[0] = 1b'1 enable LDOA12 MACRO block for all interface*/ \
|
||||
{0x0067, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x67[0] = 0 to disable BT_GPS_SEL pins*/ \
|
||||
{0x0001, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 1, PWRSEQ_DELAY_MS},/*Delay 1ms*/ \
|
||||
{0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, 0}, /*0x00[5] = 1b'0 release analog Ips to digital ,1:isolation*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, 0},/* disable SW LPS 0x04[10]=0*/ \
|
||||
{0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, BIT1},/* wait till 0x04[17] = 1 power ready*/ \
|
||||
{0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/* release WLON reset 0x04[16]=1*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/* disable HWPDN 0x04[15]=0*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, (BIT4|BIT3), 0},/* disable WL suspend*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/* polling until return 0*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT0, 0},/**/ \
|
||||
{0x004F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*0x4C[24] = 0x4F[0] = 1, switch DPDT_SEL_P output from WL BB */\
|
||||
{0x0067, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, (BIT5|BIT4), (BIT5|BIT4)},/*0x66[13] = 0x67[5] = 1, switch for PAPE_G/PAPE_A from WL BB ; 0x66[12] = 0x67[4] = 1, switch LNAON from WL BB */\
|
||||
{0x0025, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6, 0},/*anapar_mac<118> , 0x25[6]=0 by wlan single function*/\
|
||||
{0x0049, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1},/*Enable falling edge triggering interrupt*/\
|
||||
{0x0063, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1},/*Enable GPIO9 interrupt mode*/\
|
||||
{0x0062, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*Enable GPIO9 input mode*/\
|
||||
{0x0058, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*Enable HSISR GPIO[C:0] interrupt*/\
|
||||
{0x005A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1},/*Enable HSISR GPIO9 interrupt*/\
|
||||
/*{0x007A, PWR_CUT_TESTCHIP_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x3A},*/ /*0x7A = 0x3A start BT*/\
|
||||
|
||||
#define RTL8192E_TRANS_ACT_TO_CARDEMU \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
|
||||
{0x001F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*0x1F[7:0] = 0 turn off RF*/ \
|
||||
{0x004F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*0x4C[24] = 0x4F[0] = 0, switch DPDT_SEL_P output from register 0x65[2] */\
|
||||
{0x0049, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*Enable rising edge triggering interrupt*/ \
|
||||
/*{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1},*/ /*0x04[9] = 1 turn off MAC by HW state machine*/ \
|
||||
/*{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, 0},*/ /*wait till 0x04[9] = 0 polling until return 0 to disable*/ \
|
||||
{0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x23}, \
|
||||
{0x0009, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x30}, \
|
||||
{0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x53}, \
|
||||
{0x0001, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xb2}, \
|
||||
{0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xc0}, \
|
||||
{0x0003, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x71}, \
|
||||
{0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5}, /*0x00[5] = 1b'1 analog Ips to digital ,1:isolation*/ \
|
||||
{0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0}, /*0x20[0] = 1b'0 disable LDOA12 MACRO block*/ \
|
||||
|
||||
|
||||
#define RTL8192E_TRANS_CARDEMU_TO_SUS \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4|BIT3, (BIT4|BIT3)}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \
|
||||
{0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \
|
||||
{0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SDIO SOP option to disable BG/MB/ACK/SWR*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3|BIT4}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \
|
||||
{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \
|
||||
{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/
|
||||
|
||||
#define RTL8192E_TRANS_SUS_TO_CARDEMU \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3 | BIT7, 0}, /*clear suspend enable and power down enable*/ \
|
||||
{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \
|
||||
{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\
|
||||
{0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x23[4] = 1b'0 12H LDO enter normal mode*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/
|
||||
#ifndef NOT_RTK_BSP
|
||||
#define RTL8192E_TRANS_CARDEMU_TO_CARDDIS \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
|
||||
{0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07=0x20 , SOP option to disable BG/MB*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \
|
||||
{0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0}, /*0x90[24] = 1*/ \
|
||||
{0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0}, /*0x04[24] = 1*/ \
|
||||
/*{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, BIT2},*/ /*0x04[10] = 1, enable SW LPS*/ \
|
||||
{0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1}, /*0x48[16] = 1 to enable GPIO9 as EXT WAKEUP*/ \
|
||||
{0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \
|
||||
{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \
|
||||
{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/
|
||||
#else
|
||||
#ifdef DONT_DISABLE_XTAL_ON_CLOSE
|
||||
#define PWRSEQ_DONT_DISABLE_XTAL_ON_CLOSE \
|
||||
{0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0}, /*0x90[24] = 1*/ \
|
||||
{0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0}, /*0x04[24] = 1*/
|
||||
#else
|
||||
#define PWRSEQ_DONT_DISABLE_XTAL_ON_CLOSE
|
||||
#endif
|
||||
#define RTL8192E_TRANS_CARDEMU_TO_CARDDIS \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
|
||||
{0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07=0x20 , SOP option to disable BG/MB*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \
|
||||
PWRSEQ_DONT_DISABLE_XTAL_ON_CLOSE \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, BIT2}, /*0x04[10] = 1, enable SW LPS*/ \
|
||||
/* {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1},*/ /*0x48[16] = 1 to enable GPIO9 as EXT WAKEUP*/ \
|
||||
/* {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4},*/ /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \
|
||||
{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \
|
||||
{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/
|
||||
#endif
|
||||
|
||||
#define RTL8192E_TRANS_CARDDIS_TO_CARDEMU \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3 | BIT7, 0}, /*clear suspend enable and power down enable*/ \
|
||||
{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \
|
||||
{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\
|
||||
{0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0}, /*0x48[16] = 0 to disable GPIO9 as EXT WAKEUP*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/\
|
||||
{0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x23[4] = 1b'0 12H LDO enter normal mode*/ \
|
||||
{0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*PCIe DMA start*/
|
||||
|
||||
|
||||
#define RTL8192E_TRANS_CARDEMU_TO_PDN \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
|
||||
{0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \
|
||||
{0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK|PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SOP option to disable BG/MB/ACK/SWR*/ \
|
||||
{0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/* 0x04[16] = 0*/\
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7},/* 0x04[15] = 1*/
|
||||
|
||||
#define RTL8192E_TRANS_PDN_TO_CARDEMU \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
|
||||
{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/* 0x04[15] = 0*/
|
||||
|
||||
#define RTL8192E_TRANS_ACT_TO_LPS \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
|
||||
{0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF},/*PCIe DMA stop*/ \
|
||||
{0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF},/*Tx Pause*/ \
|
||||
{0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
|
||||
{0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
|
||||
{0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
|
||||
{0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
|
||||
{0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \
|
||||
{0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US},/*Delay 1us*/ \
|
||||
{0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*Whole BB is reset*/ \
|
||||
/*{0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x03},*//*Reset MAC TRX*/ \
|
||||
/*{0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},*//*check if removed later*/ \
|
||||
{0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, \
|
||||
{0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, \
|
||||
{0x0102, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, \
|
||||
{0x0103, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, \
|
||||
{0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x00},/*When driver enter Sus/ Disable, enable LOP for BT*/ \
|
||||
{0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5},/*Respond TxOK to scheduler*/ \
|
||||
|
||||
|
||||
#define RTL8192E_TRANS_LPS_TO_ACT \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
|
||||
{0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, 0xFF, 0x84}, /*SDIO RPWM*/\
|
||||
{0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*USB RPWM*/\
|
||||
{0x0361, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*PCIe RPWM*/\
|
||||
{0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS}, /*Delay*/\
|
||||
{0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*. 0x08[4] = 0 switch TSF to 40M*/\
|
||||
{0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT7, 0}, /*Polling 0x109[7]=0 TSF in 40M*/\
|
||||
{0x0029, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6|BIT7, 0}, /*. 0x29[7:6] = 2b'00 enable BB clock*/\
|
||||
{0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*. 0x101[1] = 1*/\
|
||||
{0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF}, /*. 0x100[7:0] = 0xFF enable WMAC TRX*/\
|
||||
{0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1|BIT0, BIT1|BIT0}, /*. 0x02[1:0] = 2b'11 enable BB macro*/\
|
||||
{0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, /*. 0x522 = 0*/
|
||||
|
||||
#define RTL8192E_TRANS_END \
|
||||
/* format */ \
|
||||
/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/\
|
||||
{0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,0,PWR_CMD_END, 0, 0}, //
|
||||
|
||||
|
||||
extern WLAN_PWR_CFG rtl8192E_power_on_flow[RTL8192E_TRANS_CARDEMU_TO_ACT_STEPS+RTL8192E_TRANS_END_STEPS];
|
||||
extern WLAN_PWR_CFG rtl8192E_radio_off_flow[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8192E_TRANS_END_STEPS];
|
||||
extern WLAN_PWR_CFG rtl8192E_card_disable_flow[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8192E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8192E_TRANS_END_STEPS];
|
||||
extern WLAN_PWR_CFG rtl8192E_card_enable_flow[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8192E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8192E_TRANS_END_STEPS];
|
||||
extern WLAN_PWR_CFG rtl8192E_suspend_flow[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8192E_TRANS_CARDEMU_TO_SUS_STEPS+RTL8192E_TRANS_END_STEPS];
|
||||
extern WLAN_PWR_CFG rtl8192E_resume_flow[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8192E_TRANS_CARDEMU_TO_SUS_STEPS+RTL8192E_TRANS_END_STEPS];
|
||||
extern WLAN_PWR_CFG rtl8192E_hwpdn_flow[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8192E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8192E_TRANS_END_STEPS];
|
||||
extern WLAN_PWR_CFG rtl8192E_enter_lps_flow[RTL8192E_TRANS_ACT_TO_LPS_STEPS+RTL8192E_TRANS_END_STEPS];
|
||||
extern WLAN_PWR_CFG rtl8192E_leave_lps_flow[RTL8192E_TRANS_LPS_TO_ACT_STEPS+RTL8192E_TRANS_END_STEPS];
|
||||
|
||||
#endif
|
||||
|
@ -0,0 +1,119 @@
|
||||
#ifndef __HAL8192EE_DEF_H__
|
||||
#define __HAL8192EE_DEF_H__
|
||||
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal8192EEDef.h
|
||||
|
||||
Abstract:
|
||||
Defined HAL 8192EE data structure & Define
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-03-23 Filen Create.
|
||||
--*/
|
||||
|
||||
/*
|
||||
RT_STATUS
|
||||
InitPON8192EE(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte ClkSel
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
StopHW8192EE(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
|
||||
RT_STATUS
|
||||
hal_Associate_8192EE(
|
||||
HAL_PADAPTER Adapter,
|
||||
BOOLEAN IsDefaultAdapter
|
||||
);
|
||||
|
||||
*/
|
||||
|
||||
struct _RT_BEAMFORMING_INFO;
|
||||
|
||||
VOID
|
||||
SetBeamformRfMode92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
struct _RT_BEAMFORMING_INFO *pBeamformingInfo
|
||||
);
|
||||
|
||||
|
||||
|
||||
VOID
|
||||
SetBeamformEnter92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
u1Byte Idx
|
||||
);
|
||||
|
||||
VOID
|
||||
SetBeamformLeave92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
u1Byte Idx
|
||||
);
|
||||
|
||||
VOID
|
||||
SetBeamformStatus92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
u1Byte Idx
|
||||
);
|
||||
|
||||
|
||||
VOID
|
||||
Beamforming_NDPARate_92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
BOOLEAN Mode,
|
||||
u1Byte BW,
|
||||
u1Byte Rate
|
||||
);
|
||||
|
||||
VOID
|
||||
C2HTxBeamformingHandler_92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
pu1Byte CmdBuf,
|
||||
u1Byte CmdLen
|
||||
);
|
||||
|
||||
VOID
|
||||
_C2HContentParsing92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
u1Byte c2hCmdId,
|
||||
u1Byte c2hCmdLen,
|
||||
pu1Byte tmpBuf
|
||||
);
|
||||
|
||||
VOID
|
||||
C2HPacketHandler_92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
pu1Byte Buffer,
|
||||
u1Byte Length
|
||||
);
|
||||
|
||||
VOID HW_VAR_HW_REG_TIMER_START_92E(
|
||||
struct rtl8192cd_priv *priv
|
||||
);
|
||||
|
||||
VOID HW_VAR_HW_REG_TIMER_INIT_92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
u2Byte t
|
||||
);
|
||||
|
||||
VOID HW_VAR_HW_REG_TIMER_STOP_92E(
|
||||
struct rtl8192cd_priv *priv
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
hal_Associate_8192ES(
|
||||
struct rtl8192cd_priv *priv,
|
||||
BOOLEAN IsDefaultAdapter
|
||||
);
|
||||
|
||||
#endif //__HAL8192EE_DEF_H__
|
||||
|
@ -0,0 +1,910 @@
|
||||
/*++
|
||||
Copyright (c) Realtek Semiconductor Corp. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
Hal88XXGen.c
|
||||
|
||||
Abstract:
|
||||
Defined RTL8192EE HAL Function
|
||||
|
||||
Major Change History:
|
||||
When Who What
|
||||
---------- --------------- -------------------------------
|
||||
2012-03-23 Filen Create.
|
||||
--*/
|
||||
|
||||
|
||||
#include "../../../HalPrecomp.h"
|
||||
#include "../../../../8192cd.h"
|
||||
|
||||
typedef enum _RTL8192E_C2H_EVT
|
||||
{
|
||||
C2H_8192E_DBG = 0,
|
||||
C2H_8192E_LB = 1,
|
||||
C2H_8192E_TXBF = 2,
|
||||
C2H_8192E_TX_REPORT = 3,
|
||||
C2H_8192E_TX_RATE =4,
|
||||
C2H_8192E_BT_INFO = 9,
|
||||
C2H_8192E_BT_MP = 11,
|
||||
C2H_8192E_RA_RPT = 12,
|
||||
#ifdef TXRETRY_CNT
|
||||
C2H_8192E_TX_RETRY = 13, //0x0D
|
||||
#endif
|
||||
C2H_8192E_RA_PARA_RPT=14,
|
||||
C2H_8192E_EXTEND_IND = 0xFF,
|
||||
MAX_8192E_C2HEVENT
|
||||
}RTL8192E_C2H_EVT;
|
||||
|
||||
typedef enum _RTL8192E_EXTEND_C2H_EVT
|
||||
{
|
||||
EXTEND_C2H_8192E_DBG_PRINT = 0
|
||||
|
||||
}RTL8192E_EXTEND_C2H_EVT;
|
||||
|
||||
RT_STATUS
|
||||
StopHW_8192ES(
|
||||
IN HAL_PADAPTER Adapter
|
||||
);
|
||||
|
||||
RT_STATUS
|
||||
InitPON_8192ES(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN u4Byte ClkSel
|
||||
)
|
||||
{
|
||||
u32 bytetmp;
|
||||
u32 retry;
|
||||
u8 redo = 0;
|
||||
|
||||
RT_TRACE_F( COMP_INIT, DBG_LOUD, ("\n"));
|
||||
|
||||
HAL_RTL_W8(REG_RSV_CTRL, 0x00);
|
||||
|
||||
// Add by Eric 2013/01/24
|
||||
// For 92E MP chip, power on sometimes crystal clk setting error
|
||||
// clk set 25M, value 0x00
|
||||
if(ClkSel == XTAL_CLK_SEL_25M) {
|
||||
HAL_RTL_W16(REG_AFE_CTRL4, 0x002a);
|
||||
HAL_RTL_W8(REG_AFE_CTRL2, 5);
|
||||
} else if (ClkSel == XTAL_CLK_SEL_40M){
|
||||
HAL_RTL_W16(REG_AFE_CTRL4, 0x002a);
|
||||
HAL_RTL_W8(REG_AFE_CTRL2, 1);
|
||||
}
|
||||
|
||||
//pattern Patching EQC fail IC(AFE issue)
|
||||
//Setting is suggested by SD1-Pisa
|
||||
//Set 0x78[21] = 0, 0x28[6] = 0
|
||||
//0x28[6] = 0 is done by XTAL seletion 0x28[6] = 0
|
||||
HAL_RTL_W32(REG_AFE_CTRL4, HAL_RTL_R32(REG_AFE_CTRL4) & ~BIT21);
|
||||
|
||||
redo_pon:
|
||||
/* enable power cut first */
|
||||
HAL_RTL_W16(0x20, HAL_RTL_R16(0x20) | BIT0 | BIT8);
|
||||
printk("start power seq \n");
|
||||
|
||||
msleep(10);//HAL_delay_ms(5);
|
||||
|
||||
if (!HalPwrSeqCmdParsing88XX(Adapter, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
|
||||
PWR_INTF_SDIO_MSK, rtl8192E_card_enable_flow))
|
||||
{
|
||||
RT_TRACE( COMP_INIT, DBG_SERIOUS, ("%s %d, HalPwrSeqCmdParsing init fail!!!\n", __FUNCTION__, __LINE__));
|
||||
if (redo < 5) {
|
||||
redo++;
|
||||
StopHW_8192ES(Adapter);
|
||||
goto redo_pon;
|
||||
}
|
||||
return RT_STATUS_FAILURE;
|
||||
}
|
||||
|
||||
// Power on when re-enter from IPS/Radio off/card disable
|
||||
HAL_RTL_W8(REG_AFE_CTRL1, HAL_RTL_R8(REG_AFE_CTRL1) | BIT0);
|
||||
|
||||
bytetmp = HAL_RTL_R16(REG_SYS_PW_CTRL);
|
||||
bytetmp &= 0xE7ff;
|
||||
bytetmp |= 0x0800;
|
||||
HAL_RTL_W16(REG_SYS_PW_CTRL, bytetmp);
|
||||
|
||||
while (!((bytetmp = HAL_RTL_R32(REG_SYS_PW_CTRL)) & 0x00020000)) ;
|
||||
|
||||
bytetmp = HAL_RTL_R16(REG_SYS_PW_CTRL);
|
||||
bytetmp &= 0x7FFF;
|
||||
HAL_RTL_W16(REG_SYS_PW_CTRL, bytetmp);
|
||||
|
||||
bytetmp = HAL_RTL_R16(REG_SYS_PW_CTRL);
|
||||
bytetmp &= 0xE7ff;
|
||||
bytetmp |= 0x0000;
|
||||
HAL_RTL_W16(REG_SYS_PW_CTRL, bytetmp);
|
||||
|
||||
HAL_delay_ms(1);
|
||||
|
||||
// auto enable WLAN
|
||||
// Power On Reset for MAC Block
|
||||
bytetmp = HAL_RTL_R8(REG_SYS_PW_CTRL+1) | BIT(0);
|
||||
HAL_delay_us(2);
|
||||
HAL_RTL_W8(REG_SYS_PW_CTRL+1, bytetmp);
|
||||
HAL_delay_us(2);
|
||||
|
||||
bytetmp = HAL_RTL_R8(REG_SYS_PW_CTRL+1);
|
||||
HAL_delay_us(2);
|
||||
retry = 0;
|
||||
while((bytetmp & BIT(0)) && retry < 1000){
|
||||
retry++;
|
||||
HAL_delay_us(50);
|
||||
bytetmp = HAL_RTL_R8(REG_SYS_PW_CTRL+1);
|
||||
HAL_delay_us(50);
|
||||
}
|
||||
|
||||
RT_TRACE(COMP_INIT, DBG_WARNING, ("%s: RTL_R8(APS_FSMCO+1) retry times=%d\n", (char *)__FUNCTION__, retry) );
|
||||
|
||||
RT_TRACE(COMP_INIT, DBG_TRACE, ("FSMCO11=0x%x\n", HAL_RTL_R32(REG_SYS_PW_CTRL)) );
|
||||
|
||||
if (bytetmp & BIT(0)) {
|
||||
RT_TRACE(COMP_INIT, DBG_SERIOUS, ("%s ERROR: auto enable WLAN failed!!(0x%02X)\n", __FUNCTION__, bytetmp) );
|
||||
}
|
||||
|
||||
HAL_RTL_W8(REG_RSV_CTRL+1, HAL_RTL_R8(REG_RSV_CTRL+1) & ~BIT0);
|
||||
HAL_RTL_W16(REG_SYS_FUNC_EN, HAL_RTL_R16(REG_SYS_FUNC_EN) & ~BIT_FEN_CPUEN);
|
||||
|
||||
HAL_delay_us(2);
|
||||
|
||||
// check LDO mode
|
||||
if (HAL_RTL_R32(REG_SYS_CFG1) & BIT24) {
|
||||
// LDO mode set 0x7C
|
||||
HAL_RTL_W8(REG_LDO_SWR_CTRL, 0xc3);
|
||||
} else {
|
||||
// SPS mode
|
||||
HAL_RTL_W8(REG_LDO_SWR_CTRL, 0x83);
|
||||
}
|
||||
|
||||
return RT_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
RT_STATUS
|
||||
StopHW8192EE(
|
||||
IN HAL_PADAPTER Adapter
|
||||
)
|
||||
{
|
||||
// TODO:
|
||||
|
||||
return RT_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
VOID
|
||||
InitIMR_8192ES(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN RT_OP_MODE OPMode
|
||||
)
|
||||
{
|
||||
InitSdioInterrupt(Adapter);
|
||||
}
|
||||
|
||||
VOID
|
||||
EnableIMR_8192ES(
|
||||
IN HAL_PADAPTER Adapter
|
||||
)
|
||||
{
|
||||
EnableSdioInterrupt(Adapter);
|
||||
}
|
||||
|
||||
RT_STATUS
|
||||
StopHW_8192ES(
|
||||
IN HAL_PADAPTER Adapter
|
||||
)
|
||||
{
|
||||
HAL_RTL_W8(REG_RSV_CTRL, HAL_RTL_R8(REG_RSV_CTRL)& ~BIT(1));//unlock reg0x00~0x03 for 8881a, 92e
|
||||
|
||||
//MCU reset
|
||||
HAL_RTL_W8(REG_RSV_CTRL+1, HAL_RTL_R8(REG_RSV_CTRL+1) & ~BIT0);
|
||||
HAL_RTL_W16(REG_SYS_FUNC_EN, HAL_RTL_R16(REG_SYS_FUNC_EN) & ~BIT10);
|
||||
|
||||
// Run LPS WL RFOFF flow
|
||||
if (_FALSE == HalPwrSeqCmdParsing88XX(Adapter, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
|
||||
PWR_INTF_SDIO_MSK, rtl8192E_enter_lps_flow)) {
|
||||
RT_TRACE(COMP_INIT, DBG_SERIOUS, ("rtl8192E_enter_lps_flow\n"));
|
||||
}
|
||||
|
||||
// Disable CMD53 R/W Operation
|
||||
GET_HAL_INTF_DATA(Adapter)->bMacPwrCtrlOn = FALSE;
|
||||
|
||||
// Card disable power action flow
|
||||
if (_FALSE == HalPwrSeqCmdParsing88XX(Adapter, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
|
||||
PWR_INTF_SDIO_MSK, rtl8192E_card_disable_flow)) {
|
||||
RT_TRACE(COMP_INIT, DBG_SERIOUS, ("rtl8192E_card_disable_flow\n"));
|
||||
}
|
||||
|
||||
// Reset IO Wraper
|
||||
HAL_RTL_W8(REG_RSV_CTRL+1, HAL_RTL_R8(REG_RSV_CTRL+1) & ~BIT(3));
|
||||
HAL_RTL_W8(REG_RSV_CTRL+1, HAL_RTL_R8(REG_RSV_CTRL+1) | BIT(3));
|
||||
|
||||
// lock ISO/CLK/Power control register
|
||||
HAL_RTL_W8(REG_RSV_CTRL, 0x0e);
|
||||
|
||||
return RT_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
#if CFG_HAL_SUPPORT_MBSSID
|
||||
VOID
|
||||
InitMBSSID_8192ES(
|
||||
IN HAL_PADAPTER Adapter
|
||||
)
|
||||
{
|
||||
rtl8192cd_init_mbssid(Adapter);
|
||||
}
|
||||
|
||||
VOID
|
||||
StopMBSSID_8192ES(
|
||||
IN HAL_PADAPTER Adapter
|
||||
)
|
||||
{
|
||||
rtl8192cd_stop_mbssid(Adapter);
|
||||
}
|
||||
#endif
|
||||
|
||||
RT_STATUS
|
||||
SetMACIDSleep_8192ES(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
IN BOOLEAN bSleep,
|
||||
IN u4Byte aid
|
||||
)
|
||||
{
|
||||
notify_macid_pause_change(Adapter, aid, bSleep);
|
||||
|
||||
return RT_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
void
|
||||
UpdateHalMSRRPT_8192ES(
|
||||
IN HAL_PADAPTER Adapter,
|
||||
HAL_PSTAINFO pEntry,
|
||||
u1Byte opmode
|
||||
)
|
||||
{
|
||||
UpdateHalMSRRPT88XX(Adapter, pEntry, opmode);
|
||||
}
|
||||
|
||||
|
||||
RT_STATUS
|
||||
hal_Associate_8192ES(
|
||||
HAL_PADAPTER Adapter,
|
||||
BOOLEAN IsDefaultAdapter
|
||||
)
|
||||
{
|
||||
PHAL_INTERFACE pHalFunc = GET_HAL_INTERFACE(Adapter);
|
||||
PHAL_DATA_TYPE pHalData = _GET_HAL_DATA(Adapter);
|
||||
|
||||
//
|
||||
//Initialization Related
|
||||
//
|
||||
pHalData->AccessSwapCtrl = HAL_ACCESS_SWAP_MEM;
|
||||
pHalFunc->InitPONHandler = InitPON_8192ES;
|
||||
pHalFunc->InitMACHandler = InitMAC88XX;
|
||||
pHalFunc->InitFirmwareHandler = InitFirmware88XX;
|
||||
#if CFG_HAL_SUPPORT_MBSSID
|
||||
pHalFunc->InitMBSSIDHandler = InitMBSSID_8192ES;
|
||||
pHalFunc->InitMBIDCAMHandler = InitMBIDCAM88XX;
|
||||
#endif //CFG_HAL_SUPPORT_MBSSID
|
||||
pHalFunc->InitLLT_TableHandler = InitLLT_Table88XX;
|
||||
#ifdef MULTI_MAC_CLONE
|
||||
pHalFunc->McloneSetMBSSIDHandler = McloneSetMBSSID88XX;
|
||||
pHalFunc->McloneStopMBSSIDHandler = McloneStopMBSSID88XX;
|
||||
#endif
|
||||
pHalFunc->SetMBIDCAMHandler = SetMBIDCAM88XX;
|
||||
pHalFunc->InitVAPIMRHandler = InitVAPIMR88XX;
|
||||
|
||||
|
||||
//
|
||||
//Stop Related
|
||||
//
|
||||
#if CFG_HAL_SUPPORT_MBSSID
|
||||
pHalFunc->StopMBSSIDHandler = StopMBSSID_8192ES;
|
||||
#endif //CFG_HAL_SUPPORT_MBSSID
|
||||
pHalFunc->StopHWHandler = StopHW_8192ES;
|
||||
pHalFunc->StopSWHandler = StopSW88XX;
|
||||
pHalFunc->DisableVXDAPHandler = DisableVXDAP88XX;
|
||||
pHalFunc->StopMBIDCAMHandler = StopMBIDCAM88XX;
|
||||
pHalFunc->ResetHWForSurpriseHandler = ResetHWForSurprise88XX;
|
||||
|
||||
//
|
||||
//ISR Related
|
||||
//
|
||||
pHalFunc->InitIMRHandler = InitIMR_8192ES;
|
||||
pHalFunc->EnableIMRHandler = EnableIMR_8192ES;
|
||||
|
||||
//
|
||||
//Tx Related
|
||||
//
|
||||
|
||||
//
|
||||
//Rx Related
|
||||
//
|
||||
|
||||
//
|
||||
// General operation
|
||||
//
|
||||
pHalFunc->GetChipIDMIMOHandler = GetChipIDMIMO88XX;
|
||||
pHalFunc->SetHwRegHandler = SetHwReg88XX;
|
||||
pHalFunc->GetHwRegHandler = GetHwReg88XX;
|
||||
pHalFunc->SetMACIDSleepHandler = SetMACIDSleep_8192ES;
|
||||
pHalFunc->CheckHangHandler = CheckHang88XX;
|
||||
pHalFunc->GetMACIDQueueInTXPKTBUFHandler= GetMACIDQueueInTXPKTBUF88XX;
|
||||
|
||||
//
|
||||
// Timer Related
|
||||
//
|
||||
pHalFunc->Timer1SecHandler = Timer1Sec88XX;
|
||||
#if CFG_HAL_MACDM
|
||||
InitMACDM88XX(Adapter);
|
||||
pHalFunc->Timer1SecDMHandler = Timer1SecDM88XX;
|
||||
#endif //CFG_HAL_MACDM
|
||||
//
|
||||
// Security Related
|
||||
//
|
||||
pHalFunc->CAMReadMACConfigHandler = CAMReadMACConfig88XX;
|
||||
pHalFunc->CAMEmptyEntryHandler = CAMEmptyEntry88XX;
|
||||
pHalFunc->CAMFindUsableHandler = CAMFindUsable88XX;
|
||||
pHalFunc->CAMProgramEntryHandler = CAMProgramEntry88XX;
|
||||
|
||||
|
||||
//
|
||||
// PHY/RF Related
|
||||
//
|
||||
pHalFunc->PHYSetCCKTxPowerHandler = PHYSetCCKTxPower88XX_N;
|
||||
pHalFunc->PHYSetOFDMTxPowerHandler = PHYSetOFDMTxPower88XX_N;
|
||||
pHalFunc->PHYSwBWModeHandler = SwBWMode88XX_N;
|
||||
//pHalFunc->TXPowerTrackingHandler = TXPowerTracking_ThermalMeter_88XX;
|
||||
pHalFunc->PHYSSetRFRegHandler = PHY_SetRFReg_88XX_N;
|
||||
pHalFunc->PHYQueryRFRegHandler = PHY_QueryRFReg_88XX_N;
|
||||
pHalFunc->IsBBRegRangeHandler = IsBBRegRange88XX;
|
||||
|
||||
|
||||
//
|
||||
// Firmware CMD IO related
|
||||
//
|
||||
pHalData->H2CBufPtr88XX = 0;
|
||||
pHalData->bFWReady = _FALSE;
|
||||
pHalFunc->FillH2CCmdHandler = FillH2CCmd88XX;
|
||||
pHalFunc->UpdateHalRAMaskHandler = UpdateHalRAMask88XX;
|
||||
pHalFunc->UpdateHalMSRRPTHandler = UpdateHalMSRRPT_8192ES;
|
||||
|
||||
#ifdef SDIO_AP_OFFLOAD
|
||||
#if defined(SOFTAP_PS_DURATION) || defined(CONFIG_POWER_SAVE)
|
||||
pHalFunc->SetSAPPsHandler = SetSAPPS88XX;
|
||||
#endif
|
||||
pHalFunc->SetAPOffloadHandler = SetAPOffload88XX;
|
||||
pHalFunc->SetRsvdPageHandler = SetRsvdPage88XX;
|
||||
pHalFunc->GetRsvdPageLocHandler = GetRsvdPageLoc88XX;
|
||||
#endif // SDIO_AP_OFFLOAD
|
||||
|
||||
// pHalFunc->DownloadRsvdPageHandler = DownloadRsvdPage88XX;
|
||||
pHalFunc->C2HHandler = C2HHandler88XX;
|
||||
pHalFunc->C2HPacketHandler = C2HPacketHandler_92E;
|
||||
|
||||
return RT_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
InitMAC8192EE(
|
||||
IN HAL_PADAPTER Adapter
|
||||
)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
VOID
|
||||
C2HTxTxReportHandler_92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
pu1Byte CmdBuf,
|
||||
u1Byte CmdLen
|
||||
)
|
||||
{
|
||||
struct tx_rpt rpt1;
|
||||
int k=0, j=0;
|
||||
for(j=0; j<2; j++) {
|
||||
rpt1.macid= CmdBuf[k];
|
||||
rpt1.txok = CmdBuf[k+1] | ((short)CmdBuf[k+2]<<8);
|
||||
rpt1.txfail = CmdBuf[k+3] | ((short)CmdBuf[k+4]<<8);
|
||||
rpt1.initil_tx_rate = CmdBuf[k+5];
|
||||
if(rpt1.macid != 0xff)
|
||||
txrpt_handler(priv, &rpt1);
|
||||
k+=6;
|
||||
}
|
||||
}
|
||||
|
||||
VOID
|
||||
_C2HContentParsing92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
u1Byte c2hCmdId,
|
||||
u1Byte c2hCmdLen,
|
||||
pu1Byte tmpBuf
|
||||
)
|
||||
{
|
||||
switch(c2hCmdId)
|
||||
{
|
||||
case C2H_8192E_TXBF:
|
||||
#ifdef BEAMFORMING_SUPPORT
|
||||
C2HTxBeamformingHandler_92E(priv, tmpBuf, c2hCmdLen);
|
||||
#endif
|
||||
break;
|
||||
case C2H_8192E_TX_RATE:
|
||||
#ifdef TXREPORT
|
||||
C2HTxTxReportHandler_92E(priv, tmpBuf, c2hCmdLen);
|
||||
//requestTxReport88XX(priv);
|
||||
notify_request_tx_report(priv);
|
||||
#endif
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!(phydm_c2H_content_parsing(ODMPTR, c2hCmdId, c2hCmdLen, tmpBuf))) {
|
||||
printk("[C2H], Unkown packet!! CmdId(%#X)!\n", c2hCmdId);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
VOID
|
||||
C2HPacketHandler_92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
pu1Byte Buffer,
|
||||
u1Byte Length
|
||||
)
|
||||
{
|
||||
u1Byte c2hCmdId=0, c2hCmdSeq=0, c2hCmdLen=0;
|
||||
pu1Byte tmpBuf=NULL;
|
||||
c2hCmdId = Buffer[0];
|
||||
c2hCmdSeq = Buffer[1];
|
||||
/*
|
||||
if(c2hCmdId==C2H_88XX_EXTEND_IND)
|
||||
{
|
||||
c2hCmdLen = Length;
|
||||
tmpBuf = Buffer;
|
||||
C2HExtEventHandler88XX(NULL, c2hCmdId, c2hCmdLen, tmpBuf);
|
||||
}
|
||||
else
|
||||
*/
|
||||
{
|
||||
c2hCmdLen = Length -2;
|
||||
tmpBuf = Buffer+2;
|
||||
|
||||
_C2HContentParsing92E(priv, c2hCmdId, c2hCmdLen, tmpBuf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef BEAMFORMING_SUPPORT
|
||||
|
||||
VOID
|
||||
SetBeamformRfMode92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
PRT_BEAMFORMING_INFO pBeamformingInfo
|
||||
)
|
||||
{
|
||||
u1Byte i;
|
||||
BOOLEAN bSelfBeamformer = FALSE;
|
||||
BOOLEAN bSelfBeamformee = FALSE;
|
||||
RT_BEAMFORMING_ENTRY BeamformEntry;
|
||||
BEAMFORMING_CAP BeamformCap = BEAMFORMING_CAP_NONE;
|
||||
|
||||
BeamformCap = Beamforming_GetBeamCap(pBeamformingInfo);
|
||||
|
||||
if(BeamformCap == pBeamformingInfo->BeamformCap)
|
||||
return;
|
||||
else
|
||||
pBeamformingInfo->BeamformCap = BeamformCap;
|
||||
|
||||
if(get_rf_mimo_mode(priv) == MIMO_1T1R)
|
||||
return;
|
||||
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_A, RF_WE_LUT, 0x80000,0x1); // RF Mode table write enable
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_B, RF_WE_LUT, 0x80000,0x1); // RF Mode table write enable
|
||||
|
||||
bSelfBeamformer = BeamformCap & BEAMFORMER_CAP;
|
||||
bSelfBeamformee = BeamformCap & BEAMFORMEE_CAP;
|
||||
|
||||
if(bSelfBeamformer)
|
||||
{
|
||||
// Path_A
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_A, RF_RCK_OS, 0xfffff,0x18000); // Select RX mode 0x30=0x18000
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_A, RF_TXPA_G1, 0xfffff,0x0000f); // Set Table data
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_A, RF_TXPA_G2, 0xfffff,0x77fc2); // Enable TXIQGEN in RX mode
|
||||
// Path_B
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_B, RF_RCK_OS, 0xfffff,0x18000); // Select RX mode
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_B, RF_TXPA_G1, 0xfffff,0x0000f); // Set Table data
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_B, RF_TXPA_G2, 0xfffff,0x77fc2); // Enable TXIQGEN in RX mode
|
||||
}
|
||||
else
|
||||
{
|
||||
// Paath_A
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_A, RF_RCK_OS, 0xfffff,0x18000); // Select RX mode
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_A, RF_TXPA_G1, 0xfffff,0x0000f); // Set Table data
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_A, RF_TXPA_G2, 0xfffff,0x77f82); // Disable TXIQGEN in RX mode
|
||||
// Path_B
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_B, RF_RCK_OS, 0xfffff,0x18000); // Select RX mode
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_B, RF_TXPA_G1, 0xfffff,0x0000f); // Set Table data
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_B, RF_TXPA_G2, 0xfffff,0x77f82); // Disable TXIQGEN in RX mode
|
||||
}
|
||||
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_A, RF_WE_LUT, 0x80000,0x0); // RF Mode table write disable
|
||||
PHY_SetRFReg(priv, ODM_RF_PATH_B, RF_WE_LUT, 0x80000,0x0); // RF Mode table write disable
|
||||
|
||||
if(bSelfBeamformer){
|
||||
PHY_SetBBReg(priv, 0x90c, 0xffffffff, 0x83321333);
|
||||
PHY_SetBBReg(priv, 0xa04, BIT31|BIT30, 0x3);
|
||||
#ifdef RF_MIMO_SWITCH
|
||||
priv->pshare->rf_phy_bb_backup[19] = 0x83321333;
|
||||
priv->pshare->rf_phy_bb_backup[22] |= BIT31|BIT30;
|
||||
#endif
|
||||
|
||||
}
|
||||
else {
|
||||
PHY_SetBBReg(priv, 0x90c, 0xffffffff, 0x81121313);
|
||||
#ifdef RF_MIMO_SWITCH
|
||||
priv->pshare->rf_phy_bb_backup[19] = 0x81121313;
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
VOID
|
||||
SetBeamformEnter92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
u1Byte BFerBFeeIdx
|
||||
)
|
||||
{
|
||||
u1Byte i = 0;
|
||||
u1Byte BFerIdx = (BFerBFeeIdx & 0xF0)>>4;
|
||||
u1Byte BFeeIdx = (BFerBFeeIdx & 0xF);
|
||||
u4Byte CSI_Param;
|
||||
PRT_BEAMFORMING_INFO pBeamformingInfo = &(priv->pshare->BeamformingInfo);
|
||||
RT_BEAMFORMING_ENTRY BeamformeeEntry;
|
||||
RT_BEAMFORMER_ENTRY BeamformerEntry;
|
||||
u2Byte STAid = 0;
|
||||
|
||||
SetBeamformRfMode92E(priv, pBeamformingInfo);
|
||||
|
||||
if(get_rf_mimo_mode(priv) == MIMO_2T2R)
|
||||
RTL_W32(0xD80, 0x01081008);
|
||||
|
||||
if((pBeamformingInfo->BeamformCap & BEAMFORMEE_CAP) && (BFerIdx < BEAMFORMER_ENTRY_NUM))
|
||||
{
|
||||
BeamformerEntry = pBeamformingInfo->BeamformerEntry[BFerIdx];
|
||||
//eric-8813
|
||||
if (IS_TEST_CHIP(priv))
|
||||
RTL_W8( REG_SND_PTCL_CTRL, 0x1B); // Disable SIG-B CRC8 check
|
||||
else
|
||||
RTL_W8( REG_SND_PTCL_CTRL, 0xCB);
|
||||
|
||||
// MAC addresss/Partial AID of Beamformer
|
||||
if(BFerIdx == 0)
|
||||
{
|
||||
for(i = 0; i < 6 ; i++)
|
||||
RTL_W8( (REG_ASSOCIATED_BFMER0_INFO+i), BeamformerEntry.MacAddr[i]);
|
||||
|
||||
RTL_W16( REG_ASSOCIATED_BFMER0_INFO+6, BeamformerEntry.P_AID);
|
||||
}
|
||||
else
|
||||
{
|
||||
for(i = 0; i < 6 ; i++)
|
||||
RTL_W8( (REG_ASSOCIATED_BFMER1_INFO+i), BeamformerEntry.MacAddr[i]);
|
||||
|
||||
RTL_W16( REG_ASSOCIATED_BFMER1_INFO+6, BeamformerEntry.P_AID);
|
||||
}
|
||||
|
||||
// CSI report parameters of Beamformer
|
||||
CSI_Param = 0x03090309;//Nc =2, V matrix
|
||||
RTL_W32( REG_TX_CSI_RPT_PARAM_BW20, CSI_Param);
|
||||
RTL_W32( REG_TX_CSI_RPT_PARAM_BW40, CSI_Param);
|
||||
|
||||
// Timeout value for MAC to leave NDP_RX_standby_state 60 us
|
||||
// RTL_W8( REG_SND_PTCL_CTRL_8812+3, 0x3C);
|
||||
RTL_W8( REG_SND_PTCL_CTRL+3, 0x50); // // ndp_rx_standby_timer
|
||||
}
|
||||
|
||||
if((pBeamformingInfo->BeamformCap & BEAMFORMER_CAP) && (BFeeIdx < BEAMFORMEE_ENTRY_NUM))
|
||||
{
|
||||
BeamformeeEntry = pBeamformingInfo->BeamformeeEntry[BFeeIdx];
|
||||
|
||||
if(OPMODE & WIFI_ADHOC_STATE)
|
||||
STAid = BeamformeeEntry.AID;
|
||||
else
|
||||
STAid = BeamformeeEntry.P_AID;
|
||||
|
||||
// P_AID of Beamformee & enable NDPA transmission
|
||||
if(BFeeIdx == 0)
|
||||
{
|
||||
RTL_W16( REG_TXBF_CTRL, STAid);
|
||||
RTL_W8( REG_TXBF_CTRL+3, RTL_R8( REG_TXBF_CTRL+3)|BIT6|BIT7|BIT4);
|
||||
}
|
||||
else
|
||||
{
|
||||
RTL_W16( REG_TXBF_CTRL+2, STAid |BIT14| BIT15|BIT12);
|
||||
}
|
||||
|
||||
// CSI report parameters of Beamformee
|
||||
if(BFeeIdx == 0)
|
||||
{
|
||||
// Get BIT24 & BIT25
|
||||
u1Byte tmp = RTL_R8( REG_ASSOCIATED_BFMEE_SEL+3) & 0x3;
|
||||
RTL_W8( REG_ASSOCIATED_BFMEE_SEL+3, tmp | 0x60);
|
||||
RTL_W16( REG_ASSOCIATED_BFMEE_SEL, STAid | BIT9);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set BIT25
|
||||
RTL_W16( REG_ASSOCIATED_BFMEE_SEL+2, STAid | 0xE200);
|
||||
}
|
||||
|
||||
// if(pHalData->bIsMPChip == FALSE)
|
||||
if (IS_TEST_CHIP(priv))
|
||||
{
|
||||
// VHT category value
|
||||
RTL_W8( REG_SND_PTCL_CTRL+1, ACT_CAT_VHT);
|
||||
// NDPA subtype
|
||||
RTL_W8( REG_SND_PTCL_CTRL+2, Type_NDPA >> 4);
|
||||
}
|
||||
|
||||
Beamforming_Notify(priv);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
VOID
|
||||
SetBeamformLeave92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
u1Byte Idx
|
||||
)
|
||||
{
|
||||
PRT_BEAMFORMING_INFO pBeamformingInfo = &(priv->pshare->BeamformingInfo);
|
||||
RT_BEAMFORMING_ENTRY BeamformeeEntry = pBeamformingInfo->BeamformeeEntry[Idx];
|
||||
RT_BEAMFORMER_ENTRY BeamformerEntry = pBeamformingInfo->BeamformerEntry[Idx];
|
||||
|
||||
/* Clear P_AID of Beamformee
|
||||
* Clear MAC addresss of Beamformer
|
||||
* Clear Associated Bfmee Sel
|
||||
*/
|
||||
|
||||
if (BeamformeeEntry.BeamformEntryCap == BEAMFORMING_CAP_NONE)
|
||||
{
|
||||
if(Idx == 0)
|
||||
{
|
||||
RTL_W16( REG_TXBF_CTRL, 0);
|
||||
RTL_W16( REG_ASSOCIATED_BFMEE_SEL, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
RTL_W16( REG_TXBF_CTRL+2, RTL_R16( REG_TXBF_CTRL+2) & 0xF000);
|
||||
RTL_W16( REG_ASSOCIATED_BFMEE_SEL+2, RTL_R16( REG_ASSOCIATED_BFMEE_SEL+2) & 0x60);
|
||||
}
|
||||
}
|
||||
|
||||
if (BeamformerEntry.BeamformEntryCap == BEAMFORMING_CAP_NONE)
|
||||
{
|
||||
if(Idx == 0)
|
||||
{
|
||||
RTL_W32( REG_ASSOCIATED_BFMER0_INFO, 0);
|
||||
RTL_W16( REG_ASSOCIATED_BFMER0_INFO+4, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
RTL_W32( REG_ASSOCIATED_BFMER1_INFO, 0);
|
||||
RTL_W16( REG_ASSOCIATED_BFMER1_INFO+4, 0);
|
||||
}
|
||||
}
|
||||
|
||||
if(((pBeamformingInfo->BeamformerEntry[0]).BeamformEntryCap == BEAMFORMING_CAP_NONE)
|
||||
&& ((pBeamformingInfo->BeamformerEntry[1]).BeamformEntryCap == BEAMFORMING_CAP_NONE)){
|
||||
ODM_RT_TRACE(ODMPTR, BEAMFORMING_DEBUG, ODM_DBG_LOUD, ("[Beamforming]@%s, All BeamformerEntryCap == NONE, STOP feedback CSI\n", __FUNCTION__));
|
||||
RTL_W8( REG_SND_PTCL_CTRL, 0xC8);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
VOID
|
||||
SetBeamformStatus92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
u1Byte Idx
|
||||
)
|
||||
{
|
||||
u2Byte BeamCtrlVal;
|
||||
u4Byte BeamCtrlReg;
|
||||
// PRT_BEAMFORMING_INFO pBeamformingInfo = GET_BEAMFORM_INFO(&(Adapter->MgntInfo));
|
||||
PRT_BEAMFORMING_INFO pBeamformingInfo = &(priv->pshare->BeamformingInfo);
|
||||
RT_BEAMFORMING_ENTRY BeamformEntry = pBeamformingInfo->BeamformeeEntry[Idx];
|
||||
|
||||
// if(ACTING_AS_IBSS(Adapter))
|
||||
if(OPMODE & WIFI_ADHOC_STATE)
|
||||
BeamCtrlVal = BeamformEntry.MacId;
|
||||
else
|
||||
BeamCtrlVal = BeamformEntry.P_AID;
|
||||
|
||||
if(Idx == 0)
|
||||
BeamCtrlReg = REG_TXBF_CTRL;
|
||||
else
|
||||
{
|
||||
BeamCtrlReg = REG_TXBF_CTRL+2;
|
||||
BeamCtrlVal |= BIT12 | BIT14|BIT15;
|
||||
}
|
||||
// debug
|
||||
#if 1
|
||||
if(BeamformEntry.BeamformEntryState == BEAMFORMING_ENTRY_STATE_PROGRESSED)
|
||||
{
|
||||
|
||||
// panic_printk("%d%s BW = %d\n",__LINE__,__FUNCTION__,BeamformEntry.BW);
|
||||
if(BeamformEntry.BW == HT_CHANNEL_WIDTH_20)
|
||||
BeamCtrlVal |= BIT9;
|
||||
else if(BeamformEntry.BW == HT_CHANNEL_WIDTH_20_40)
|
||||
BeamCtrlVal |= (BIT9 | BIT10);
|
||||
else if(BeamformEntry.BW == HT_CHANNEL_WIDTH_80)
|
||||
BeamCtrlVal |= (BIT9 | BIT10 | BIT11);
|
||||
}
|
||||
#endif
|
||||
|
||||
else
|
||||
{
|
||||
BeamCtrlVal &= ~(BIT9|BIT10|BIT11);
|
||||
}
|
||||
|
||||
|
||||
// PlatformEFIOWrite2Byte(Adapter, BeamCtrlReg, BeamCtrlVal);
|
||||
RTL_W16(BeamCtrlReg, BeamCtrlVal);
|
||||
|
||||
// panic_printk("%s Idx %d BeamCtrlReg %x BeamCtrlVal %x, bw=%d\n", __FUNCTION__, Idx, BeamCtrlReg, BeamCtrlVal, BeamformEntry.BW);
|
||||
}
|
||||
|
||||
|
||||
//2REG_C2HEVT_CLEAR
|
||||
#define C2H_EVT_HOST_CLOSE 0x00 // Set by driver and notify FW that the driver has read the C2H command message
|
||||
#define C2H_EVT_FW_CLOSE 0xFF // Set by FW indicating that FW had set the C2H command message and it's not yet read by driver.
|
||||
|
||||
|
||||
|
||||
VOID Beamforming_NDPARate_92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
BOOLEAN Mode,
|
||||
u1Byte BW,
|
||||
u1Byte Rate)
|
||||
{
|
||||
|
||||
#if 1
|
||||
u2Byte NDPARate = Rate;
|
||||
|
||||
if(NDPARate == 0)
|
||||
{
|
||||
// ???
|
||||
#if 0
|
||||
if(Mode == 1 || Mode == 4)
|
||||
NDPARate = 0x0c; //MGN_MCS0;
|
||||
else
|
||||
NDPARate = 0x2c; //MGN_VHT1SS_MCS0;
|
||||
#else
|
||||
if(priv->pshare->rssi_min > 30) // link RSSI > 30%
|
||||
NDPARate = 8; //MGN_24M
|
||||
else
|
||||
NDPARate = 4; //MGN_6M
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
if(NDPARate < 0x0c)
|
||||
BW = HT_CHANNEL_WIDTH_20;
|
||||
|
||||
RTL_W8(REG_NDPA_OPT_CTRL, (NDPARate<<2) | (BW & 0x03));
|
||||
|
||||
#else
|
||||
{
|
||||
if(mode ==0) {
|
||||
#if 1
|
||||
rate = 11; // 54M
|
||||
BW = 0;
|
||||
#else
|
||||
rate = 0x0c; //_MCS0_RATE_;
|
||||
if(BW ==3)
|
||||
BW= 2;
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
rate = 0x2c; //_NSS1_MCS0_RATE_;
|
||||
|
||||
}
|
||||
}
|
||||
RTL_W8(0x45f, (rate<<2) | (BW & 0x03));
|
||||
#endif
|
||||
}
|
||||
|
||||
// V1
|
||||
#if 0
|
||||
void TXBF_timer_callback(unsigned long task_priv)
|
||||
{
|
||||
struct rtl8192cd_priv *priv = (struct rtl8192cd_priv *)task_priv;
|
||||
struct stat_info *pstat;
|
||||
struct list_head *phead, *plist;
|
||||
unsigned long flags;
|
||||
|
||||
if(!priv->pmib->dot11RFEntry.txbf)
|
||||
return;
|
||||
|
||||
SAVE_INT_AND_CLI(flags);
|
||||
|
||||
phead = &priv->asoc_list;
|
||||
plist = phead->next;
|
||||
|
||||
// panic_printk(".");
|
||||
|
||||
// VAP ?
|
||||
|
||||
while(plist != phead)
|
||||
{
|
||||
pstat = list_entry(plist, struct stat_info, asoc_list);
|
||||
|
||||
// if(priv->pmib->dot11RFEntry.txbf == 1)
|
||||
if((pstat->ht_cap_len && (pstat->ht_cap_buf.txbf_cap)) ||
|
||||
(pstat->vht_cap_len && (cpu_to_le32(pstat->vht_cap_buf.vht_cap_info) & BIT(SU_BFEE_S))))
|
||||
|
||||
{
|
||||
// BeamformingInit(priv, pstat->hwaddr, pstat->aid);
|
||||
if(pstat->vht_cap_len) //_eric_txbf
|
||||
BeamformingControl(priv, pstat->hwaddr, pstat->aid, 2, pstat->tx_bw);
|
||||
else
|
||||
BeamformingControl(priv, pstat->hwaddr, pstat->aid, 3, pstat->tx_bw);
|
||||
}
|
||||
|
||||
|
||||
if (plist == plist->next)
|
||||
break;
|
||||
plist = plist->next;
|
||||
|
||||
};
|
||||
|
||||
RESTORE_INT(flags);
|
||||
|
||||
mod_timer(&priv->txbf_timer, jiffies + priv->pshare->rf_ft_var.soundingPeriod);
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
VOID
|
||||
C2HTxBeamformingHandler_92E(
|
||||
struct rtl8192cd_priv *priv,
|
||||
pu1Byte CmdBuf,
|
||||
u1Byte CmdLen
|
||||
)
|
||||
{
|
||||
u1Byte status = (CmdBuf[0] & BIT0);
|
||||
|
||||
// panic_printk("%d%s status = %d \n",__LINE__,__FUNCTION__,status);
|
||||
Beamforming_End(priv, status);
|
||||
}
|
||||
|
||||
VOID HW_VAR_HW_REG_TIMER_START_92E(struct rtl8192cd_priv *priv)
|
||||
{
|
||||
panic_printk("[%d][%s]\n",__LINE__,__FUNCTION__);
|
||||
RTL_W8(0x15F, 0x0);
|
||||
RTL_W8(0x15F, 0x5);
|
||||
|
||||
}
|
||||
|
||||
VOID HW_VAR_HW_REG_TIMER_INIT_92E(struct rtl8192cd_priv *priv, u2Byte t)
|
||||
{
|
||||
panic_printk("[%d][%s]\n",__LINE__,__FUNCTION__);
|
||||
RTL_W8(0x164, 1);
|
||||
RTL_W16(0x15C, t);
|
||||
|
||||
}
|
||||
|
||||
VOID HW_VAR_HW_REG_TIMER_STOP_92E(struct rtl8192cd_priv *priv)
|
||||
{
|
||||
panic_printk("[%d][%s]\n",__LINE__,__FUNCTION__);
|
||||
RTL_W8(0x15F, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user