Staging: rt28x0: run *.c files through Lindent
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Родитель
460bb8df1e
Коммит
66cd8d6ec9
|
@ -39,12 +39,10 @@
|
|||
|
||||
#include "../rt_config.h"
|
||||
|
||||
|
||||
#ifndef RTMP_RF_RW_SUPPORT
|
||||
#error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip"
|
||||
#endif // RTMP_RF_RW_SUPPORT //
|
||||
|
||||
|
||||
VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd)
|
||||
{
|
||||
INT i;
|
||||
|
@ -52,61 +50,55 @@ VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd)
|
|||
|
||||
// Driver must read EEPROM to get RfIcType before initial RF registers
|
||||
// Initialize RF register to default value
|
||||
if (IS_RT3070(pAd) || IS_RT3071(pAd))
|
||||
{
|
||||
if (IS_RT3070(pAd) || IS_RT3071(pAd)) {
|
||||
// Init RF calibration
|
||||
// Driver should toggle RF R30 bit7 before init RF registers
|
||||
UINT32 RfReg = 0;
|
||||
UINT32 data;
|
||||
|
||||
RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR)&RfReg);
|
||||
RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR) & RfReg);
|
||||
RfReg |= 0x80;
|
||||
RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg);
|
||||
RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg);
|
||||
RTMPusecDelay(1000);
|
||||
RfReg &= 0x7F;
|
||||
RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg);
|
||||
RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg);
|
||||
|
||||
// Initialize RF register to default value
|
||||
for (i = 0; i < NUM_RF_REG_PARMS; i++)
|
||||
{
|
||||
RT30xxWriteRFRegister(pAd, RT30xx_RFRegTable[i].Register, RT30xx_RFRegTable[i].Value);
|
||||
for (i = 0; i < NUM_RF_REG_PARMS; i++) {
|
||||
RT30xxWriteRFRegister(pAd,
|
||||
RT30xx_RFRegTable[i].Register,
|
||||
RT30xx_RFRegTable[i].Value);
|
||||
}
|
||||
|
||||
// add by johnli
|
||||
if (IS_RT3070(pAd))
|
||||
{
|
||||
if (IS_RT3070(pAd)) {
|
||||
//
|
||||
// The DAC issue(LDO_CFG0) has been fixed in RT3070(F).
|
||||
// The voltage raising patch is no longer needed for RT3070(F)
|
||||
//
|
||||
if ((pAd->MACVersion & 0xffff) < 0x0201)
|
||||
{
|
||||
if ((pAd->MACVersion & 0xffff) < 0x0201) {
|
||||
// Update MAC 0x05D4 from 01xxxxxx to 0Dxxxxxx (voltage 1.2V to 1.35V) for RT3070 to improve yield rate
|
||||
RTUSBReadMACRegister(pAd, LDO_CFG0, &data);
|
||||
data = ((data & 0xF0FFFFFF) | 0x0D000000);
|
||||
RTUSBWriteMACRegister(pAd, LDO_CFG0, data);
|
||||
}
|
||||
}
|
||||
else if (IS_RT3071(pAd))
|
||||
{
|
||||
} else if (IS_RT3071(pAd)) {
|
||||
// Driver should set RF R6 bit6 on before init RF registers
|
||||
RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR)&RfReg);
|
||||
RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR) & RfReg);
|
||||
RfReg |= 0x40;
|
||||
RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR)RfReg);
|
||||
RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR) RfReg);
|
||||
|
||||
// init R31
|
||||
RT30xxWriteRFRegister(pAd, RF_R31, 0x14);
|
||||
|
||||
// RT3071 version E has fixed this issue
|
||||
if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211))
|
||||
{
|
||||
if ((pAd->NicConfig2.field.DACTestBit == 1)
|
||||
&& ((pAd->MACVersion & 0xffff) < 0x0211)) {
|
||||
// patch tx EVM issue temporarily
|
||||
RTUSBReadMACRegister(pAd, LDO_CFG0, &data);
|
||||
data = ((data & 0xE0FFFFFF) | 0x0D000000);
|
||||
RTUSBWriteMACRegister(pAd, LDO_CFG0, data);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
RTMP_IO_READ32(pAd, LDO_CFG0, &data);
|
||||
data = ((data & 0xE0FFFFFF) | 0x01000000);
|
||||
RTMP_IO_WRITE32(pAd, LDO_CFG0, data);
|
||||
|
@ -117,8 +109,7 @@ VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd)
|
|||
data &= ~(0x20);
|
||||
RTUSBWriteMACRegister(pAd, GPIO_SWITCH, data);
|
||||
}
|
||||
|
||||
//For RF filter Calibration
|
||||
//For RF filter Calibration
|
||||
RTMPFilterCalibration(pAd);
|
||||
|
||||
// Initialize RF R27 register, set RF R27 must be behind RTMPFilterCalibration()
|
||||
|
@ -126,15 +117,12 @@ VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd)
|
|||
// TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F).
|
||||
// Raising RF voltage is no longer needed for RT3070(F)
|
||||
//
|
||||
if ((IS_RT3070(pAd)) && ((pAd->MACVersion & 0xffff) < 0x0201))
|
||||
{
|
||||
if ((IS_RT3070(pAd)) && ((pAd->MACVersion & 0xffff) < 0x0201)) {
|
||||
RT30xxWriteRFRegister(pAd, RF_R27, 0x3);
|
||||
} else if ((IS_RT3071(pAd))
|
||||
&& ((pAd->MACVersion & 0xffff) < 0x0211)) {
|
||||
RT30xxWriteRFRegister(pAd, RF_R27, 0x3);
|
||||
}
|
||||
else if ((IS_RT3071(pAd)) && ((pAd->MACVersion & 0xffff) < 0x0211))
|
||||
{
|
||||
RT30xxWriteRFRegister(pAd, RF_R27, 0x3);
|
||||
}
|
||||
|
||||
// set led open drain enable
|
||||
RTUSBReadMACRegister(pAd, OPT_14, &data);
|
||||
data |= 0x01;
|
||||
|
@ -145,29 +133,25 @@ VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd)
|
|||
RT30xxReadRFRegister(pAd, RF_R17, &RFValue);
|
||||
RFValue &= (~0x08);
|
||||
// to fix rx long range issue
|
||||
if (pAd->NicConfig2.field.ExternalLNAForG == 0)
|
||||
{
|
||||
if ((IS_RT3071(pAd) && ((pAd->MACVersion & 0xffff) >= 0x0211)) || IS_RT3070(pAd))
|
||||
{
|
||||
if (pAd->NicConfig2.field.ExternalLNAForG == 0) {
|
||||
if ((IS_RT3071(pAd)
|
||||
&& ((pAd->MACVersion & 0xffff) >= 0x0211))
|
||||
|| IS_RT3070(pAd)) {
|
||||
RFValue |= 0x20;
|
||||
}
|
||||
}
|
||||
// set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h
|
||||
if (pAd->TxMixerGain24G >= 1)
|
||||
{
|
||||
RFValue &= (~0x7); // clean bit [2:0]
|
||||
if (pAd->TxMixerGain24G >= 1) {
|
||||
RFValue &= (~0x7); // clean bit [2:0]
|
||||
RFValue |= pAd->TxMixerGain24G;
|
||||
}
|
||||
RT30xxWriteRFRegister(pAd, RF_R17, RFValue);
|
||||
|
||||
if (IS_RT3071(pAd))
|
||||
{
|
||||
if (IS_RT3071(pAd)) {
|
||||
// add by johnli, RF power sequence setup, load RF normal operation-mode setup
|
||||
RT30xxLoadRFNormalModeSetup(pAd);
|
||||
}
|
||||
else if (IS_RT3070(pAd))
|
||||
{
|
||||
/* add by johnli, reset RF_R27 when interface down & up to fix throughput problem*/
|
||||
} else if (IS_RT3070(pAd)) {
|
||||
/* add by johnli, reset RF_R27 when interface down & up to fix throughput problem */
|
||||
// LDORF_VC, RF R27 register Bit 2 to 0
|
||||
RT30xxReadRFRegister(pAd, RF_R27, &RFValue);
|
||||
// TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F).
|
||||
|
|
|
@ -39,44 +39,39 @@
|
|||
|
||||
#include "../rt_config.h"
|
||||
|
||||
|
||||
#ifndef RTMP_RF_RW_SUPPORT
|
||||
#error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip"
|
||||
#endif // RTMP_RF_RW_SUPPORT //
|
||||
|
||||
|
||||
VOID NICInitRT3090RFRegisters(IN PRTMP_ADAPTER pAd)
|
||||
{
|
||||
INT i;
|
||||
INT i;
|
||||
// Driver must read EEPROM to get RfIcType before initial RF registers
|
||||
// Initialize RF register to default value
|
||||
if (IS_RT3090(pAd))
|
||||
{
|
||||
if (IS_RT3090(pAd)) {
|
||||
// Init RF calibration
|
||||
// Driver should toggle RF R30 bit7 before init RF registers
|
||||
UINT32 RfReg = 0, data;
|
||||
|
||||
RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR)&RfReg);
|
||||
RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR) & RfReg);
|
||||
RfReg |= 0x80;
|
||||
RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg);
|
||||
RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg);
|
||||
RTMPusecDelay(1000);
|
||||
RfReg &= 0x7F;
|
||||
RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg);
|
||||
RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg);
|
||||
|
||||
// init R24, R31
|
||||
RT30xxWriteRFRegister(pAd, RF_R24, 0x0F);
|
||||
RT30xxWriteRFRegister(pAd, RF_R31, 0x0F);
|
||||
|
||||
// RT309x version E has fixed this issue
|
||||
if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211))
|
||||
{
|
||||
if ((pAd->NicConfig2.field.DACTestBit == 1)
|
||||
&& ((pAd->MACVersion & 0xffff) < 0x0211)) {
|
||||
// patch tx EVM issue temporarily
|
||||
RTMP_IO_READ32(pAd, LDO_CFG0, &data);
|
||||
data = ((data & 0xE0FFFFFF) | 0x0D000000);
|
||||
RTMP_IO_WRITE32(pAd, LDO_CFG0, data);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
RTMP_IO_READ32(pAd, LDO_CFG0, &data);
|
||||
data = ((data & 0xE0FFFFFF) | 0x01000000);
|
||||
RTMP_IO_WRITE32(pAd, LDO_CFG0, data);
|
||||
|
@ -88,15 +83,16 @@ VOID NICInitRT3090RFRegisters(IN PRTMP_ADAPTER pAd)
|
|||
RTMP_IO_WRITE32(pAd, GPIO_SWITCH, data);
|
||||
|
||||
// Initialize RF register to default value
|
||||
for (i = 0; i < NUM_RF_REG_PARMS; i++)
|
||||
{
|
||||
RT30xxWriteRFRegister(pAd, RT30xx_RFRegTable[i].Register, RT30xx_RFRegTable[i].Value);
|
||||
for (i = 0; i < NUM_RF_REG_PARMS; i++) {
|
||||
RT30xxWriteRFRegister(pAd,
|
||||
RT30xx_RFRegTable[i].Register,
|
||||
RT30xx_RFRegTable[i].Value);
|
||||
}
|
||||
|
||||
// Driver should set RF R6 bit6 on before calibration
|
||||
RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR)&RfReg);
|
||||
RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR) & RfReg);
|
||||
RfReg |= 0x40;
|
||||
RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR)RfReg);
|
||||
RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR) RfReg);
|
||||
|
||||
//For RF filter Calibration
|
||||
RTMPFilterCalibration(pAd);
|
||||
|
|
|
@ -35,73 +35,82 @@
|
|||
-------- ---------- ----------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
#ifdef RT30xx
|
||||
|
||||
|
||||
#ifndef RTMP_RF_RW_SUPPORT
|
||||
#error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip"
|
||||
#endif // RTMP_RF_RW_SUPPORT //
|
||||
|
||||
#include "../rt_config.h"
|
||||
|
||||
|
||||
//
|
||||
// RF register initialization set
|
||||
//
|
||||
REG_PAIR RT30xx_RFRegTable[] = {
|
||||
{RF_R04, 0x40},
|
||||
{RF_R05, 0x03},
|
||||
{RF_R06, 0x02},
|
||||
{RF_R07, 0x70},
|
||||
{RF_R09, 0x0F},
|
||||
{RF_R10, 0x41},
|
||||
{RF_R11, 0x21},
|
||||
{RF_R12, 0x7B},
|
||||
{RF_R14, 0x90},
|
||||
{RF_R15, 0x58},
|
||||
{RF_R16, 0xB3},
|
||||
{RF_R17, 0x92},
|
||||
{RF_R18, 0x2C},
|
||||
{RF_R19, 0x02},
|
||||
{RF_R20, 0xBA},
|
||||
{RF_R21, 0xDB},
|
||||
{RF_R24, 0x16},
|
||||
{RF_R25, 0x01},
|
||||
{RF_R29, 0x1F},
|
||||
REG_PAIR RT30xx_RFRegTable[] = {
|
||||
{RF_R04, 0x40}
|
||||
,
|
||||
{RF_R05, 0x03}
|
||||
,
|
||||
{RF_R06, 0x02}
|
||||
,
|
||||
{RF_R07, 0x70}
|
||||
,
|
||||
{RF_R09, 0x0F}
|
||||
,
|
||||
{RF_R10, 0x41}
|
||||
,
|
||||
{RF_R11, 0x21}
|
||||
,
|
||||
{RF_R12, 0x7B}
|
||||
,
|
||||
{RF_R14, 0x90}
|
||||
,
|
||||
{RF_R15, 0x58}
|
||||
,
|
||||
{RF_R16, 0xB3}
|
||||
,
|
||||
{RF_R17, 0x92}
|
||||
,
|
||||
{RF_R18, 0x2C}
|
||||
,
|
||||
{RF_R19, 0x02}
|
||||
,
|
||||
{RF_R20, 0xBA}
|
||||
,
|
||||
{RF_R21, 0xDB}
|
||||
,
|
||||
{RF_R24, 0x16}
|
||||
,
|
||||
{RF_R25, 0x01}
|
||||
,
|
||||
{RF_R29, 0x1F}
|
||||
,
|
||||
};
|
||||
|
||||
UCHAR NUM_RF_REG_PARMS = (sizeof(RT30xx_RFRegTable) / sizeof(REG_PAIR));
|
||||
|
||||
|
||||
|
||||
// Antenna divesity use GPIO3 and EESK pin for control
|
||||
// Antenna and EEPROM access are both using EESK pin,
|
||||
// Therefor we should avoid accessing EESK at the same time
|
||||
// Then restore antenna after EEPROM access
|
||||
// The original name of this function is AsicSetRxAnt(), now change to
|
||||
//VOID AsicSetRxAnt(
|
||||
VOID RT30xxSetRxAnt(
|
||||
IN PRTMP_ADAPTER pAd,
|
||||
IN UCHAR Ant)
|
||||
VOID RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant)
|
||||
{
|
||||
UINT32 Value;
|
||||
UINT32 Value;
|
||||
#ifdef RTMP_MAC_PCI
|
||||
UINT32 x;
|
||||
UINT32 x;
|
||||
#endif
|
||||
|
||||
if ((pAd->EepromAccess) ||
|
||||
(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) ||
|
||||
(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) ||
|
||||
(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) ||
|
||||
(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
|
||||
{
|
||||
(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) ||
|
||||
(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) ||
|
||||
(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) ||
|
||||
(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) {
|
||||
return;
|
||||
}
|
||||
|
||||
// the antenna selection is through firmware and MAC register(GPIO3)
|
||||
if (Ant == 0)
|
||||
{
|
||||
if (Ant == 0) {
|
||||
// Main antenna
|
||||
#ifdef RTMP_MAC_PCI
|
||||
RTMP_IO_READ32(pAd, E2PROM_CSR, &x);
|
||||
|
@ -114,10 +123,9 @@ VOID RT30xxSetRxAnt(
|
|||
RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value);
|
||||
Value &= ~(0x0808);
|
||||
RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value);
|
||||
DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to main antenna\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
DBGPRINT_RAW(RT_DEBUG_TRACE,
|
||||
("AsicSetRxAnt, switch to main antenna\n"));
|
||||
} else {
|
||||
// Aux antenna
|
||||
#ifdef RTMP_MAC_PCI
|
||||
RTMP_IO_READ32(pAd, E2PROM_CSR, &x);
|
||||
|
@ -130,11 +138,11 @@ VOID RT30xxSetRxAnt(
|
|||
Value &= ~(0x0808);
|
||||
Value |= 0x08;
|
||||
RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value);
|
||||
DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to aux antenna\n"));
|
||||
DBGPRINT_RAW(RT_DEBUG_TRACE,
|
||||
("AsicSetRxAnt, switch to aux antenna\n"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
|
||||
|
@ -151,46 +159,43 @@ VOID RT30xxSetRxAnt(
|
|||
|
||||
========================================================================
|
||||
*/
|
||||
VOID RTMPFilterCalibration(
|
||||
IN PRTMP_ADAPTER pAd)
|
||||
VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd)
|
||||
{
|
||||
UCHAR R55x = 0, value, FilterTarget = 0x1E, BBPValue=0;
|
||||
UINT loop = 0, count = 0, loopcnt = 0, ReTry = 0;
|
||||
UCHAR RF_R24_Value = 0;
|
||||
UCHAR R55x = 0, value, FilterTarget = 0x1E, BBPValue = 0;
|
||||
UINT loop = 0, count = 0, loopcnt = 0, ReTry = 0;
|
||||
UCHAR RF_R24_Value = 0;
|
||||
|
||||
// Give bbp filter initial value
|
||||
pAd->Mlme.CaliBW20RfR24 = 0x1F;
|
||||
pAd->Mlme.CaliBW40RfR24 = 0x2F; //Bit[5] must be 1 for BW 40
|
||||
pAd->Mlme.CaliBW40RfR24 = 0x2F; //Bit[5] must be 1 for BW 40
|
||||
|
||||
do
|
||||
{
|
||||
do {
|
||||
if (loop == 1) //BandWidth = 40 MHz
|
||||
{
|
||||
// Write 0x27 to RF_R24 to program filter
|
||||
RF_R24_Value = 0x27;
|
||||
RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value);
|
||||
if (IS_RT3090(pAd) || IS_RT3572(pAd)|| IS_RT3390(pAd))
|
||||
if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))
|
||||
FilterTarget = 0x15;
|
||||
else
|
||||
FilterTarget = 0x19;
|
||||
|
||||
// when calibrate BW40, BBP mask must set to BW40.
|
||||
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
|
||||
BBPValue&= (~0x18);
|
||||
BBPValue|= (0x10);
|
||||
BBPValue &= (~0x18);
|
||||
BBPValue |= (0x10);
|
||||
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);
|
||||
|
||||
// set to BW40
|
||||
RT30xxReadRFRegister(pAd, RF_R31, &value);
|
||||
value |= 0x20;
|
||||
RT30xxWriteRFRegister(pAd, RF_R31, value);
|
||||
}
|
||||
else //BandWidth = 20 MHz
|
||||
} else //BandWidth = 20 MHz
|
||||
{
|
||||
// Write 0x07 to RF_R24 to program filter
|
||||
RF_R24_Value = 0x07;
|
||||
RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value);
|
||||
if (IS_RT3090(pAd) || IS_RT3572(pAd)|| IS_RT3390(pAd))
|
||||
if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))
|
||||
FilterTarget = 0x13;
|
||||
else
|
||||
FilterTarget = 0x16;
|
||||
|
@ -209,8 +214,7 @@ VOID RTMPFilterCalibration(
|
|||
// Write 0x00 to BBP_R24 to set power & frequency of passband test tone
|
||||
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0);
|
||||
|
||||
do
|
||||
{
|
||||
do {
|
||||
// Write 0x90 to BBP_R25 to transmit test tone
|
||||
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90);
|
||||
|
||||
|
@ -224,8 +228,7 @@ VOID RTMPFilterCalibration(
|
|||
// Write 0x06 to BBP_R24 to set power & frequency of stopband test tone
|
||||
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0x06);
|
||||
|
||||
while(TRUE)
|
||||
{
|
||||
while (TRUE) {
|
||||
// Write 0x90 to BBP_R25 to transmit test tone
|
||||
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90);
|
||||
|
||||
|
@ -233,59 +236,47 @@ VOID RTMPFilterCalibration(
|
|||
RTMPusecDelay(1000);
|
||||
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value);
|
||||
value &= 0xFF;
|
||||
if ((R55x - value) < FilterTarget)
|
||||
{
|
||||
RF_R24_Value ++;
|
||||
}
|
||||
else if ((R55x - value) == FilterTarget)
|
||||
{
|
||||
RF_R24_Value ++;
|
||||
count ++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((R55x - value) < FilterTarget) {
|
||||
RF_R24_Value++;
|
||||
} else if ((R55x - value) == FilterTarget) {
|
||||
RF_R24_Value++;
|
||||
count++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
// prevent infinite loop cause driver hang.
|
||||
if (loopcnt++ > 100)
|
||||
{
|
||||
DBGPRINT(RT_DEBUG_ERROR, ("RTMPFilterCalibration - can't find a valid value, loopcnt=%d stop calibrating", loopcnt));
|
||||
if (loopcnt++ > 100) {
|
||||
DBGPRINT(RT_DEBUG_ERROR,
|
||||
("RTMPFilterCalibration - can't find a valid value, loopcnt=%d stop calibrating",
|
||||
loopcnt));
|
||||
break;
|
||||
}
|
||||
|
||||
// Write RF_R24 to program filter
|
||||
RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value);
|
||||
}
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
if (count > 0) {
|
||||
RF_R24_Value = RF_R24_Value - ((count) ? (1) : (0));
|
||||
}
|
||||
|
||||
// Store for future usage
|
||||
if (loopcnt < 100)
|
||||
{
|
||||
if (loop++ == 0)
|
||||
{
|
||||
if (loopcnt < 100) {
|
||||
if (loop++ == 0) {
|
||||
//BandWidth = 20 MHz
|
||||
pAd->Mlme.CaliBW20RfR24 = (UCHAR)RF_R24_Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAd->Mlme.CaliBW20RfR24 = (UCHAR) RF_R24_Value;
|
||||
} else {
|
||||
//BandWidth = 40 MHz
|
||||
pAd->Mlme.CaliBW40RfR24 = (UCHAR)RF_R24_Value;
|
||||
pAd->Mlme.CaliBW40RfR24 = (UCHAR) RF_R24_Value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
} else
|
||||
break;
|
||||
|
||||
RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value);
|
||||
|
||||
// reset count
|
||||
count = 0;
|
||||
} while(TRUE);
|
||||
} while (TRUE);
|
||||
|
||||
//
|
||||
// Set back to initial state
|
||||
|
@ -298,13 +289,14 @@ VOID RTMPFilterCalibration(
|
|||
|
||||
// set BBP back to BW20
|
||||
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
|
||||
BBPValue&= (~0x18);
|
||||
BBPValue &= (~0x18);
|
||||
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);
|
||||
|
||||
DBGPRINT(RT_DEBUG_TRACE, ("RTMPFilterCalibration - CaliBW20RfR24=0x%x, CaliBW40RfR24=0x%x\n", pAd->Mlme.CaliBW20RfR24, pAd->Mlme.CaliBW40RfR24));
|
||||
DBGPRINT(RT_DEBUG_TRACE,
|
||||
("RTMPFilterCalibration - CaliBW20RfR24=0x%x, CaliBW40RfR24=0x%x\n",
|
||||
pAd->Mlme.CaliBW20RfR24, pAd->Mlme.CaliBW40RfR24));
|
||||
}
|
||||
|
||||
|
||||
// add by johnli, RF power sequence setup
|
||||
/*
|
||||
==========================================================================
|
||||
|
@ -314,8 +306,7 @@ VOID RTMPFilterCalibration(
|
|||
|
||||
==========================================================================
|
||||
*/
|
||||
VOID RT30xxLoadRFNormalModeSetup(
|
||||
IN PRTMP_ADAPTER pAd)
|
||||
VOID RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd)
|
||||
{
|
||||
UCHAR RFValue;
|
||||
|
||||
|
@ -330,22 +321,22 @@ VOID RT30xxLoadRFNormalModeSetup(
|
|||
RT30xxWriteRFRegister(pAd, RF_R15, RFValue);
|
||||
|
||||
/* move to NICInitRT30xxRFRegisters
|
||||
// TX_LO1_en, RF R17 register Bit 3 to 0
|
||||
RT30xxReadRFRegister(pAd, RF_R17, &RFValue);
|
||||
RFValue &= (~0x08);
|
||||
// to fix rx long range issue
|
||||
if (((pAd->MACVersion & 0xffff) >= 0x0211) && (pAd->NicConfig2.field.ExternalLNAForG == 0))
|
||||
{
|
||||
RFValue |= 0x20;
|
||||
}
|
||||
// set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h
|
||||
if (pAd->TxMixerGain24G >= 2)
|
||||
{
|
||||
RFValue &= (~0x7); // clean bit [2:0]
|
||||
RFValue |= pAd->TxMixerGain24G;
|
||||
}
|
||||
RT30xxWriteRFRegister(pAd, RF_R17, RFValue);
|
||||
*/
|
||||
// TX_LO1_en, RF R17 register Bit 3 to 0
|
||||
RT30xxReadRFRegister(pAd, RF_R17, &RFValue);
|
||||
RFValue &= (~0x08);
|
||||
// to fix rx long range issue
|
||||
if (((pAd->MACVersion & 0xffff) >= 0x0211) && (pAd->NicConfig2.field.ExternalLNAForG == 0))
|
||||
{
|
||||
RFValue |= 0x20;
|
||||
}
|
||||
// set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h
|
||||
if (pAd->TxMixerGain24G >= 2)
|
||||
{
|
||||
RFValue &= (~0x7); // clean bit [2:0]
|
||||
RFValue |= pAd->TxMixerGain24G;
|
||||
}
|
||||
RT30xxWriteRFRegister(pAd, RF_R17, RFValue);
|
||||
*/
|
||||
|
||||
// RX_LO1_en, RF R20 register Bit 3 to 0
|
||||
RT30xxReadRFRegister(pAd, RF_R20, &RFValue);
|
||||
|
@ -357,7 +348,7 @@ VOID RT30xxLoadRFNormalModeSetup(
|
|||
RFValue &= (~0x08);
|
||||
RT30xxWriteRFRegister(pAd, RF_R21, RFValue);
|
||||
|
||||
/* add by johnli, reset RF_R27 when interface down & up to fix throughput problem*/
|
||||
/* add by johnli, reset RF_R27 when interface down & up to fix throughput problem */
|
||||
// LDORF_VC, RF R27 register Bit 2 to 0
|
||||
RT30xxReadRFRegister(pAd, RF_R27, &RFValue);
|
||||
// TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F).
|
||||
|
@ -381,15 +372,13 @@ VOID RT30xxLoadRFNormalModeSetup(
|
|||
|
||||
==========================================================================
|
||||
*/
|
||||
VOID RT30xxLoadRFSleepModeSetup(
|
||||
IN PRTMP_ADAPTER pAd)
|
||||
VOID RT30xxLoadRFSleepModeSetup(IN PRTMP_ADAPTER pAd)
|
||||
{
|
||||
UCHAR RFValue;
|
||||
UINT32 MACValue;
|
||||
|
||||
|
||||
#ifdef RTMP_MAC_USB
|
||||
if(!IS_RT3572(pAd))
|
||||
if (!IS_RT3572(pAd))
|
||||
#endif // RTMP_MAC_USB //
|
||||
{
|
||||
// RF_BLOCK_en. RF R1 register Bit 0 to 0
|
||||
|
@ -414,9 +403,8 @@ VOID RT30xxLoadRFSleepModeSetup(
|
|||
}
|
||||
|
||||
if (IS_RT3090(pAd) || // IS_RT3090 including RT309x and RT3071/72
|
||||
IS_RT3572(pAd) ||
|
||||
(IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201)))
|
||||
{
|
||||
IS_RT3572(pAd) ||
|
||||
(IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) {
|
||||
#ifdef RTMP_MAC_USB
|
||||
if (!IS_RT3572(pAd))
|
||||
#endif // RTMP_MAC_USB //
|
||||
|
@ -440,14 +428,13 @@ VOID RT30xxLoadRFSleepModeSetup(
|
|||
|
||||
==========================================================================
|
||||
*/
|
||||
VOID RT30xxReverseRFSleepModeSetup(
|
||||
IN PRTMP_ADAPTER pAd)
|
||||
VOID RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd)
|
||||
{
|
||||
UCHAR RFValue;
|
||||
UINT32 MACValue;
|
||||
|
||||
#ifdef RTMP_MAC_USB
|
||||
if(!IS_RT3572(pAd))
|
||||
if (!IS_RT3572(pAd))
|
||||
#endif // RTMP_MAC_USB //
|
||||
{
|
||||
// RF_BLOCK_en, RF R1 register Bit 0 to 1
|
||||
|
@ -472,10 +459,9 @@ VOID RT30xxReverseRFSleepModeSetup(
|
|||
}
|
||||
|
||||
if (IS_RT3090(pAd) || // IS_RT3090 including RT309x and RT3071/72
|
||||
IS_RT3572(pAd) ||
|
||||
IS_RT3390(pAd) ||
|
||||
(IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201)))
|
||||
{
|
||||
IS_RT3572(pAd) ||
|
||||
IS_RT3390(pAd) ||
|
||||
(IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) {
|
||||
#ifdef RTMP_MAC_USB
|
||||
if (!IS_RT3572(pAd))
|
||||
#endif // RTMP_MAC_USB //
|
||||
|
@ -487,48 +473,41 @@ VOID RT30xxReverseRFSleepModeSetup(
|
|||
RFValue = (RFValue & (~0x77));
|
||||
RT30xxWriteRFRegister(pAd, RF_R27, RFValue);
|
||||
}
|
||||
|
||||
// RT3071 version E has fixed this issue
|
||||
if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211))
|
||||
{
|
||||
if ((pAd->NicConfig2.field.DACTestBit == 1)
|
||||
&& ((pAd->MACVersion & 0xffff) < 0x0211)) {
|
||||
// patch tx EVM issue temporarily
|
||||
RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue);
|
||||
MACValue = ((MACValue & 0xE0FFFFFF) | 0x0D000000);
|
||||
RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue);
|
||||
MACValue = ((MACValue & 0xE0FFFFFF) | 0x01000000);
|
||||
RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue);
|
||||
}
|
||||
}
|
||||
|
||||
if(IS_RT3572(pAd))
|
||||
if (IS_RT3572(pAd))
|
||||
RT30xxWriteRFRegister(pAd, RF_R08, 0x80);
|
||||
}
|
||||
|
||||
// end johnli
|
||||
|
||||
VOID RT30xxHaltAction(
|
||||
IN PRTMP_ADAPTER pAd)
|
||||
VOID RT30xxHaltAction(IN PRTMP_ADAPTER pAd)
|
||||
{
|
||||
UINT32 TxPinCfg = 0x00050F0F;
|
||||
UINT32 TxPinCfg = 0x00050F0F;
|
||||
|
||||
//
|
||||
// Turn off LNA_PE or TRSW_POL
|
||||
//
|
||||
if (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3572(pAd))
|
||||
{
|
||||
if (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3572(pAd)) {
|
||||
if ((IS_RT3071(pAd) || IS_RT3572(pAd))
|
||||
#ifdef RTMP_EFUSE_SUPPORT
|
||||
&& (pAd->bUseEfuse)
|
||||
&& (pAd->bUseEfuse)
|
||||
#endif // RTMP_EFUSE_SUPPORT //
|
||||
)
|
||||
{
|
||||
TxPinCfg &= 0xFFFBF0F0; // bit18 off
|
||||
}
|
||||
else
|
||||
{
|
||||
) {
|
||||
TxPinCfg &= 0xFFFBF0F0; // bit18 off
|
||||
} else {
|
||||
TxPinCfg &= 0xFFFFF0F0;
|
||||
}
|
||||
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -37,17 +37,14 @@
|
|||
|
||||
#include "rt_config.h"
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* Private Variables Used */
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
PSTRING mac = ""; // default 00:00:00:00:00:00
|
||||
PSTRING hostname = ""; // default CMPC
|
||||
module_param (mac, charp, 0);
|
||||
MODULE_PARM_DESC (mac, "rt28xx: wireless mac addr");
|
||||
|
||||
PSTRING mac = ""; // default 00:00:00:00:00:00
|
||||
PSTRING hostname = ""; // default CMPC
|
||||
module_param(mac, charp, 0);
|
||||
MODULE_PARM_DESC(mac, "rt28xx: wireless mac addr");
|
||||
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* Prototypes of Functions Used */
|
||||
|
@ -58,11 +55,11 @@ int rt28xx_close(IN struct net_device *net_dev);
|
|||
int rt28xx_open(struct net_device *net_dev);
|
||||
|
||||
// private function prototype
|
||||
static INT rt28xx_send_packets(IN struct sk_buff *skb_p, IN struct net_device *net_dev);
|
||||
static INT rt28xx_send_packets(IN struct sk_buff *skb_p,
|
||||
IN struct net_device *net_dev);
|
||||
|
||||
|
||||
static struct net_device_stats *RT28xx_get_ether_stats(
|
||||
IN struct net_device *net_dev);
|
||||
static struct net_device_stats *RT28xx_get_ether_stats(IN struct net_device
|
||||
*net_dev);
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
|
@ -86,57 +83,66 @@ Note:
|
|||
*/
|
||||
int MainVirtualIF_close(IN struct net_device *net_dev)
|
||||
{
|
||||
RTMP_ADAPTER *pAd = NULL;
|
||||
RTMP_ADAPTER *pAd = NULL;
|
||||
|
||||
GET_PAD_FROM_NET_DEV(pAd, net_dev);
|
||||
|
||||
// Sanity check for pAd
|
||||
if (pAd == NULL)
|
||||
return 0; // close ok
|
||||
return 0; // close ok
|
||||
|
||||
netif_carrier_off(pAd->net_dev);
|
||||
netif_stop_queue(pAd->net_dev);
|
||||
|
||||
{
|
||||
BOOLEAN Cancelled;
|
||||
BOOLEAN Cancelled;
|
||||
|
||||
if (INFRA_ON(pAd) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
|
||||
{
|
||||
MLME_DISASSOC_REQ_STRUCT DisReq;
|
||||
MLME_QUEUE_ELEM *MsgElem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG);
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) {
|
||||
MLME_DISASSOC_REQ_STRUCT DisReq;
|
||||
MLME_QUEUE_ELEM *MsgElem =
|
||||
(MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM),
|
||||
MEM_ALLOC_FLAG);
|
||||
|
||||
if (MsgElem)
|
||||
{
|
||||
COPY_MAC_ADDR(DisReq.Addr, pAd->CommonCfg.Bssid);
|
||||
DisReq.Reason = REASON_DEAUTH_STA_LEAVING;
|
||||
if (MsgElem) {
|
||||
COPY_MAC_ADDR(DisReq.Addr,
|
||||
pAd->CommonCfg.Bssid);
|
||||
DisReq.Reason = REASON_DEAUTH_STA_LEAVING;
|
||||
|
||||
MsgElem->Machine = ASSOC_STATE_MACHINE;
|
||||
MsgElem->MsgType = MT2_MLME_DISASSOC_REQ;
|
||||
MsgElem->MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT);
|
||||
NdisMoveMemory(MsgElem->Msg, &DisReq, sizeof(MLME_DISASSOC_REQ_STRUCT));
|
||||
MsgElem->Machine = ASSOC_STATE_MACHINE;
|
||||
MsgElem->MsgType = MT2_MLME_DISASSOC_REQ;
|
||||
MsgElem->MsgLen =
|
||||
sizeof(MLME_DISASSOC_REQ_STRUCT);
|
||||
NdisMoveMemory(MsgElem->Msg, &DisReq,
|
||||
sizeof
|
||||
(MLME_DISASSOC_REQ_STRUCT));
|
||||
|
||||
// Prevent to connect AP again in STAMlmePeriodicExec
|
||||
pAd->MlmeAux.AutoReconnectSsidLen= 32;
|
||||
NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen);
|
||||
// Prevent to connect AP again in STAMlmePeriodicExec
|
||||
pAd->MlmeAux.AutoReconnectSsidLen = 32;
|
||||
NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid,
|
||||
pAd->MlmeAux.
|
||||
AutoReconnectSsidLen);
|
||||
|
||||
pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC;
|
||||
MlmeDisassocReqAction(pAd, MsgElem);
|
||||
kfree(MsgElem);
|
||||
pAd->Mlme.CntlMachine.CurrState =
|
||||
CNTL_WAIT_OID_DISASSOC;
|
||||
MlmeDisassocReqAction(pAd, MsgElem);
|
||||
kfree(MsgElem);
|
||||
}
|
||||
|
||||
RTMPusecDelay(1000);
|
||||
}
|
||||
|
||||
RTMPCancelTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, &Cancelled);
|
||||
RTMPCancelTimer(&pAd->StaCfg.WpaDisassocAndBlockAssocTimer, &Cancelled);
|
||||
RTMPCancelTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer,
|
||||
&Cancelled);
|
||||
RTMPCancelTimer(&pAd->StaCfg.WpaDisassocAndBlockAssocTimer,
|
||||
&Cancelled);
|
||||
}
|
||||
|
||||
VIRTUAL_IF_DOWN(pAd);
|
||||
|
||||
RT_MOD_DEC_USE_COUNT();
|
||||
|
||||
return 0; // close ok
|
||||
return 0; // close ok
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -161,13 +167,13 @@ Note:
|
|||
*/
|
||||
int MainVirtualIF_open(IN struct net_device *net_dev)
|
||||
{
|
||||
RTMP_ADAPTER *pAd = NULL;
|
||||
RTMP_ADAPTER *pAd = NULL;
|
||||
|
||||
GET_PAD_FROM_NET_DEV(pAd, net_dev);
|
||||
|
||||
// Sanity check for pAd
|
||||
if (pAd == NULL)
|
||||
return 0; // close ok
|
||||
return 0; // close ok
|
||||
|
||||
if (VIRTUAL_IF_UP(pAd) != 0)
|
||||
return -1;
|
||||
|
@ -204,10 +210,10 @@ Note:
|
|||
*/
|
||||
int rt28xx_close(IN PNET_DEV dev)
|
||||
{
|
||||
struct net_device * net_dev = (struct net_device *)dev;
|
||||
RTMP_ADAPTER *pAd = NULL;
|
||||
BOOLEAN Cancelled;
|
||||
UINT32 i = 0;
|
||||
struct net_device *net_dev = (struct net_device *)dev;
|
||||
RTMP_ADAPTER *pAd = NULL;
|
||||
BOOLEAN Cancelled;
|
||||
UINT32 i = 0;
|
||||
|
||||
#ifdef RTMP_MAC_USB
|
||||
DECLARE_WAIT_QUEUE_HEAD(unlink_wakeup);
|
||||
|
@ -216,12 +222,12 @@ int rt28xx_close(IN PNET_DEV dev)
|
|||
|
||||
GET_PAD_FROM_NET_DEV(pAd, net_dev);
|
||||
|
||||
DBGPRINT(RT_DEBUG_TRACE, ("===> rt28xx_close\n"));
|
||||
DBGPRINT(RT_DEBUG_TRACE, ("===> rt28xx_close\n"));
|
||||
|
||||
Cancelled = FALSE;
|
||||
// Sanity check for pAd
|
||||
if (pAd == NULL)
|
||||
return 0; // close ok
|
||||
return 0; // close ok
|
||||
|
||||
{
|
||||
#ifdef RTMP_MAC_PCI
|
||||
|
@ -230,13 +236,11 @@ int rt28xx_close(IN PNET_DEV dev)
|
|||
|
||||
// If dirver doesn't wake up firmware here,
|
||||
// NICLoadFirmware will hang forever when interface is up again.
|
||||
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
|
||||
{
|
||||
AsicForceWakeup(pAd, TRUE);
|
||||
}
|
||||
|
||||
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) {
|
||||
AsicForceWakeup(pAd, TRUE);
|
||||
}
|
||||
#ifdef RTMP_MAC_USB
|
||||
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS);
|
||||
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS);
|
||||
#endif // RTMP_MAC_USB //
|
||||
|
||||
MlmeRadioOff(pAd);
|
||||
|
@ -247,30 +251,28 @@ int rt28xx_close(IN PNET_DEV dev)
|
|||
|
||||
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS);
|
||||
|
||||
for (i = 0 ; i < NUM_OF_TX_RING; i++)
|
||||
{
|
||||
while (pAd->DeQueueRunning[i] == TRUE)
|
||||
{
|
||||
DBGPRINT(RT_DEBUG_TRACE, ("Waiting for TxQueue[%d] done..........\n", i));
|
||||
for (i = 0; i < NUM_OF_TX_RING; i++) {
|
||||
while (pAd->DeQueueRunning[i] == TRUE) {
|
||||
DBGPRINT(RT_DEBUG_TRACE,
|
||||
("Waiting for TxQueue[%d] done..........\n",
|
||||
i));
|
||||
RTMPusecDelay(1000);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef RTMP_MAC_USB
|
||||
// ensure there are no more active urbs.
|
||||
add_wait_queue (&unlink_wakeup, &wait);
|
||||
add_wait_queue(&unlink_wakeup, &wait);
|
||||
pAd->wait = &unlink_wakeup;
|
||||
|
||||
// maybe wait for deletions to finish.
|
||||
i = 0;
|
||||
//while((i < 25) && atomic_read(&pAd->PendingRx) > 0)
|
||||
while(i < 25)
|
||||
{
|
||||
while (i < 25) {
|
||||
unsigned long IrqFlags;
|
||||
|
||||
RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags);
|
||||
if (pAd->PendingRx == 0)
|
||||
{
|
||||
if (pAd->PendingRx == 0) {
|
||||
RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
|
||||
break;
|
||||
}
|
||||
|
@ -280,7 +282,7 @@ int rt28xx_close(IN PNET_DEV dev)
|
|||
i++;
|
||||
}
|
||||
pAd->wait = NULL;
|
||||
remove_wait_queue (&unlink_wakeup, &wait);
|
||||
remove_wait_queue(&unlink_wakeup, &wait);
|
||||
#endif // RTMP_MAC_USB //
|
||||
|
||||
// Stop Mlme state machine
|
||||
|
@ -293,41 +295,36 @@ int rt28xx_close(IN PNET_DEV dev)
|
|||
MacTableReset(pAd);
|
||||
}
|
||||
|
||||
|
||||
MeasureReqTabExit(pAd);
|
||||
TpcReqTabExit(pAd);
|
||||
|
||||
|
||||
// Close kernel threads
|
||||
RtmpMgmtTaskExit(pAd);
|
||||
|
||||
#ifdef RTMP_MAC_PCI
|
||||
{
|
||||
BOOLEAN brc;
|
||||
// ULONG Value;
|
||||
BOOLEAN brc;
|
||||
// ULONG Value;
|
||||
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE))
|
||||
{
|
||||
RTMP_ASIC_INTERRUPT_DISABLE(pAd);
|
||||
}
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) {
|
||||
RTMP_ASIC_INTERRUPT_DISABLE(pAd);
|
||||
}
|
||||
// Receive packets to clear DMA index after disable interrupt.
|
||||
//RTMPHandleRxDoneInterrupt(pAd);
|
||||
// put to radio off to save power when driver unload. After radiooff, can't write /read register. So need to finish all
|
||||
// register access before Radio off.
|
||||
|
||||
// Receive packets to clear DMA index after disable interrupt.
|
||||
//RTMPHandleRxDoneInterrupt(pAd);
|
||||
// put to radio off to save power when driver unload. After radiooff, can't write /read register. So need to finish all
|
||||
// register access before Radio off.
|
||||
|
||||
|
||||
brc=RT28xxPciAsicRadioOff(pAd, RTMP_HALT, 0);
|
||||
brc = RT28xxPciAsicRadioOff(pAd, RTMP_HALT, 0);
|
||||
|
||||
//In solution 3 of 3090F, the bPCIclkOff will be set to TRUE after calling RT28xxPciAsicRadioOff
|
||||
pAd->bPCIclkOff = FALSE;
|
||||
pAd->bPCIclkOff = FALSE;
|
||||
|
||||
if (brc==FALSE)
|
||||
{
|
||||
DBGPRINT(RT_DEBUG_ERROR,("%s call RT28xxPciAsicRadioOff fail !!\n", __func__));
|
||||
if (brc == FALSE) {
|
||||
DBGPRINT(RT_DEBUG_ERROR,
|
||||
("%s call RT28xxPciAsicRadioOff fail !!\n",
|
||||
__func__));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE))
|
||||
|
@ -341,15 +338,13 @@ int rt28xx_close(IN PNET_DEV dev)
|
|||
#endif // RTMP_MAC_PCI //
|
||||
|
||||
// Free IRQ
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE))
|
||||
{
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) {
|
||||
#ifdef RTMP_MAC_PCI
|
||||
// Deregister interrupt function
|
||||
RtmpOSIRQRelease(net_dev);
|
||||
#endif // RTMP_MAC_PCI //
|
||||
RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE);
|
||||
}
|
||||
|
||||
RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE);
|
||||
}
|
||||
// Free Ring or USB buffers
|
||||
RTMPFreeTxRxRingMemory(pAd);
|
||||
|
||||
|
@ -358,7 +353,6 @@ int rt28xx_close(IN PNET_DEV dev)
|
|||
// Free BA reorder resource
|
||||
ba_reordering_resource_release(pAd);
|
||||
|
||||
|
||||
RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_START_UP);
|
||||
|
||||
/*+++Modify by woody to solve the bulk fail+++*/
|
||||
|
@ -366,9 +360,8 @@ int rt28xx_close(IN PNET_DEV dev)
|
|||
}
|
||||
|
||||
DBGPRINT(RT_DEBUG_TRACE, ("<=== rt28xx_close\n"));
|
||||
return 0; // close ok
|
||||
} /* End of rt28xx_close */
|
||||
|
||||
return 0; // close ok
|
||||
} /* End of rt28xx_close */
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
|
@ -387,7 +380,7 @@ Note:
|
|||
*/
|
||||
int rt28xx_open(IN PNET_DEV dev)
|
||||
{
|
||||
struct net_device * net_dev = (struct net_device *)dev;
|
||||
struct net_device *net_dev = (struct net_device *)dev;
|
||||
PRTMP_ADAPTER pAd = NULL;
|
||||
int retval = 0;
|
||||
//POS_COOKIE pObj;
|
||||
|
@ -395,24 +388,21 @@ int rt28xx_open(IN PNET_DEV dev)
|
|||
GET_PAD_FROM_NET_DEV(pAd, net_dev);
|
||||
|
||||
// Sanity check for pAd
|
||||
if (pAd == NULL)
|
||||
{
|
||||
if (pAd == NULL) {
|
||||
/* if 1st open fail, pAd will be free;
|
||||
So the net_dev->ml_priv will be NULL in 2rd open */
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (net_dev->priv_flags == INT_MAIN)
|
||||
{
|
||||
if (net_dev->priv_flags == INT_MAIN) {
|
||||
if (pAd->OpMode == OPMODE_STA)
|
||||
net_dev->wireless_handlers = (struct iw_handler_def *) &rt28xx_iw_handler_def;
|
||||
net_dev->wireless_handlers =
|
||||
(struct iw_handler_def *)&rt28xx_iw_handler_def;
|
||||
}
|
||||
|
||||
// Request interrupt service routine for PCI device
|
||||
// register the interrupt routine with the os
|
||||
RtmpOSIRQRequest(net_dev);
|
||||
|
||||
|
||||
// Init IRQ parameters stored in pAd
|
||||
RTMP_IRQ_INIT(pAd);
|
||||
|
||||
|
@ -420,7 +410,6 @@ int rt28xx_open(IN PNET_DEV dev)
|
|||
if (rt28xx_init(pAd, mac, hostname) == FALSE)
|
||||
goto err;
|
||||
|
||||
|
||||
// Enable Interrupt
|
||||
RTMP_IRQ_ENABLE(pAd);
|
||||
|
||||
|
@ -429,25 +418,25 @@ int rt28xx_open(IN PNET_DEV dev)
|
|||
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_START_UP);
|
||||
|
||||
{
|
||||
UINT32 reg = 0;
|
||||
RTMP_IO_READ32(pAd, 0x1300, ®); // clear garbage interrupts
|
||||
printk("0x1300 = %08x\n", reg);
|
||||
UINT32 reg = 0;
|
||||
RTMP_IO_READ32(pAd, 0x1300, ®); // clear garbage interrupts
|
||||
printk("0x1300 = %08x\n", reg);
|
||||
}
|
||||
|
||||
{
|
||||
// u32 reg;
|
||||
// UINT8 byte;
|
||||
// u16 tmp;
|
||||
// u32 reg;
|
||||
// UINT8 byte;
|
||||
// u16 tmp;
|
||||
|
||||
// RTMP_IO_READ32(pAd, XIFS_TIME_CFG, ®);
|
||||
// RTMP_IO_READ32(pAd, XIFS_TIME_CFG, ®);
|
||||
|
||||
// tmp = 0x0805;
|
||||
// reg = (reg & 0xffff0000) | tmp;
|
||||
// RTMP_IO_WRITE32(pAd, XIFS_TIME_CFG, reg);
|
||||
// tmp = 0x0805;
|
||||
// reg = (reg & 0xffff0000) | tmp;
|
||||
// RTMP_IO_WRITE32(pAd, XIFS_TIME_CFG, reg);
|
||||
|
||||
}
|
||||
#ifdef RTMP_MAC_PCI
|
||||
RTMPInitPCIeLinkCtrlValue(pAd);
|
||||
RTMPInitPCIeLinkCtrlValue(pAd);
|
||||
#endif // RTMP_MAC_PCI //
|
||||
|
||||
return (retval);
|
||||
|
@ -457,39 +446,41 @@ err:
|
|||
RtmpOSIRQRelease(net_dev);
|
||||
//---Add by shiang, move from rt28xx_init() to here.
|
||||
return (-1);
|
||||
} /* End of rt28xx_open */
|
||||
} /* End of rt28xx_open */
|
||||
|
||||
static const struct net_device_ops rt2860_netdev_ops = {
|
||||
.ndo_open = MainVirtualIF_open,
|
||||
.ndo_stop = MainVirtualIF_close,
|
||||
.ndo_do_ioctl = rt28xx_sta_ioctl,
|
||||
.ndo_get_stats = RT28xx_get_ether_stats,
|
||||
.ndo_validate_addr = NULL,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
.ndo_change_mtu = eth_change_mtu,
|
||||
.ndo_start_xmit = rt28xx_send_packets,
|
||||
.ndo_open = MainVirtualIF_open,
|
||||
.ndo_stop = MainVirtualIF_close,
|
||||
.ndo_do_ioctl = rt28xx_sta_ioctl,
|
||||
.ndo_get_stats = RT28xx_get_ether_stats,
|
||||
.ndo_validate_addr = NULL,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
.ndo_change_mtu = eth_change_mtu,
|
||||
.ndo_start_xmit = rt28xx_send_packets,
|
||||
};
|
||||
|
||||
PNET_DEV RtmpPhyNetDevInit(
|
||||
IN RTMP_ADAPTER *pAd,
|
||||
IN RTMP_OS_NETDEV_OP_HOOK *pNetDevHook)
|
||||
PNET_DEV RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd,
|
||||
IN RTMP_OS_NETDEV_OP_HOOK * pNetDevHook)
|
||||
{
|
||||
struct net_device *net_dev = NULL;
|
||||
// NDIS_STATUS Status;
|
||||
struct net_device *net_dev = NULL;
|
||||
// NDIS_STATUS Status;
|
||||
|
||||
net_dev = RtmpOSNetDevCreate(pAd, INT_MAIN, 0, sizeof(PRTMP_ADAPTER), INF_MAIN_DEV_NAME);
|
||||
if (net_dev == NULL)
|
||||
{
|
||||
printk("RtmpPhyNetDevInit(): creation failed for main physical net device!\n");
|
||||
net_dev =
|
||||
RtmpOSNetDevCreate(pAd, INT_MAIN, 0, sizeof(PRTMP_ADAPTER),
|
||||
INF_MAIN_DEV_NAME);
|
||||
if (net_dev == NULL) {
|
||||
printk
|
||||
("RtmpPhyNetDevInit(): creation failed for main physical net device!\n");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
NdisZeroMemory((unsigned char *)pNetDevHook, sizeof(RTMP_OS_NETDEV_OP_HOOK));
|
||||
NdisZeroMemory((unsigned char *)pNetDevHook,
|
||||
sizeof(RTMP_OS_NETDEV_OP_HOOK));
|
||||
pNetDevHook->netdev_ops = &rt2860_netdev_ops;
|
||||
pNetDevHook->priv_flags = INT_MAIN;
|
||||
pNetDevHook->needProtcted = FALSE;
|
||||
|
||||
net_dev->ml_priv = (PVOID)pAd;
|
||||
net_dev->ml_priv = (PVOID) pAd;
|
||||
pAd->net_dev = net_dev;
|
||||
|
||||
netif_stop_queue(net_dev);
|
||||
|
@ -498,7 +489,6 @@ PNET_DEV RtmpPhyNetDevInit(
|
|||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
Routine Description:
|
||||
|
@ -529,16 +519,14 @@ int rt28xx_packet_xmit(struct sk_buff *skb)
|
|||
|
||||
{
|
||||
// Drop send request since we are in monitor mode
|
||||
if (MONITOR_ON(pAd))
|
||||
{
|
||||
if (MONITOR_ON(pAd)) {
|
||||
RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
// EapolStart size is 18
|
||||
if (skb->len < 14)
|
||||
{
|
||||
// EapolStart size is 18
|
||||
if (skb->len < 14) {
|
||||
//printk("bad packet size: %d\n", pkt->len);
|
||||
hex_dump("bad packet", skb->data, skb->len);
|
||||
RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE);
|
||||
|
@ -546,7 +534,7 @@ int rt28xx_packet_xmit(struct sk_buff *skb)
|
|||
}
|
||||
|
||||
RTMP_SET_PACKET_5VT(pPacket, 0);
|
||||
STASendPackets((NDIS_HANDLE)pAd, (PPNDIS_PACKET) &pPacket, 1);
|
||||
STASendPackets((NDIS_HANDLE) pAd, (PPNDIS_PACKET) & pPacket, 1);
|
||||
|
||||
status = NETDEV_TX_OK;
|
||||
done:
|
||||
|
@ -554,7 +542,6 @@ done:
|
|||
return status;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
Routine Description:
|
||||
|
@ -571,30 +558,27 @@ Return Value:
|
|||
Note:
|
||||
========================================================================
|
||||
*/
|
||||
static int rt28xx_send_packets(
|
||||
IN struct sk_buff *skb_p,
|
||||
IN struct net_device *net_dev)
|
||||
static int rt28xx_send_packets(IN struct sk_buff *skb_p,
|
||||
IN struct net_device *net_dev)
|
||||
{
|
||||
RTMP_ADAPTER *pAd = NULL;
|
||||
|
||||
GET_PAD_FROM_NET_DEV(pAd, net_dev);
|
||||
|
||||
if (!(net_dev->flags & IFF_UP))
|
||||
{
|
||||
RELEASE_NDIS_PACKET(pAd, (PNDIS_PACKET)skb_p, NDIS_STATUS_FAILURE);
|
||||
if (!(net_dev->flags & IFF_UP)) {
|
||||
RELEASE_NDIS_PACKET(pAd, (PNDIS_PACKET) skb_p,
|
||||
NDIS_STATUS_FAILURE);
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
||||
NdisZeroMemory((PUCHAR)&skb_p->cb[CB_OFF], 15);
|
||||
NdisZeroMemory((PUCHAR) & skb_p->cb[CB_OFF], 15);
|
||||
RTMP_SET_PACKET_NET_DEVICE_MBSSID(skb_p, MAIN_MBSSID);
|
||||
|
||||
return rt28xx_packet_xmit(skb_p);
|
||||
}
|
||||
|
||||
|
||||
// This function will be called when query /proc
|
||||
struct iw_statistics *rt28xx_get_wireless_stats(
|
||||
IN struct net_device *net_dev)
|
||||
struct iw_statistics *rt28xx_get_wireless_stats(IN struct net_device *net_dev)
|
||||
{
|
||||
PRTMP_ADAPTER pAd = NULL;
|
||||
|
||||
|
@ -602,42 +586,41 @@ struct iw_statistics *rt28xx_get_wireless_stats(
|
|||
|
||||
DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_get_wireless_stats --->\n"));
|
||||
|
||||
pAd->iw_stats.status = 0; // Status - device dependent for now
|
||||
pAd->iw_stats.status = 0; // Status - device dependent for now
|
||||
|
||||
// link quality
|
||||
if (pAd->OpMode == OPMODE_STA)
|
||||
pAd->iw_stats.qual.qual = ((pAd->Mlme.ChannelQuality * 12)/10 + 10);
|
||||
pAd->iw_stats.qual.qual =
|
||||
((pAd->Mlme.ChannelQuality * 12) / 10 + 10);
|
||||
|
||||
if(pAd->iw_stats.qual.qual > 100)
|
||||
if (pAd->iw_stats.qual.qual > 100)
|
||||
pAd->iw_stats.qual.qual = 100;
|
||||
|
||||
if (pAd->OpMode == OPMODE_STA)
|
||||
{
|
||||
if (pAd->OpMode == OPMODE_STA) {
|
||||
pAd->iw_stats.qual.level =
|
||||
RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0,
|
||||
pAd->StaCfg.RssiSample.LastRssi1,
|
||||
pAd->StaCfg.RssiSample.LastRssi2);
|
||||
RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0,
|
||||
pAd->StaCfg.RssiSample.LastRssi1,
|
||||
pAd->StaCfg.RssiSample.LastRssi2);
|
||||
}
|
||||
|
||||
pAd->iw_stats.qual.noise = pAd->BbpWriteLatch[66]; // noise level (dBm)
|
||||
pAd->iw_stats.qual.noise = pAd->BbpWriteLatch[66]; // noise level (dBm)
|
||||
|
||||
pAd->iw_stats.qual.noise += 256 - 143;
|
||||
pAd->iw_stats.qual.updated = 1; // Flags to know if updated
|
||||
pAd->iw_stats.qual.updated = 1; // Flags to know if updated
|
||||
#ifdef IW_QUAL_DBM
|
||||
pAd->iw_stats.qual.updated |= IW_QUAL_DBM; // Level + Noise are dBm
|
||||
#endif // IW_QUAL_DBM //
|
||||
|
||||
pAd->iw_stats.discard.nwid = 0; // Rx : Wrong nwid/essid
|
||||
pAd->iw_stats.miss.beacon = 0; // Missed beacons/superframe
|
||||
pAd->iw_stats.discard.nwid = 0; // Rx : Wrong nwid/essid
|
||||
pAd->iw_stats.miss.beacon = 0; // Missed beacons/superframe
|
||||
|
||||
DBGPRINT(RT_DEBUG_TRACE, ("<--- rt28xx_get_wireless_stats\n"));
|
||||
return &pAd->iw_stats;
|
||||
}
|
||||
|
||||
|
||||
void tbtt_tasklet(unsigned long data)
|
||||
{
|
||||
//#define MAX_TX_IN_TBTT (16)
|
||||
//#define MAX_TX_IN_TBTT (16)
|
||||
|
||||
}
|
||||
|
||||
|
@ -657,19 +640,20 @@ void tbtt_tasklet(unsigned long data)
|
|||
|
||||
========================================================================
|
||||
*/
|
||||
static struct net_device_stats *RT28xx_get_ether_stats(
|
||||
IN struct net_device *net_dev)
|
||||
static struct net_device_stats *RT28xx_get_ether_stats(IN struct net_device
|
||||
*net_dev)
|
||||
{
|
||||
RTMP_ADAPTER *pAd = NULL;
|
||||
RTMP_ADAPTER *pAd = NULL;
|
||||
|
||||
if (net_dev)
|
||||
GET_PAD_FROM_NET_DEV(pAd, net_dev);
|
||||
|
||||
if (pAd)
|
||||
{
|
||||
if (pAd) {
|
||||
|
||||
pAd->stats.rx_packets = pAd->WlanCounters.ReceivedFragmentCount.QuadPart;
|
||||
pAd->stats.tx_packets = pAd->WlanCounters.TransmittedFragmentCount.QuadPart;
|
||||
pAd->stats.rx_packets =
|
||||
pAd->WlanCounters.ReceivedFragmentCount.QuadPart;
|
||||
pAd->stats.tx_packets =
|
||||
pAd->WlanCounters.TransmittedFragmentCount.QuadPart;
|
||||
|
||||
pAd->stats.rx_bytes = pAd->RalinkCounters.ReceivedByteCount;
|
||||
pAd->stats.tx_bytes = pAd->RalinkCounters.TransmittedByteCount;
|
||||
|
@ -680,45 +664,40 @@ static struct net_device_stats *RT28xx_get_ether_stats(
|
|||
pAd->stats.rx_dropped = 0;
|
||||
pAd->stats.tx_dropped = 0;
|
||||
|
||||
pAd->stats.multicast = pAd->WlanCounters.MulticastReceivedFrameCount.QuadPart; // multicast packets received
|
||||
pAd->stats.collisions = pAd->Counters8023.OneCollision + pAd->Counters8023.MoreCollisions; // Collision packets
|
||||
pAd->stats.multicast = pAd->WlanCounters.MulticastReceivedFrameCount.QuadPart; // multicast packets received
|
||||
pAd->stats.collisions = pAd->Counters8023.OneCollision + pAd->Counters8023.MoreCollisions; // Collision packets
|
||||
|
||||
pAd->stats.rx_length_errors = 0;
|
||||
pAd->stats.rx_over_errors = pAd->Counters8023.RxNoBuffer; // receiver ring buff overflow
|
||||
pAd->stats.rx_crc_errors = 0;//pAd->WlanCounters.FCSErrorCount; // recved pkt with crc error
|
||||
pAd->stats.rx_frame_errors = pAd->Counters8023.RcvAlignmentErrors; // recv'd frame alignment error
|
||||
pAd->stats.rx_fifo_errors = pAd->Counters8023.RxNoBuffer; // recv'r fifo overrun
|
||||
pAd->stats.rx_missed_errors = 0; // receiver missed packet
|
||||
pAd->stats.rx_length_errors = 0;
|
||||
pAd->stats.rx_over_errors = pAd->Counters8023.RxNoBuffer; // receiver ring buff overflow
|
||||
pAd->stats.rx_crc_errors = 0; //pAd->WlanCounters.FCSErrorCount; // recved pkt with crc error
|
||||
pAd->stats.rx_frame_errors = pAd->Counters8023.RcvAlignmentErrors; // recv'd frame alignment error
|
||||
pAd->stats.rx_fifo_errors = pAd->Counters8023.RxNoBuffer; // recv'r fifo overrun
|
||||
pAd->stats.rx_missed_errors = 0; // receiver missed packet
|
||||
|
||||
// detailed tx_errors
|
||||
pAd->stats.tx_aborted_errors = 0;
|
||||
pAd->stats.tx_carrier_errors = 0;
|
||||
pAd->stats.tx_fifo_errors = 0;
|
||||
pAd->stats.tx_heartbeat_errors = 0;
|
||||
pAd->stats.tx_window_errors = 0;
|
||||
// detailed tx_errors
|
||||
pAd->stats.tx_aborted_errors = 0;
|
||||
pAd->stats.tx_carrier_errors = 0;
|
||||
pAd->stats.tx_fifo_errors = 0;
|
||||
pAd->stats.tx_heartbeat_errors = 0;
|
||||
pAd->stats.tx_window_errors = 0;
|
||||
|
||||
// for cslip etc
|
||||
pAd->stats.rx_compressed = 0;
|
||||
pAd->stats.tx_compressed = 0;
|
||||
// for cslip etc
|
||||
pAd->stats.rx_compressed = 0;
|
||||
pAd->stats.tx_compressed = 0;
|
||||
|
||||
return &pAd->stats;
|
||||
}
|
||||
else
|
||||
return NULL;
|
||||
} else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN RtmpPhyNetDevExit(
|
||||
IN RTMP_ADAPTER *pAd,
|
||||
IN PNET_DEV net_dev)
|
||||
BOOLEAN RtmpPhyNetDevExit(IN RTMP_ADAPTER * pAd, IN PNET_DEV net_dev)
|
||||
{
|
||||
|
||||
|
||||
|
||||
// Unregister network device
|
||||
if (net_dev != NULL)
|
||||
{
|
||||
printk("RtmpOSNetDevDetach(): RtmpOSNetDeviceDetach(), dev->name=%s!\n", net_dev->name);
|
||||
if (net_dev != NULL) {
|
||||
printk
|
||||
("RtmpOSNetDevDetach(): RtmpOSNetDeviceDetach(), dev->name=%s!\n",
|
||||
net_dev->name);
|
||||
RtmpOSNetDevDetach(net_dev);
|
||||
}
|
||||
|
||||
|
@ -726,7 +705,6 @@ BOOLEAN RtmpPhyNetDevExit(
|
|||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
Routine Description:
|
||||
|
@ -743,17 +721,14 @@ Return Value:
|
|||
Note:
|
||||
========================================================================
|
||||
*/
|
||||
NDIS_STATUS AdapterBlockAllocateMemory(
|
||||
IN PVOID handle,
|
||||
OUT PVOID *ppAd)
|
||||
NDIS_STATUS AdapterBlockAllocateMemory(IN PVOID handle, OUT PVOID * ppAd)
|
||||
{
|
||||
|
||||
*ppAd = (PVOID)vmalloc(sizeof(RTMP_ADAPTER)); //pci_alloc_consistent(pci_dev, sizeof(RTMP_ADAPTER), phy_addr);
|
||||
*ppAd = (PVOID) vmalloc(sizeof(RTMP_ADAPTER)); //pci_alloc_consistent(pci_dev, sizeof(RTMP_ADAPTER), phy_addr);
|
||||
|
||||
if (*ppAd)
|
||||
{
|
||||
if (*ppAd) {
|
||||
NdisZeroMemory(*ppAd, sizeof(RTMP_ADAPTER));
|
||||
((PRTMP_ADAPTER)*ppAd)->OS_Cookie = handle;
|
||||
((PRTMP_ADAPTER) * ppAd)->OS_Cookie = handle;
|
||||
return (NDIS_STATUS_SUCCESS);
|
||||
} else {
|
||||
return (NDIS_STATUS_FAILURE);
|
||||
|
|
|
@ -48,31 +48,28 @@ static void ac2_dma_done_tasklet(unsigned long data);
|
|||
static void ac3_dma_done_tasklet(unsigned long data);
|
||||
static void fifo_statistic_full_tasklet(unsigned long data);
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* Symbol & Macro Definitions */
|
||||
/*---------------------------------------------------------------------*/
|
||||
#define RT2860_INT_RX_DLY (1<<0) // bit 0
|
||||
#define RT2860_INT_TX_DLY (1<<1) // bit 1
|
||||
#define RT2860_INT_RX_DONE (1<<2) // bit 2
|
||||
#define RT2860_INT_AC0_DMA_DONE (1<<3) // bit 3
|
||||
#define RT2860_INT_AC1_DMA_DONE (1<<4) // bit 4
|
||||
#define RT2860_INT_AC2_DMA_DONE (1<<5) // bit 5
|
||||
#define RT2860_INT_AC3_DMA_DONE (1<<6) // bit 6
|
||||
#define RT2860_INT_HCCA_DMA_DONE (1<<7) // bit 7
|
||||
#define RT2860_INT_MGMT_DONE (1<<8) // bit 8
|
||||
#define RT2860_INT_RX_DLY (1<<0) // bit 0
|
||||
#define RT2860_INT_TX_DLY (1<<1) // bit 1
|
||||
#define RT2860_INT_RX_DONE (1<<2) // bit 2
|
||||
#define RT2860_INT_AC0_DMA_DONE (1<<3) // bit 3
|
||||
#define RT2860_INT_AC1_DMA_DONE (1<<4) // bit 4
|
||||
#define RT2860_INT_AC2_DMA_DONE (1<<5) // bit 5
|
||||
#define RT2860_INT_AC3_DMA_DONE (1<<6) // bit 6
|
||||
#define RT2860_INT_HCCA_DMA_DONE (1<<7) // bit 7
|
||||
#define RT2860_INT_MGMT_DONE (1<<8) // bit 8
|
||||
|
||||
#define INT_RX RT2860_INT_RX_DONE
|
||||
|
||||
#define INT_AC0_DLY (RT2860_INT_AC0_DMA_DONE) //| RT2860_INT_TX_DLY)
|
||||
#define INT_AC1_DLY (RT2860_INT_AC1_DMA_DONE) //| RT2860_INT_TX_DLY)
|
||||
#define INT_AC2_DLY (RT2860_INT_AC2_DMA_DONE) //| RT2860_INT_TX_DLY)
|
||||
#define INT_AC3_DLY (RT2860_INT_AC3_DMA_DONE) //| RT2860_INT_TX_DLY)
|
||||
#define INT_HCCA_DLY (RT2860_INT_HCCA_DMA_DONE) //| RT2860_INT_TX_DLY)
|
||||
#define INT_AC0_DLY (RT2860_INT_AC0_DMA_DONE) //| RT2860_INT_TX_DLY)
|
||||
#define INT_AC1_DLY (RT2860_INT_AC1_DMA_DONE) //| RT2860_INT_TX_DLY)
|
||||
#define INT_AC2_DLY (RT2860_INT_AC2_DMA_DONE) //| RT2860_INT_TX_DLY)
|
||||
#define INT_AC3_DLY (RT2860_INT_AC3_DMA_DONE) //| RT2860_INT_TX_DLY)
|
||||
#define INT_HCCA_DLY (RT2860_INT_HCCA_DMA_DONE) //| RT2860_INT_TX_DLY)
|
||||
#define INT_MGMT_DLY RT2860_INT_MGMT_DONE
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
* Interface-depended memory allocation/Free related procedures.
|
||||
|
@ -80,92 +77,90 @@ static void fifo_statistic_full_tasklet(unsigned long data);
|
|||
*
|
||||
**************************************************************************/
|
||||
// Function for TxDesc Memory allocation.
|
||||
void RTMP_AllocateTxDescMemory(
|
||||
IN PRTMP_ADAPTER pAd,
|
||||
IN UINT Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
OUT PVOID *VirtualAddress,
|
||||
OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
void RTMP_AllocateTxDescMemory(IN PRTMP_ADAPTER pAd,
|
||||
IN UINT Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
OUT PVOID * VirtualAddress,
|
||||
OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
{
|
||||
POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie;
|
||||
POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
*VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress);
|
||||
*VirtualAddress =
|
||||
(PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length,
|
||||
PhysicalAddress);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Function for MgmtDesc Memory allocation.
|
||||
void RTMP_AllocateMgmtDescMemory(
|
||||
IN PRTMP_ADAPTER pAd,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
OUT PVOID *VirtualAddress,
|
||||
OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
void RTMP_AllocateMgmtDescMemory(IN PRTMP_ADAPTER pAd,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
OUT PVOID * VirtualAddress,
|
||||
OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
{
|
||||
POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie;
|
||||
POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
*VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress);
|
||||
*VirtualAddress =
|
||||
(PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length,
|
||||
PhysicalAddress);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Function for RxDesc Memory allocation.
|
||||
void RTMP_AllocateRxDescMemory(
|
||||
IN PRTMP_ADAPTER pAd,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
OUT PVOID *VirtualAddress,
|
||||
OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
void RTMP_AllocateRxDescMemory(IN PRTMP_ADAPTER pAd,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
OUT PVOID * VirtualAddress,
|
||||
OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
{
|
||||
POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie;
|
||||
POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
*VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress);
|
||||
*VirtualAddress =
|
||||
(PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length,
|
||||
PhysicalAddress);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Function for free allocated Desc Memory.
|
||||
void RTMP_FreeDescMemory(
|
||||
IN PRTMP_ADAPTER pAd,
|
||||
IN ULONG Length,
|
||||
IN PVOID VirtualAddress,
|
||||
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
void RTMP_FreeDescMemory(IN PRTMP_ADAPTER pAd,
|
||||
IN ULONG Length,
|
||||
IN PVOID VirtualAddress,
|
||||
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
{
|
||||
POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie;
|
||||
POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
pci_free_consistent(pObj->pci_dev, Length, VirtualAddress, PhysicalAddress);
|
||||
pci_free_consistent(pObj->pci_dev, Length, VirtualAddress,
|
||||
PhysicalAddress);
|
||||
}
|
||||
|
||||
|
||||
// Function for TxData DMA Memory allocation.
|
||||
void RTMP_AllocateFirstTxBuffer(
|
||||
IN PRTMP_ADAPTER pAd,
|
||||
IN UINT Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
OUT PVOID *VirtualAddress,
|
||||
OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
void RTMP_AllocateFirstTxBuffer(IN PRTMP_ADAPTER pAd,
|
||||
IN UINT Index,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
OUT PVOID * VirtualAddress,
|
||||
OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
{
|
||||
POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie;
|
||||
POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
*VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress);
|
||||
*VirtualAddress =
|
||||
(PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length,
|
||||
PhysicalAddress);
|
||||
}
|
||||
|
||||
|
||||
void RTMP_FreeFirstTxBuffer(
|
||||
IN PRTMP_ADAPTER pAd,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
IN PVOID VirtualAddress,
|
||||
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
void RTMP_FreeFirstTxBuffer(IN PRTMP_ADAPTER pAd,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
IN PVOID VirtualAddress,
|
||||
IN NDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
{
|
||||
POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie;
|
||||
POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
pci_free_consistent(pObj->pci_dev, Length, VirtualAddress, PhysicalAddress);
|
||||
pci_free_consistent(pObj->pci_dev, Length, VirtualAddress,
|
||||
PhysicalAddress);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FUNCTION: Allocate a common buffer for DMA
|
||||
* ARGUMENTS:
|
||||
|
@ -175,19 +170,19 @@ void RTMP_FreeFirstTxBuffer(
|
|||
* VirtualAddress: Pointer to memory is returned here
|
||||
* PhysicalAddress: Physical address corresponding to virtual address
|
||||
*/
|
||||
void RTMP_AllocateSharedMemory(
|
||||
IN PRTMP_ADAPTER pAd,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
OUT PVOID *VirtualAddress,
|
||||
OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
void RTMP_AllocateSharedMemory(IN PRTMP_ADAPTER pAd,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
OUT PVOID * VirtualAddress,
|
||||
OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
{
|
||||
POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie;
|
||||
POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
*VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress);
|
||||
*VirtualAddress =
|
||||
(PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length,
|
||||
PhysicalAddress);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FUNCTION: Allocate a packet buffer for DMA
|
||||
* ARGUMENTS:
|
||||
|
@ -199,25 +194,28 @@ void RTMP_AllocateSharedMemory(
|
|||
* Notes:
|
||||
* Cached is ignored: always cached memory
|
||||
*/
|
||||
PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
|
||||
IN PRTMP_ADAPTER pAd,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
OUT PVOID *VirtualAddress,
|
||||
OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress)
|
||||
PNDIS_PACKET RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN Cached,
|
||||
OUT PVOID * VirtualAddress,
|
||||
OUT PNDIS_PHYSICAL_ADDRESS
|
||||
PhysicalAddress)
|
||||
{
|
||||
struct sk_buff *pkt;
|
||||
|
||||
pkt = dev_alloc_skb(Length);
|
||||
|
||||
if (pkt == NULL) {
|
||||
DBGPRINT(RT_DEBUG_ERROR, ("can't allocate rx %ld size packet\n",Length));
|
||||
DBGPRINT(RT_DEBUG_ERROR,
|
||||
("can't allocate rx %ld size packet\n", Length));
|
||||
}
|
||||
|
||||
if (pkt) {
|
||||
RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pkt), PKTSRC_NDIS);
|
||||
*VirtualAddress = (PVOID) pkt->data;
|
||||
*PhysicalAddress = PCI_MAP_SINGLE(pAd, *VirtualAddress, Length, -1, PCI_DMA_FROMDEVICE);
|
||||
*PhysicalAddress =
|
||||
PCI_MAP_SINGLE(pAd, *VirtualAddress, Length, -1,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
} else {
|
||||
*VirtualAddress = (PVOID) NULL;
|
||||
*PhysicalAddress = (NDIS_PHYSICAL_ADDRESS) NULL;
|
||||
|
@ -226,36 +224,40 @@ PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
|
|||
return (PNDIS_PACKET) pkt;
|
||||
}
|
||||
|
||||
|
||||
VOID Invalid_Remaining_Packet(
|
||||
IN PRTMP_ADAPTER pAd,
|
||||
IN ULONG VirtualAddress)
|
||||
VOID Invalid_Remaining_Packet(IN PRTMP_ADAPTER pAd, IN ULONG VirtualAddress)
|
||||
{
|
||||
NDIS_PHYSICAL_ADDRESS PhysicalAddress;
|
||||
|
||||
PhysicalAddress = PCI_MAP_SINGLE(pAd, (void *)(VirtualAddress+1600), RX_BUFFER_NORMSIZE-1600, -1, PCI_DMA_FROMDEVICE);
|
||||
PhysicalAddress =
|
||||
PCI_MAP_SINGLE(pAd, (void *)(VirtualAddress + 1600),
|
||||
RX_BUFFER_NORMSIZE - 1600, -1, PCI_DMA_FROMDEVICE);
|
||||
}
|
||||
|
||||
NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER *pAd)
|
||||
NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER * pAd)
|
||||
{
|
||||
POS_COOKIE pObj;
|
||||
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->mgmt_dma_done_task, mgmt_dma_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac0_dma_done_task, ac0_dma_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac1_dma_done_task, ac1_dma_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac2_dma_done_task, ac2_dma_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac3_dma_done_task, ac3_dma_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->mgmt_dma_done_task, mgmt_dma_done_tasklet,
|
||||
(unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac0_dma_done_task, ac0_dma_done_tasklet,
|
||||
(unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac1_dma_done_task, ac1_dma_done_tasklet,
|
||||
(unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac2_dma_done_task, ac2_dma_done_tasklet,
|
||||
(unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac3_dma_done_task, ac3_dma_done_tasklet,
|
||||
(unsigned long)pAd);
|
||||
tasklet_init(&pObj->tbtt_task, tbtt_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->fifo_statistic_full_task, fifo_statistic_full_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->fifo_statistic_full_task,
|
||||
fifo_statistic_full_tasklet, (unsigned long)pAd);
|
||||
|
||||
return NDIS_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
void RtmpNetTaskExit(IN RTMP_ADAPTER *pAd)
|
||||
void RtmpNetTaskExit(IN RTMP_ADAPTER * pAd)
|
||||
{
|
||||
POS_COOKIE pObj;
|
||||
|
||||
|
@ -271,15 +273,12 @@ void RtmpNetTaskExit(IN RTMP_ADAPTER *pAd)
|
|||
tasklet_kill(&pObj->fifo_statistic_full_task);
|
||||
}
|
||||
|
||||
|
||||
NDIS_STATUS RtmpMgmtTaskInit(IN RTMP_ADAPTER *pAd)
|
||||
NDIS_STATUS RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd)
|
||||
{
|
||||
|
||||
|
||||
return NDIS_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
Routine Description:
|
||||
|
@ -294,15 +293,12 @@ Return Value:
|
|||
Note:
|
||||
========================================================================
|
||||
*/
|
||||
VOID RtmpMgmtTaskExit(
|
||||
IN RTMP_ADAPTER *pAd)
|
||||
VOID RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd)
|
||||
{
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
static inline void rt2860_int_enable(PRTMP_ADAPTER pAd, unsigned int mode)
|
||||
{
|
||||
u32 regValue;
|
||||
|
@ -311,31 +307,28 @@ static inline void rt2860_int_enable(PRTMP_ADAPTER pAd, unsigned int mode)
|
|||
regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask);
|
||||
//if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
|
||||
{
|
||||
RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 1:enable
|
||||
RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 1:enable
|
||||
}
|
||||
//else
|
||||
// DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
|
||||
// DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
|
||||
|
||||
if (regValue != 0)
|
||||
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
|
||||
}
|
||||
|
||||
|
||||
static inline void rt2860_int_disable(PRTMP_ADAPTER pAd, unsigned int mode)
|
||||
{
|
||||
u32 regValue;
|
||||
|
||||
pAd->int_disable_mask |= mode;
|
||||
regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask);
|
||||
RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 0: disable
|
||||
regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask);
|
||||
RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 0: disable
|
||||
|
||||
if (regValue == 0)
|
||||
{
|
||||
if (regValue == 0) {
|
||||
RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
* tasklet related procedures.
|
||||
|
@ -345,17 +338,18 @@ static void mgmt_dma_done_tasklet(unsigned long data)
|
|||
{
|
||||
unsigned long flags;
|
||||
PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data;
|
||||
INT_SOURCE_CSR_STRUC IntSource;
|
||||
INT_SOURCE_CSR_STRUC IntSource;
|
||||
POS_COOKIE pObj;
|
||||
|
||||
// Do nothing if the driver is starting halt state.
|
||||
// This might happen when timer already been fired before cancel timer with mlmehalt
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
if (RTMP_TEST_FLAG
|
||||
(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
return;
|
||||
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
// printk("mgmt_dma_done_process\n");
|
||||
// printk("mgmt_dma_done_process\n");
|
||||
IntSource.word = 0;
|
||||
IntSource.field.MgmtDmaDone = 1;
|
||||
pAd->int_pending &= ~INT_MGMT_DLY;
|
||||
|
@ -368,8 +362,7 @@ static void mgmt_dma_done_tasklet(unsigned long data)
|
|||
/*
|
||||
* double check to avoid lose of interrupts
|
||||
*/
|
||||
if (pAd->int_pending & INT_MGMT_DLY)
|
||||
{
|
||||
if (pAd->int_pending & INT_MGMT_DLY) {
|
||||
tasklet_hi_schedule(&pObj->mgmt_dma_done_task);
|
||||
RTMP_INT_UNLOCK(&pAd->irq_lock, flags);
|
||||
return;
|
||||
|
@ -380,30 +373,29 @@ static void mgmt_dma_done_tasklet(unsigned long data)
|
|||
RTMP_INT_UNLOCK(&pAd->irq_lock, flags);
|
||||
}
|
||||
|
||||
|
||||
static void rx_done_tasklet(unsigned long data)
|
||||
{
|
||||
unsigned long flags;
|
||||
PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data;
|
||||
BOOLEAN bReschedule = 0;
|
||||
BOOLEAN bReschedule = 0;
|
||||
POS_COOKIE pObj;
|
||||
|
||||
// Do nothing if the driver is starting halt state.
|
||||
// This might happen when timer already been fired before cancel timer with mlmehalt
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
if (RTMP_TEST_FLAG
|
||||
(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
return;
|
||||
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
pAd->int_pending &= ~(INT_RX);
|
||||
bReschedule = STARxDoneInterruptHandle(pAd, 0);
|
||||
bReschedule = STARxDoneInterruptHandle(pAd, 0);
|
||||
|
||||
RTMP_INT_LOCK(&pAd->irq_lock, flags);
|
||||
/*
|
||||
* double check to avoid rotting packet
|
||||
*/
|
||||
if (pAd->int_pending & INT_RX || bReschedule)
|
||||
{
|
||||
if (pAd->int_pending & INT_RX || bReschedule) {
|
||||
tasklet_hi_schedule(&pObj->rx_done_task);
|
||||
RTMP_INT_UNLOCK(&pAd->irq_lock, flags);
|
||||
return;
|
||||
|
@ -415,7 +407,6 @@ static void rx_done_tasklet(unsigned long data)
|
|||
|
||||
}
|
||||
|
||||
|
||||
void fifo_statistic_full_tasklet(unsigned long data)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
@ -424,10 +415,11 @@ void fifo_statistic_full_tasklet(unsigned long data)
|
|||
|
||||
// Do nothing if the driver is starting halt state.
|
||||
// This might happen when timer already been fired before cancel timer with mlmehalt
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
if (RTMP_TEST_FLAG
|
||||
(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
return;
|
||||
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
pAd->int_pending &= ~(FifoStaFullInt);
|
||||
NICUpdateFifoStaCounters(pAd);
|
||||
|
@ -436,8 +428,7 @@ void fifo_statistic_full_tasklet(unsigned long data)
|
|||
/*
|
||||
* double check to avoid rotting packet
|
||||
*/
|
||||
if (pAd->int_pending & FifoStaFullInt)
|
||||
{
|
||||
if (pAd->int_pending & FifoStaFullInt) {
|
||||
tasklet_hi_schedule(&pObj->fifo_statistic_full_task);
|
||||
RTMP_INT_UNLOCK(&pAd->irq_lock, flags);
|
||||
return;
|
||||
|
@ -454,18 +445,19 @@ static void ac3_dma_done_tasklet(unsigned long data)
|
|||
{
|
||||
unsigned long flags;
|
||||
PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data;
|
||||
INT_SOURCE_CSR_STRUC IntSource;
|
||||
INT_SOURCE_CSR_STRUC IntSource;
|
||||
POS_COOKIE pObj;
|
||||
BOOLEAN bReschedule = 0;
|
||||
|
||||
// Do nothing if the driver is starting halt state.
|
||||
// This might happen when timer already been fired before cancel timer with mlmehalt
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
if (RTMP_TEST_FLAG
|
||||
(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
return;
|
||||
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
// printk("ac0_dma_done_process\n");
|
||||
// printk("ac0_dma_done_process\n");
|
||||
IntSource.word = 0;
|
||||
IntSource.field.Ac3DmaDone = 1;
|
||||
pAd->int_pending &= ~INT_AC3_DLY;
|
||||
|
@ -476,8 +468,7 @@ static void ac3_dma_done_tasklet(unsigned long data)
|
|||
/*
|
||||
* double check to avoid lose of interrupts
|
||||
*/
|
||||
if ((pAd->int_pending & INT_AC3_DLY) || bReschedule)
|
||||
{
|
||||
if ((pAd->int_pending & INT_AC3_DLY) || bReschedule) {
|
||||
tasklet_hi_schedule(&pObj->ac3_dma_done_task);
|
||||
RTMP_INT_UNLOCK(&pAd->irq_lock, flags);
|
||||
return;
|
||||
|
@ -488,21 +479,21 @@ static void ac3_dma_done_tasklet(unsigned long data)
|
|||
RTMP_INT_UNLOCK(&pAd->irq_lock, flags);
|
||||
}
|
||||
|
||||
|
||||
static void ac2_dma_done_tasklet(unsigned long data)
|
||||
{
|
||||
unsigned long flags;
|
||||
PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data;
|
||||
INT_SOURCE_CSR_STRUC IntSource;
|
||||
INT_SOURCE_CSR_STRUC IntSource;
|
||||
POS_COOKIE pObj;
|
||||
BOOLEAN bReschedule = 0;
|
||||
|
||||
// Do nothing if the driver is starting halt state.
|
||||
// This might happen when timer already been fired before cancel timer with mlmehalt
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
if (RTMP_TEST_FLAG
|
||||
(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
return;
|
||||
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
IntSource.word = 0;
|
||||
IntSource.field.Ac2DmaDone = 1;
|
||||
|
@ -515,8 +506,7 @@ static void ac2_dma_done_tasklet(unsigned long data)
|
|||
/*
|
||||
* double check to avoid lose of interrupts
|
||||
*/
|
||||
if ((pAd->int_pending & INT_AC2_DLY) || bReschedule)
|
||||
{
|
||||
if ((pAd->int_pending & INT_AC2_DLY) || bReschedule) {
|
||||
tasklet_hi_schedule(&pObj->ac2_dma_done_task);
|
||||
RTMP_INT_UNLOCK(&pAd->irq_lock, flags);
|
||||
return;
|
||||
|
@ -527,23 +517,23 @@ static void ac2_dma_done_tasklet(unsigned long data)
|
|||
RTMP_INT_UNLOCK(&pAd->irq_lock, flags);
|
||||
}
|
||||
|
||||
|
||||
static void ac1_dma_done_tasklet(unsigned long data)
|
||||
{
|
||||
unsigned long flags;
|
||||
PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data;
|
||||
INT_SOURCE_CSR_STRUC IntSource;
|
||||
INT_SOURCE_CSR_STRUC IntSource;
|
||||
POS_COOKIE pObj;
|
||||
BOOLEAN bReschedule = 0;
|
||||
|
||||
// Do nothing if the driver is starting halt state.
|
||||
// This might happen when timer already been fired before cancel timer with mlmehalt
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
if (RTMP_TEST_FLAG
|
||||
(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
return;
|
||||
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
// printk("ac0_dma_done_process\n");
|
||||
// printk("ac0_dma_done_process\n");
|
||||
IntSource.word = 0;
|
||||
IntSource.field.Ac1DmaDone = 1;
|
||||
pAd->int_pending &= ~INT_AC1_DLY;
|
||||
|
@ -554,8 +544,7 @@ static void ac1_dma_done_tasklet(unsigned long data)
|
|||
/*
|
||||
* double check to avoid lose of interrupts
|
||||
*/
|
||||
if ((pAd->int_pending & INT_AC1_DLY) || bReschedule)
|
||||
{
|
||||
if ((pAd->int_pending & INT_AC1_DLY) || bReschedule) {
|
||||
tasklet_hi_schedule(&pObj->ac1_dma_done_task);
|
||||
RTMP_INT_UNLOCK(&pAd->irq_lock, flags);
|
||||
return;
|
||||
|
@ -566,36 +555,35 @@ static void ac1_dma_done_tasklet(unsigned long data)
|
|||
RTMP_INT_UNLOCK(&pAd->irq_lock, flags);
|
||||
}
|
||||
|
||||
|
||||
static void ac0_dma_done_tasklet(unsigned long data)
|
||||
{
|
||||
unsigned long flags;
|
||||
PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data;
|
||||
INT_SOURCE_CSR_STRUC IntSource;
|
||||
INT_SOURCE_CSR_STRUC IntSource;
|
||||
POS_COOKIE pObj;
|
||||
BOOLEAN bReschedule = 0;
|
||||
|
||||
// Do nothing if the driver is starting halt state.
|
||||
// This might happen when timer already been fired before cancel timer with mlmehalt
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
if (RTMP_TEST_FLAG
|
||||
(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))
|
||||
return;
|
||||
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
// printk("ac0_dma_done_process\n");
|
||||
// printk("ac0_dma_done_process\n");
|
||||
IntSource.word = 0;
|
||||
IntSource.field.Ac0DmaDone = 1;
|
||||
pAd->int_pending &= ~INT_AC0_DLY;
|
||||
|
||||
// RTMPHandleMgmtRingDmaDoneInterrupt(pAd);
|
||||
// RTMPHandleMgmtRingDmaDoneInterrupt(pAd);
|
||||
bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource);
|
||||
|
||||
RTMP_INT_LOCK(&pAd->irq_lock, flags);
|
||||
/*
|
||||
* double check to avoid lose of interrupts
|
||||
*/
|
||||
if ((pAd->int_pending & INT_AC0_DLY) || bReschedule)
|
||||
{
|
||||
if ((pAd->int_pending & INT_AC0_DLY) || bReschedule) {
|
||||
tasklet_hi_schedule(&pObj->ac0_dma_done_task);
|
||||
RTMP_INT_UNLOCK(&pAd->irq_lock, flags);
|
||||
return;
|
||||
|
@ -606,9 +594,6 @@ static void ac0_dma_done_tasklet(unsigned long data)
|
|||
RTMP_INT_UNLOCK(&pAd->irq_lock, flags);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
* interrupt handler related procedures.
|
||||
|
@ -618,27 +603,25 @@ int print_int_count;
|
|||
|
||||
IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance)
|
||||
{
|
||||
struct net_device *net_dev = (struct net_device *) dev_instance;
|
||||
struct net_device *net_dev = (struct net_device *)dev_instance;
|
||||
PRTMP_ADAPTER pAd = NULL;
|
||||
INT_SOURCE_CSR_STRUC IntSource;
|
||||
INT_SOURCE_CSR_STRUC IntSource;
|
||||
POS_COOKIE pObj;
|
||||
|
||||
GET_PAD_FROM_NET_DEV(pAd, net_dev);
|
||||
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
|
||||
/* Note 03312008: we can not return here before
|
||||
RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word);
|
||||
RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word);
|
||||
Or kernel will panic after ifconfig ra0 down sometimes */
|
||||
|
||||
RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word);
|
||||
RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word);
|
||||
Or kernel will panic after ifconfig ra0 down sometimes */
|
||||
|
||||
//
|
||||
// Inital the Interrupt source.
|
||||
//
|
||||
IntSource.word = 0x00000000L;
|
||||
// McuIntSource.word = 0x00000000L;
|
||||
// McuIntSource.word = 0x00000000L;
|
||||
|
||||
//
|
||||
// Get the interrupt sources & saved to local variable
|
||||
|
@ -655,25 +638,26 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance)
|
|||
//
|
||||
// RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
|
||||
// RT2860 => when ASIC is sleeping, MAC register can be read and written.
|
||||
// if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
|
||||
// if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
|
||||
{
|
||||
RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word);
|
||||
RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); // write 1 to clear
|
||||
RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); // write 1 to clear
|
||||
}
|
||||
// else
|
||||
// DBGPRINT(RT_DEBUG_TRACE, (">>>fOP_STATUS_DOZE<<<\n"));
|
||||
// else
|
||||
// DBGPRINT(RT_DEBUG_TRACE, (">>>fOP_STATUS_DOZE<<<\n"));
|
||||
|
||||
// RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IsrAfterClear);
|
||||
// RTMP_IO_READ32(pAd, MCU_INT_SOURCE_CSR, &McuIsrAfterClear);
|
||||
// DBGPRINT(RT_DEBUG_INFO, ("====> RTMPHandleInterrupt(ISR=%08x,Mcu ISR=%08x, After clear ISR=%08x, MCU ISR=%08x)\n",
|
||||
// IntSource.word, McuIntSource.word, IsrAfterClear, McuIsrAfterClear));
|
||||
// RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IsrAfterClear);
|
||||
// RTMP_IO_READ32(pAd, MCU_INT_SOURCE_CSR, &McuIsrAfterClear);
|
||||
// DBGPRINT(RT_DEBUG_INFO, ("====> RTMPHandleInterrupt(ISR=%08x,Mcu ISR=%08x, After clear ISR=%08x, MCU ISR=%08x)\n",
|
||||
// IntSource.word, McuIntSource.word, IsrAfterClear, McuIsrAfterClear));
|
||||
|
||||
// Do nothing if Reset in progress
|
||||
if (RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |fRTMP_ADAPTER_HALT_IN_PROGRESS)))
|
||||
{
|
||||
return IRQ_HANDLED;
|
||||
if (RTMP_TEST_FLAG
|
||||
(pAd,
|
||||
(fRTMP_ADAPTER_RESET_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS))) {
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
//
|
||||
// Handle interrupt, walk through all bits
|
||||
// Should start from highest priority interrupt
|
||||
|
@ -684,7 +668,6 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance)
|
|||
|
||||
#endif
|
||||
|
||||
|
||||
pAd->bPCIclkOff = FALSE;
|
||||
|
||||
// If required spinlock, each interrupt service routine has to acquire
|
||||
|
@ -692,28 +675,25 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance)
|
|||
//
|
||||
|
||||
// Do nothing if NIC doesn't exist
|
||||
if (IntSource.word == 0xffffffff)
|
||||
{
|
||||
RTMP_SET_FLAG(pAd, (fRTMP_ADAPTER_NIC_NOT_EXIST | fRTMP_ADAPTER_HALT_IN_PROGRESS));
|
||||
return IRQ_HANDLED;
|
||||
if (IntSource.word == 0xffffffff) {
|
||||
RTMP_SET_FLAG(pAd,
|
||||
(fRTMP_ADAPTER_NIC_NOT_EXIST |
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS));
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
if (IntSource.word & TxCoherent)
|
||||
{
|
||||
if (IntSource.word & TxCoherent) {
|
||||
DBGPRINT(RT_DEBUG_ERROR, (">>>TxCoherent<<<\n"));
|
||||
RTMPHandleRxCoherentInterrupt(pAd);
|
||||
}
|
||||
|
||||
if (IntSource.word & RxCoherent)
|
||||
{
|
||||
if (IntSource.word & RxCoherent) {
|
||||
DBGPRINT(RT_DEBUG_ERROR, (">>>RxCoherent<<<\n"));
|
||||
RTMPHandleRxCoherentInterrupt(pAd);
|
||||
}
|
||||
|
||||
if (IntSource.word & FifoStaFullInt)
|
||||
{
|
||||
if ((pAd->int_disable_mask & FifoStaFullInt) == 0)
|
||||
{
|
||||
if (IntSource.word & FifoStaFullInt) {
|
||||
if ((pAd->int_disable_mask & FifoStaFullInt) == 0) {
|
||||
/* mask FifoStaFullInt */
|
||||
rt2860_int_disable(pAd, FifoStaFullInt);
|
||||
tasklet_hi_schedule(&pObj->fifo_statistic_full_task);
|
||||
|
@ -721,20 +701,16 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance)
|
|||
pAd->int_pending |= FifoStaFullInt;
|
||||
}
|
||||
|
||||
if (IntSource.word & INT_MGMT_DLY)
|
||||
{
|
||||
if ((pAd->int_disable_mask & INT_MGMT_DLY) ==0 )
|
||||
{
|
||||
if (IntSource.word & INT_MGMT_DLY) {
|
||||
if ((pAd->int_disable_mask & INT_MGMT_DLY) == 0) {
|
||||
rt2860_int_disable(pAd, INT_MGMT_DLY);
|
||||
tasklet_hi_schedule(&pObj->mgmt_dma_done_task);
|
||||
}
|
||||
pAd->int_pending |= INT_MGMT_DLY ;
|
||||
pAd->int_pending |= INT_MGMT_DLY;
|
||||
}
|
||||
|
||||
if (IntSource.word & INT_RX)
|
||||
{
|
||||
if ((pAd->int_disable_mask & INT_RX) == 0)
|
||||
{
|
||||
if (IntSource.word & INT_RX) {
|
||||
if ((pAd->int_disable_mask & INT_RX) == 0) {
|
||||
|
||||
/* mask RxINT */
|
||||
rt2860_int_disable(pAd, INT_RX);
|
||||
|
@ -743,11 +719,9 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance)
|
|||
pAd->int_pending |= INT_RX;
|
||||
}
|
||||
|
||||
if (IntSource.word & INT_AC3_DLY)
|
||||
{
|
||||
if (IntSource.word & INT_AC3_DLY) {
|
||||
|
||||
if ((pAd->int_disable_mask & INT_AC3_DLY) == 0)
|
||||
{
|
||||
if ((pAd->int_disable_mask & INT_AC3_DLY) == 0) {
|
||||
/* mask TxDataInt */
|
||||
rt2860_int_disable(pAd, INT_AC3_DLY);
|
||||
tasklet_hi_schedule(&pObj->ac3_dma_done_task);
|
||||
|
@ -755,11 +729,9 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance)
|
|||
pAd->int_pending |= INT_AC3_DLY;
|
||||
}
|
||||
|
||||
if (IntSource.word & INT_AC2_DLY)
|
||||
{
|
||||
if (IntSource.word & INT_AC2_DLY) {
|
||||
|
||||
if ((pAd->int_disable_mask & INT_AC2_DLY) == 0)
|
||||
{
|
||||
if ((pAd->int_disable_mask & INT_AC2_DLY) == 0) {
|
||||
/* mask TxDataInt */
|
||||
rt2860_int_disable(pAd, INT_AC2_DLY);
|
||||
tasklet_hi_schedule(&pObj->ac2_dma_done_task);
|
||||
|
@ -767,13 +739,11 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance)
|
|||
pAd->int_pending |= INT_AC2_DLY;
|
||||
}
|
||||
|
||||
if (IntSource.word & INT_AC1_DLY)
|
||||
{
|
||||
if (IntSource.word & INT_AC1_DLY) {
|
||||
|
||||
pAd->int_pending |= INT_AC1_DLY;
|
||||
|
||||
if ((pAd->int_disable_mask & INT_AC1_DLY) == 0)
|
||||
{
|
||||
if ((pAd->int_disable_mask & INT_AC1_DLY) == 0) {
|
||||
/* mask TxDataInt */
|
||||
rt2860_int_disable(pAd, INT_AC1_DLY);
|
||||
tasklet_hi_schedule(&pObj->ac1_dma_done_task);
|
||||
|
@ -781,8 +751,7 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance)
|
|||
|
||||
}
|
||||
|
||||
if (IntSource.word & INT_AC0_DLY)
|
||||
{
|
||||
if (IntSource.word & INT_AC0_DLY) {
|
||||
|
||||
/*
|
||||
if (IntSource.word & 0x2) {
|
||||
|
@ -793,8 +762,7 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance)
|
|||
*/
|
||||
pAd->int_pending |= INT_AC0_DLY;
|
||||
|
||||
if ((pAd->int_disable_mask & INT_AC0_DLY) == 0)
|
||||
{
|
||||
if ((pAd->int_disable_mask & INT_AC0_DLY) == 0) {
|
||||
/* mask TxDataInt */
|
||||
rt2860_int_disable(pAd, INT_AC0_DLY);
|
||||
tasklet_hi_schedule(&pObj->ac0_dma_done_task);
|
||||
|
@ -802,14 +770,11 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance)
|
|||
|
||||
}
|
||||
|
||||
|
||||
if (IntSource.word & PreTBTTInt)
|
||||
{
|
||||
if (IntSource.word & PreTBTTInt) {
|
||||
RTMPHandlePreTBTTInterrupt(pAd);
|
||||
}
|
||||
|
||||
if (IntSource.word & TBTTInt)
|
||||
{
|
||||
if (IntSource.word & TBTTInt) {
|
||||
RTMPHandleTBTTInterrupt(pAd);
|
||||
}
|
||||
|
||||
|
@ -818,57 +783,57 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance)
|
|||
RTMPHandleTwakeupInterrupt(pAd);
|
||||
}
|
||||
|
||||
return IRQ_HANDLED;
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
/*
|
||||
* invaild or writeback cache
|
||||
* and convert virtual address to physical address
|
||||
*/
|
||||
dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, int sd_idx, int direction)
|
||||
dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size,
|
||||
int sd_idx, int direction)
|
||||
{
|
||||
PRTMP_ADAPTER pAd;
|
||||
POS_COOKIE pObj;
|
||||
|
||||
/*
|
||||
------ Porting Information ------
|
||||
> For Tx Alloc:
|
||||
mgmt packets => sd_idx = 0
|
||||
SwIdx: pAd->MgmtRing.TxCpuIdx
|
||||
pTxD : pAd->MgmtRing.Cell[SwIdx].AllocVa;
|
||||
------ Porting Information ------
|
||||
> For Tx Alloc:
|
||||
mgmt packets => sd_idx = 0
|
||||
SwIdx: pAd->MgmtRing.TxCpuIdx
|
||||
pTxD : pAd->MgmtRing.Cell[SwIdx].AllocVa;
|
||||
|
||||
data packets => sd_idx = 1
|
||||
TxIdx : pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx
|
||||
QueIdx: pTxBlk->QueIdx
|
||||
pTxD : pAd->TxRing[pTxBlk->QueIdx].Cell[TxIdx].AllocVa;
|
||||
data packets => sd_idx = 1
|
||||
TxIdx : pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx
|
||||
QueIdx: pTxBlk->QueIdx
|
||||
pTxD : pAd->TxRing[pTxBlk->QueIdx].Cell[TxIdx].AllocVa;
|
||||
|
||||
> For Rx Alloc:
|
||||
sd_idx = -1
|
||||
*/
|
||||
> For Rx Alloc:
|
||||
sd_idx = -1
|
||||
*/
|
||||
|
||||
pAd = (PRTMP_ADAPTER)handle;
|
||||
pObj = (POS_COOKIE)pAd->OS_Cookie;
|
||||
pAd = (PRTMP_ADAPTER) handle;
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
if (sd_idx == 1)
|
||||
{
|
||||
PTX_BLK pTxBlk;
|
||||
pTxBlk = (PTX_BLK)ptr;
|
||||
return pci_map_single(pObj->pci_dev, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen, direction);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sd_idx == 1) {
|
||||
PTX_BLK pTxBlk;
|
||||
pTxBlk = (PTX_BLK) ptr;
|
||||
return pci_map_single(pObj->pci_dev, pTxBlk->pSrcBufData,
|
||||
pTxBlk->SrcBufLen, direction);
|
||||
} else {
|
||||
return pci_map_single(pObj->pci_dev, ptr, size, direction);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int direction)
|
||||
void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size,
|
||||
int direction)
|
||||
{
|
||||
PRTMP_ADAPTER pAd;
|
||||
POS_COOKIE pObj;
|
||||
|
||||
pAd=(PRTMP_ADAPTER)handle;
|
||||
pObj = (POS_COOKIE)pAd->OS_Cookie;
|
||||
pAd = (PRTMP_ADAPTER) handle;
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
pci_unmap_single(pObj->pci_dev, dma_addr, size, direction);
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
#include "rt_config.h"
|
||||
|
||||
void dump_urb(struct urb* purb)
|
||||
void dump_urb(struct urb *purb)
|
||||
{
|
||||
printk("urb :0x%08lx\n", (unsigned long)purb);
|
||||
printk("\tdev :0x%08lx\n", (unsigned long)purb->dev);
|
||||
|
@ -46,16 +46,20 @@
|
|||
printk("\tpipe :0x%08x\n", purb->pipe);
|
||||
printk("\tstatus :%d\n", purb->status);
|
||||
printk("\ttransfer_flags :0x%08x\n", purb->transfer_flags);
|
||||
printk("\ttransfer_buffer :0x%08lx\n", (unsigned long)purb->transfer_buffer);
|
||||
printk("\ttransfer_buffer :0x%08lx\n",
|
||||
(unsigned long)purb->transfer_buffer);
|
||||
printk("\ttransfer_buffer_length:%d\n", purb->transfer_buffer_length);
|
||||
printk("\tactual_length :%d\n", purb->actual_length);
|
||||
printk("\tsetup_packet :0x%08lx\n", (unsigned long)purb->setup_packet);
|
||||
printk("\tsetup_packet :0x%08lx\n",
|
||||
(unsigned long)purb->setup_packet);
|
||||
printk("\tstart_frame :%d\n", purb->start_frame);
|
||||
printk("\tnumber_of_packets :%d\n", purb->number_of_packets);
|
||||
printk("\tinterval :%d\n", purb->interval);
|
||||
printk("\terror_count :%d\n", purb->error_count);
|
||||
printk("\tcontext :0x%08lx\n", (unsigned long)purb->context);
|
||||
printk("\tcomplete :0x%08lx\n\n", (unsigned long)purb->complete);
|
||||
printk("\tcontext :0x%08lx\n",
|
||||
(unsigned long)purb->context);
|
||||
printk("\tcomplete :0x%08lx\n\n",
|
||||
(unsigned long)purb->complete);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -73,23 +77,22 @@ Return Value:
|
|||
Note:
|
||||
========================================================================
|
||||
*/
|
||||
NDIS_STATUS RtmpMgmtTaskInit(
|
||||
IN RTMP_ADAPTER *pAd)
|
||||
NDIS_STATUS RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd)
|
||||
{
|
||||
RTMP_OS_TASK *pTask;
|
||||
NDIS_STATUS status;
|
||||
|
||||
/*
|
||||
Creat TimerQ Thread, We need init timerQ related structure before create the timer thread.
|
||||
*/
|
||||
Creat TimerQ Thread, We need init timerQ related structure before create the timer thread.
|
||||
*/
|
||||
RtmpTimerQInit(pAd);
|
||||
|
||||
pTask = &pAd->timerTask;
|
||||
RtmpOSTaskInit(pTask, "RtmpTimerTask", pAd);
|
||||
status = RtmpOSTaskAttach(pTask, RtmpTimerQThread, pTask);
|
||||
if (status == NDIS_STATUS_FAILURE)
|
||||
{
|
||||
printk (KERN_WARNING "%s: unable to start RtmpTimerQThread\n", RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev));
|
||||
if (status == NDIS_STATUS_FAILURE) {
|
||||
printk(KERN_WARNING "%s: unable to start RtmpTimerQThread\n",
|
||||
RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev));
|
||||
return NDIS_STATUS_FAILURE;
|
||||
}
|
||||
|
||||
|
@ -97,9 +100,9 @@ NDIS_STATUS RtmpMgmtTaskInit(
|
|||
pTask = &pAd->mlmeTask;
|
||||
RtmpOSTaskInit(pTask, "RtmpMlmeTask", pAd);
|
||||
status = RtmpOSTaskAttach(pTask, MlmeThread, pTask);
|
||||
if (status == NDIS_STATUS_FAILURE)
|
||||
{
|
||||
printk (KERN_WARNING "%s: unable to start MlmeThread\n", RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev));
|
||||
if (status == NDIS_STATUS_FAILURE) {
|
||||
printk(KERN_WARNING "%s: unable to start MlmeThread\n",
|
||||
RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev));
|
||||
return NDIS_STATUS_FAILURE;
|
||||
}
|
||||
|
||||
|
@ -107,18 +110,15 @@ NDIS_STATUS RtmpMgmtTaskInit(
|
|||
pTask = &pAd->cmdQTask;
|
||||
RtmpOSTaskInit(pTask, "RtmpCmdQTask", pAd);
|
||||
status = RtmpOSTaskAttach(pTask, RTUSBCmdThread, pTask);
|
||||
if (status == NDIS_STATUS_FAILURE)
|
||||
{
|
||||
printk (KERN_WARNING "%s: unable to start RTUSBCmdThread\n", RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev));
|
||||
if (status == NDIS_STATUS_FAILURE) {
|
||||
printk(KERN_WARNING "%s: unable to start RTUSBCmdThread\n",
|
||||
RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev));
|
||||
return NDIS_STATUS_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
return NDIS_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
Routine Description:
|
||||
|
@ -133,11 +133,10 @@ Return Value:
|
|||
Note:
|
||||
========================================================================
|
||||
*/
|
||||
VOID RtmpMgmtTaskExit(
|
||||
IN RTMP_ADAPTER *pAd)
|
||||
VOID RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd)
|
||||
{
|
||||
INT ret;
|
||||
RTMP_OS_TASK *pTask;
|
||||
INT ret;
|
||||
RTMP_OS_TASK *pTask;
|
||||
|
||||
// Sleep 50 milliseconds so pending io might finish normally
|
||||
RTMPusecDelay(50000);
|
||||
|
@ -153,10 +152,11 @@ VOID RtmpMgmtTaskExit(
|
|||
/* Terminate Mlme Thread */
|
||||
pTask = &pAd->mlmeTask;
|
||||
ret = RtmpOSTaskKill(pTask);
|
||||
if (ret == NDIS_STATUS_FAILURE)
|
||||
{
|
||||
if (ret == NDIS_STATUS_FAILURE) {
|
||||
DBGPRINT(RT_DEBUG_ERROR, ("%s: kill task(%s) failed!\n",
|
||||
RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev), pTask->taskName));
|
||||
RTMP_OS_NETDEV_GET_DEVNAME(pAd->
|
||||
net_dev),
|
||||
pTask->taskName));
|
||||
}
|
||||
|
||||
/* Terminate cmdQ thread */
|
||||
|
@ -174,10 +174,11 @@ VOID RtmpMgmtTaskExit(
|
|||
mb();
|
||||
//RTUSBCMDUp(pAd);
|
||||
ret = RtmpOSTaskKill(pTask);
|
||||
if (ret == NDIS_STATUS_FAILURE)
|
||||
{
|
||||
if (ret == NDIS_STATUS_FAILURE) {
|
||||
DBGPRINT(RT_DEBUG_ERROR, ("%s: kill task(%s) failed!\n",
|
||||
RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev), pTask->taskName));
|
||||
RTMP_OS_NETDEV_GET_DEVNAME
|
||||
(pAd->net_dev),
|
||||
pTask->taskName));
|
||||
}
|
||||
pAd->CmdQ.CmdQState = RTMP_TASK_STAT_UNKNOWN;
|
||||
}
|
||||
|
@ -185,47 +186,44 @@ VOID RtmpMgmtTaskExit(
|
|||
/* Terminate timer thread */
|
||||
pTask = &pAd->timerTask;
|
||||
ret = RtmpOSTaskKill(pTask);
|
||||
if (ret == NDIS_STATUS_FAILURE)
|
||||
{
|
||||
if (ret == NDIS_STATUS_FAILURE) {
|
||||
DBGPRINT(RT_DEBUG_ERROR, ("%s: kill task(%s) failed!\n",
|
||||
RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev), pTask->taskName));
|
||||
RTMP_OS_NETDEV_GET_DEVNAME(pAd->
|
||||
net_dev),
|
||||
pTask->taskName));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void rtusb_dataout_complete(unsigned long data)
|
||||
{
|
||||
PRTMP_ADAPTER pAd;
|
||||
purbb_t pUrb;
|
||||
POS_COOKIE pObj;
|
||||
PHT_TX_CONTEXT pHTTXContext;
|
||||
UCHAR BulkOutPipeId;
|
||||
NTSTATUS Status;
|
||||
unsigned long IrqFlags;
|
||||
PRTMP_ADAPTER pAd;
|
||||
purbb_t pUrb;
|
||||
POS_COOKIE pObj;
|
||||
PHT_TX_CONTEXT pHTTXContext;
|
||||
UCHAR BulkOutPipeId;
|
||||
NTSTATUS Status;
|
||||
unsigned long IrqFlags;
|
||||
|
||||
|
||||
pUrb = (purbb_t)data;
|
||||
pHTTXContext = (PHT_TX_CONTEXT)pUrb->context;
|
||||
pAd = pHTTXContext->pAd;
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
Status = pUrb->status;
|
||||
pUrb = (purbb_t) data;
|
||||
pHTTXContext = (PHT_TX_CONTEXT) pUrb->context;
|
||||
pAd = pHTTXContext->pAd;
|
||||
pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
Status = pUrb->status;
|
||||
|
||||
// Store BulkOut PipeId
|
||||
BulkOutPipeId = pHTTXContext->BulkOutPipeId;
|
||||
pAd->BulkOutDataOneSecCount++;
|
||||
|
||||
//DBGPRINT(RT_DEBUG_LOUD, ("Done-B(%d):I=0x%lx, CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", BulkOutPipeId, in_interrupt(), pHTTXContext->CurWritePosition,
|
||||
// pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad));
|
||||
// pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad));
|
||||
|
||||
RTMP_IRQ_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
|
||||
pAd->BulkOutPending[BulkOutPipeId] = FALSE;
|
||||
pHTTXContext->IRPPending = FALSE;
|
||||
pAd->watchDogTxPendingCnt[BulkOutPipeId] = 0;
|
||||
|
||||
if (Status == USB_ST_NOERROR)
|
||||
{
|
||||
if (Status == USB_ST_NOERROR) {
|
||||
pAd->BulkOutComplete++;
|
||||
|
||||
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
|
||||
|
@ -235,30 +233,37 @@ static void rtusb_dataout_complete(unsigned long data)
|
|||
FREE_HTTX_RING(pAd, BulkOutPipeId, pHTTXContext);
|
||||
//RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
|
||||
|
||||
|
||||
}
|
||||
else // STATUS_OTHER
|
||||
} else // STATUS_OTHER
|
||||
{
|
||||
PUCHAR pBuf;
|
||||
PUCHAR pBuf;
|
||||
|
||||
pAd->BulkOutCompleteOther++;
|
||||
|
||||
pBuf = &pHTTXContext->TransferBuffer->field.WirelessPacket[pHTTXContext->NextBulkOutPosition];
|
||||
pBuf =
|
||||
&pHTTXContext->TransferBuffer->field.
|
||||
WirelessPacket[pHTTXContext->NextBulkOutPosition];
|
||||
|
||||
if (!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST |
|
||||
fRTMP_ADAPTER_BULKOUT_RESET)))
|
||||
{
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST |
|
||||
fRTMP_ADAPTER_BULKOUT_RESET))) {
|
||||
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
|
||||
pAd->bulkResetPipeid = BulkOutPipeId;
|
||||
pAd->bulkResetReq[BulkOutPipeId] = pAd->BulkOutReq;
|
||||
}
|
||||
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
|
||||
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR, ("BulkOutDataPacket failed: ReasonCode=%d!\n", Status));
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR, ("\t>>BulkOut Req=0x%lx, Complete=0x%lx, Other=0x%lx\n", pAd->BulkOutReq, pAd->BulkOutComplete, pAd->BulkOutCompleteOther));
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR, ("\t>>BulkOut Header:%x %x %x %x %x %x %x %x\n", pBuf[0], pBuf[1], pBuf[2], pBuf[3], pBuf[4], pBuf[5], pBuf[6], pBuf[7]));
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR,
|
||||
("BulkOutDataPacket failed: ReasonCode=%d!\n",
|
||||
Status));
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR,
|
||||
("\t>>BulkOut Req=0x%lx, Complete=0x%lx, Other=0x%lx\n",
|
||||
pAd->BulkOutReq, pAd->BulkOutComplete,
|
||||
pAd->BulkOutCompleteOther));
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR,
|
||||
("\t>>BulkOut Header:%x %x %x %x %x %x %x %x\n",
|
||||
pBuf[0], pBuf[1], pBuf[2], pBuf[3], pBuf[4],
|
||||
pBuf[5], pBuf[6], pBuf[7]));
|
||||
//DBGPRINT_RAW(RT_DEBUG_ERROR, (">>BulkOutCompleteCancel=0x%x, BulkOutCompleteOther=0x%x\n", pAd->BulkOutCompleteCancel, pAd->BulkOutCompleteOther));
|
||||
|
||||
}
|
||||
|
@ -268,12 +273,17 @@ static void rtusb_dataout_complete(unsigned long data)
|
|||
// bWaitingBulkOut = TRUE, means the TX data are waiting for bulk out.
|
||||
//
|
||||
//RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
|
||||
if ((pHTTXContext->ENextBulkOutPosition != pHTTXContext->CurWritePosition) &&
|
||||
(pHTTXContext->ENextBulkOutPosition != (pHTTXContext->CurWritePosition+8)) &&
|
||||
!RTUSB_TEST_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_FRAG << BulkOutPipeId)))
|
||||
{
|
||||
if ((pHTTXContext->ENextBulkOutPosition !=
|
||||
pHTTXContext->CurWritePosition)
|
||||
&& (pHTTXContext->ENextBulkOutPosition !=
|
||||
(pHTTXContext->CurWritePosition + 8))
|
||||
&& !RTUSB_TEST_BULK_FLAG(pAd,
|
||||
(fRTUSB_BULK_OUT_DATA_FRAG <<
|
||||
BulkOutPipeId))) {
|
||||
// Indicate There is data avaliable
|
||||
RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
|
||||
RTUSB_SET_BULK_FLAG(pAd,
|
||||
(fRTUSB_BULK_OUT_DATA_NORMAL <<
|
||||
BulkOutPipeId));
|
||||
}
|
||||
//RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
|
||||
|
||||
|
@ -282,49 +292,46 @@ static void rtusb_dataout_complete(unsigned long data)
|
|||
RTUSBKickBulkOut(pAd);
|
||||
}
|
||||
|
||||
|
||||
static void rtusb_null_frame_done_tasklet(unsigned long data)
|
||||
{
|
||||
PRTMP_ADAPTER pAd;
|
||||
PTX_CONTEXT pNullContext;
|
||||
purbb_t pUrb;
|
||||
NTSTATUS Status;
|
||||
unsigned long irqFlag;
|
||||
PRTMP_ADAPTER pAd;
|
||||
PTX_CONTEXT pNullContext;
|
||||
purbb_t pUrb;
|
||||
NTSTATUS Status;
|
||||
unsigned long irqFlag;
|
||||
|
||||
|
||||
pUrb = (purbb_t)data;
|
||||
pNullContext = (PTX_CONTEXT)pUrb->context;
|
||||
pAd = pNullContext->pAd;
|
||||
Status = pUrb->status;
|
||||
pUrb = (purbb_t) data;
|
||||
pNullContext = (PTX_CONTEXT) pUrb->context;
|
||||
pAd = pNullContext->pAd;
|
||||
Status = pUrb->status;
|
||||
|
||||
// Reset Null frame context flags
|
||||
RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], irqFlag);
|
||||
pNullContext->IRPPending = FALSE;
|
||||
pNullContext->InUse = FALSE;
|
||||
pNullContext->IRPPending = FALSE;
|
||||
pNullContext->InUse = FALSE;
|
||||
pAd->BulkOutPending[0] = FALSE;
|
||||
pAd->watchDogTxPendingCnt[0] = 0;
|
||||
|
||||
if (Status == USB_ST_NOERROR)
|
||||
{
|
||||
if (Status == USB_ST_NOERROR) {
|
||||
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
|
||||
|
||||
RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS);
|
||||
}
|
||||
else // STATUS_OTHER
|
||||
} else // STATUS_OTHER
|
||||
{
|
||||
if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)))
|
||||
{
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out Null Frame Failed, ReasonCode=%d!\n", Status));
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) {
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR,
|
||||
("Bulk Out Null Frame Failed, ReasonCode=%d!\n",
|
||||
Status));
|
||||
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
|
||||
pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
|
||||
pAd->bulkResetPipeid =
|
||||
(MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
|
||||
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT,
|
||||
NULL, 0);
|
||||
} else {
|
||||
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
|
||||
}
|
||||
}
|
||||
|
@ -334,46 +341,42 @@ static void rtusb_null_frame_done_tasklet(unsigned long data)
|
|||
RTUSBKickBulkOut(pAd);
|
||||
}
|
||||
|
||||
|
||||
static void rtusb_rts_frame_done_tasklet(unsigned long data)
|
||||
{
|
||||
PRTMP_ADAPTER pAd;
|
||||
PTX_CONTEXT pRTSContext;
|
||||
purbb_t pUrb;
|
||||
NTSTATUS Status;
|
||||
unsigned long irqFlag;
|
||||
PRTMP_ADAPTER pAd;
|
||||
PTX_CONTEXT pRTSContext;
|
||||
purbb_t pUrb;
|
||||
NTSTATUS Status;
|
||||
unsigned long irqFlag;
|
||||
|
||||
|
||||
pUrb = (purbb_t)data;
|
||||
pRTSContext = (PTX_CONTEXT)pUrb->context;
|
||||
pAd = pRTSContext->pAd;
|
||||
Status = pUrb->status;
|
||||
pUrb = (purbb_t) data;
|
||||
pRTSContext = (PTX_CONTEXT) pUrb->context;
|
||||
pAd = pRTSContext->pAd;
|
||||
Status = pUrb->status;
|
||||
|
||||
// Reset RTS frame context flags
|
||||
RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], irqFlag);
|
||||
pRTSContext->IRPPending = FALSE;
|
||||
pRTSContext->InUse = FALSE;
|
||||
pRTSContext->InUse = FALSE;
|
||||
|
||||
if (Status == USB_ST_NOERROR)
|
||||
{
|
||||
if (Status == USB_ST_NOERROR) {
|
||||
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
|
||||
RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS);
|
||||
}
|
||||
else // STATUS_OTHER
|
||||
} else // STATUS_OTHER
|
||||
{
|
||||
if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)))
|
||||
{
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out RTS Frame Failed\n"));
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) {
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR,
|
||||
("Bulk Out RTS Frame Failed\n"));
|
||||
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
|
||||
pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
|
||||
pAd->bulkResetPipeid =
|
||||
(MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
|
||||
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT,
|
||||
NULL, 0);
|
||||
} else {
|
||||
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
|
||||
}
|
||||
}
|
||||
|
@ -386,44 +389,40 @@ static void rtusb_rts_frame_done_tasklet(unsigned long data)
|
|||
// The protectioon of rest bulk should be in BulkOut routine
|
||||
RTUSBKickBulkOut(pAd);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void rtusb_pspoll_frame_done_tasklet(unsigned long data)
|
||||
{
|
||||
PRTMP_ADAPTER pAd;
|
||||
PTX_CONTEXT pPsPollContext;
|
||||
purbb_t pUrb;
|
||||
NTSTATUS Status;
|
||||
PRTMP_ADAPTER pAd;
|
||||
PTX_CONTEXT pPsPollContext;
|
||||
purbb_t pUrb;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
||||
|
||||
pUrb = (purbb_t)data;
|
||||
pPsPollContext = (PTX_CONTEXT)pUrb->context;
|
||||
pAd = pPsPollContext->pAd;
|
||||
Status = pUrb->status;
|
||||
pUrb = (purbb_t) data;
|
||||
pPsPollContext = (PTX_CONTEXT) pUrb->context;
|
||||
pAd = pPsPollContext->pAd;
|
||||
Status = pUrb->status;
|
||||
|
||||
// Reset PsPoll context flags
|
||||
pPsPollContext->IRPPending = FALSE;
|
||||
pPsPollContext->InUse = FALSE;
|
||||
pPsPollContext->IRPPending = FALSE;
|
||||
pPsPollContext->InUse = FALSE;
|
||||
pAd->watchDogTxPendingCnt[0] = 0;
|
||||
|
||||
if (Status == USB_ST_NOERROR)
|
||||
{
|
||||
if (Status == USB_ST_NOERROR) {
|
||||
RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS);
|
||||
}
|
||||
else // STATUS_OTHER
|
||||
} else // STATUS_OTHER
|
||||
{
|
||||
if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)))
|
||||
{
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out PSPoll Failed\n"));
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) {
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR,
|
||||
("Bulk Out PSPoll Failed\n"));
|
||||
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
|
||||
pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
|
||||
pAd->bulkResetPipeid =
|
||||
(MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT,
|
||||
NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -437,7 +436,6 @@ static void rtusb_pspoll_frame_done_tasklet(unsigned long data)
|
|||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
Routine Description:
|
||||
|
@ -454,18 +452,17 @@ Note:
|
|||
*/
|
||||
static void rx_done_tasklet(unsigned long data)
|
||||
{
|
||||
purbb_t pUrb;
|
||||
PRX_CONTEXT pRxContext;
|
||||
PRTMP_ADAPTER pAd;
|
||||
NTSTATUS Status;
|
||||
unsigned int IrqFlags;
|
||||
purbb_t pUrb;
|
||||
PRX_CONTEXT pRxContext;
|
||||
PRTMP_ADAPTER pAd;
|
||||
NTSTATUS Status;
|
||||
unsigned int IrqFlags;
|
||||
|
||||
pUrb = (purbb_t)data;
|
||||
pRxContext = (PRX_CONTEXT)pUrb->context;
|
||||
pAd = pRxContext->pAd;
|
||||
pUrb = (purbb_t) data;
|
||||
pRxContext = (PRX_CONTEXT) pUrb->context;
|
||||
pAd = pRxContext->pAd;
|
||||
Status = pUrb->status;
|
||||
|
||||
|
||||
RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags);
|
||||
pRxContext->InUse = FALSE;
|
||||
pRxContext->IRPPending = FALSE;
|
||||
|
@ -473,8 +470,7 @@ static void rx_done_tasklet(unsigned long data)
|
|||
//NdisInterlockedDecrement(&pAd->PendingRx);
|
||||
pAd->PendingRx--;
|
||||
|
||||
if (Status == USB_ST_NOERROR)
|
||||
{
|
||||
if (Status == USB_ST_NOERROR) {
|
||||
pAd->BulkInComplete++;
|
||||
pAd->NextRxBulkInPosition = 0;
|
||||
if (pRxContext->BulkInOffset) // As jan's comment, it may bulk-in success but size is zero.
|
||||
|
@ -483,8 +479,7 @@ static void rx_done_tasklet(unsigned long data)
|
|||
INC_RING_INDEX(pAd->NextRxBulkInIndex, RX_RING_SIZE);
|
||||
}
|
||||
RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
|
||||
}
|
||||
else // STATUS_OTHER
|
||||
} else // STATUS_OTHER
|
||||
{
|
||||
pAd->BulkInCompleteFail++;
|
||||
// Still read this packet although it may comtain wrong bytes.
|
||||
|
@ -493,16 +488,19 @@ static void rx_done_tasklet(unsigned long data)
|
|||
|
||||
// Parsing all packets. because after reset, the index will reset to all zero.
|
||||
if ((!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_BULKIN_RESET |
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST))))
|
||||
{
|
||||
fRTMP_ADAPTER_BULKIN_RESET |
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST)))) {
|
||||
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk In Failed. Status=%d, BIIdx=0x%x, BIRIdx=0x%x, actual_length= 0x%x\n",
|
||||
Status, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex, pRxContext->pUrb->actual_length));
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR,
|
||||
("Bulk In Failed. Status=%d, BIIdx=0x%x, BIRIdx=0x%x, actual_length= 0x%x\n",
|
||||
Status, pAd->NextRxBulkInIndex,
|
||||
pAd->NextRxBulkInReadIndex,
|
||||
pRxContext->pUrb->actual_length));
|
||||
|
||||
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKIN_RESET);
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_IN, NULL, 0);
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_IN,
|
||||
NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -510,46 +508,43 @@ static void rx_done_tasklet(unsigned long data)
|
|||
|
||||
RTUSBBulkReceive(pAd);
|
||||
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void rtusb_mgmt_dma_done_tasklet(unsigned long data)
|
||||
{
|
||||
PRTMP_ADAPTER pAd;
|
||||
PTX_CONTEXT pMLMEContext;
|
||||
int index;
|
||||
PNDIS_PACKET pPacket;
|
||||
purbb_t pUrb;
|
||||
NTSTATUS Status;
|
||||
unsigned long IrqFlags;
|
||||
PRTMP_ADAPTER pAd;
|
||||
PTX_CONTEXT pMLMEContext;
|
||||
int index;
|
||||
PNDIS_PACKET pPacket;
|
||||
purbb_t pUrb;
|
||||
NTSTATUS Status;
|
||||
unsigned long IrqFlags;
|
||||
|
||||
|
||||
pUrb = (purbb_t)data;
|
||||
pMLMEContext = (PTX_CONTEXT)pUrb->context;
|
||||
pAd = pMLMEContext->pAd;
|
||||
Status = pUrb->status;
|
||||
index = pMLMEContext->SelfIdx;
|
||||
pUrb = (purbb_t) data;
|
||||
pMLMEContext = (PTX_CONTEXT) pUrb->context;
|
||||
pAd = pMLMEContext->pAd;
|
||||
Status = pUrb->status;
|
||||
index = pMLMEContext->SelfIdx;
|
||||
|
||||
ASSERT((pAd->MgmtRing.TxDmaIdx == index));
|
||||
|
||||
RTMP_IRQ_LOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags);
|
||||
|
||||
|
||||
if (Status != USB_ST_NOERROR)
|
||||
{
|
||||
if (Status != USB_ST_NOERROR) {
|
||||
//Bulk-Out fail status handle
|
||||
if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)))
|
||||
{
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out MLME Failed, Status=%d!\n", Status));
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
|
||||
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) {
|
||||
DBGPRINT_RAW(RT_DEBUG_ERROR,
|
||||
("Bulk Out MLME Failed, Status=%d!\n",
|
||||
Status));
|
||||
// TODO: How to handle about the MLMEBulkOut failed issue. Need to resend the mgmt pkt?
|
||||
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
|
||||
pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
|
||||
pAd->bulkResetPipeid =
|
||||
(MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -576,163 +571,141 @@ static void rtusb_mgmt_dma_done_tasklet(unsigned long data)
|
|||
RTMPFreeNdisPacket(pAd, pPacket);
|
||||
|
||||
if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST))))
|
||||
{
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST)))) {
|
||||
// do nothing and return directly.
|
||||
}
|
||||
else
|
||||
{
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET) &&
|
||||
((pAd->bulkResetPipeid & BULKOUT_MGMT_RESET_FLAG) == BULKOUT_MGMT_RESET_FLAG))
|
||||
{ // For Mgmt Bulk-Out failed, ignore it now.
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET) && ((pAd->bulkResetPipeid & BULKOUT_MGMT_RESET_FLAG) == BULKOUT_MGMT_RESET_FLAG)) { // For Mgmt Bulk-Out failed, ignore it now.
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT,
|
||||
NULL, 0);
|
||||
} else {
|
||||
|
||||
// Always call Bulk routine, even reset bulk.
|
||||
// The protectioon of rest bulk should be in BulkOut routine
|
||||
if (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE /* pMLMEContext->bWaitingBulkOut == TRUE */)
|
||||
{
|
||||
if (pAd->MgmtRing.TxSwFreeIdx <
|
||||
MGMT_RING_SIZE
|
||||
/* pMLMEContext->bWaitingBulkOut == TRUE */ ) {
|
||||
RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME);
|
||||
}
|
||||
RTUSBKickBulkOut(pAd);
|
||||
}
|
||||
RTUSBKickBulkOut(pAd);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void rtusb_ac3_dma_done_tasklet(unsigned long data)
|
||||
{
|
||||
PRTMP_ADAPTER pAd;
|
||||
PHT_TX_CONTEXT pHTTXContext;
|
||||
UCHAR BulkOutPipeId = 3;
|
||||
purbb_t pUrb;
|
||||
PRTMP_ADAPTER pAd;
|
||||
PHT_TX_CONTEXT pHTTXContext;
|
||||
UCHAR BulkOutPipeId = 3;
|
||||
purbb_t pUrb;
|
||||
|
||||
|
||||
pUrb = (purbb_t)data;
|
||||
pHTTXContext = (PHT_TX_CONTEXT)pUrb->context;
|
||||
pAd = pHTTXContext->pAd;
|
||||
pUrb = (purbb_t) data;
|
||||
pHTTXContext = (PHT_TX_CONTEXT) pUrb->context;
|
||||
pAd = pHTTXContext->pAd;
|
||||
|
||||
rtusb_dataout_complete((unsigned long)pUrb);
|
||||
|
||||
if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST))))
|
||||
{
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST)))) {
|
||||
// do nothing and return directly.
|
||||
}
|
||||
else
|
||||
{
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))
|
||||
{
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
|
||||
}
|
||||
else
|
||||
{ pHTTXContext = &pAd->TxContext[BulkOutPipeId];
|
||||
} else {
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) {
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT,
|
||||
NULL, 0);
|
||||
} else {
|
||||
pHTTXContext = &pAd->TxContext[BulkOutPipeId];
|
||||
if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) &&
|
||||
/*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */
|
||||
(pAd->DeQueueRunning[BulkOutPipeId] == FALSE) &&
|
||||
(pHTTXContext->bCurWriting == FALSE))
|
||||
{
|
||||
RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS);
|
||||
/*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */
|
||||
(pAd->DeQueueRunning[BulkOutPipeId] == FALSE) &&
|
||||
(pHTTXContext->bCurWriting == FALSE)) {
|
||||
RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId,
|
||||
MAX_TX_PROCESS);
|
||||
}
|
||||
|
||||
RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<3);
|
||||
RTUSB_SET_BULK_FLAG(pAd,
|
||||
fRTUSB_BULK_OUT_DATA_NORMAL << 3);
|
||||
RTUSBKickBulkOut(pAd);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
static void rtusb_ac2_dma_done_tasklet(unsigned long data)
|
||||
{
|
||||
PRTMP_ADAPTER pAd;
|
||||
PHT_TX_CONTEXT pHTTXContext;
|
||||
UCHAR BulkOutPipeId = 2;
|
||||
purbb_t pUrb;
|
||||
PRTMP_ADAPTER pAd;
|
||||
PHT_TX_CONTEXT pHTTXContext;
|
||||
UCHAR BulkOutPipeId = 2;
|
||||
purbb_t pUrb;
|
||||
|
||||
|
||||
pUrb = (purbb_t)data;
|
||||
pHTTXContext = (PHT_TX_CONTEXT)pUrb->context;
|
||||
pAd = pHTTXContext->pAd;
|
||||
pUrb = (purbb_t) data;
|
||||
pHTTXContext = (PHT_TX_CONTEXT) pUrb->context;
|
||||
pAd = pHTTXContext->pAd;
|
||||
|
||||
rtusb_dataout_complete((unsigned long)pUrb);
|
||||
|
||||
if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST))))
|
||||
{
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST)))) {
|
||||
// do nothing and return directly.
|
||||
}
|
||||
else
|
||||
{
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))
|
||||
{
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
|
||||
}
|
||||
else
|
||||
{ pHTTXContext = &pAd->TxContext[BulkOutPipeId];
|
||||
} else {
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) {
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT,
|
||||
NULL, 0);
|
||||
} else {
|
||||
pHTTXContext = &pAd->TxContext[BulkOutPipeId];
|
||||
if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) &&
|
||||
/*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */
|
||||
(pAd->DeQueueRunning[BulkOutPipeId] == FALSE) &&
|
||||
(pHTTXContext->bCurWriting == FALSE))
|
||||
{
|
||||
RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS);
|
||||
/*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */
|
||||
(pAd->DeQueueRunning[BulkOutPipeId] == FALSE) &&
|
||||
(pHTTXContext->bCurWriting == FALSE)) {
|
||||
RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId,
|
||||
MAX_TX_PROCESS);
|
||||
}
|
||||
|
||||
RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<2);
|
||||
RTUSB_SET_BULK_FLAG(pAd,
|
||||
fRTUSB_BULK_OUT_DATA_NORMAL << 2);
|
||||
RTUSBKickBulkOut(pAd);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
static void rtusb_ac1_dma_done_tasklet(unsigned long data)
|
||||
{
|
||||
PRTMP_ADAPTER pAd;
|
||||
PHT_TX_CONTEXT pHTTXContext;
|
||||
UCHAR BulkOutPipeId = 1;
|
||||
purbb_t pUrb;
|
||||
PRTMP_ADAPTER pAd;
|
||||
PHT_TX_CONTEXT pHTTXContext;
|
||||
UCHAR BulkOutPipeId = 1;
|
||||
purbb_t pUrb;
|
||||
|
||||
|
||||
pUrb = (purbb_t)data;
|
||||
pHTTXContext = (PHT_TX_CONTEXT)pUrb->context;
|
||||
pAd = pHTTXContext->pAd;
|
||||
pUrb = (purbb_t) data;
|
||||
pHTTXContext = (PHT_TX_CONTEXT) pUrb->context;
|
||||
pAd = pHTTXContext->pAd;
|
||||
|
||||
rtusb_dataout_complete((unsigned long)pUrb);
|
||||
|
||||
if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST))))
|
||||
{
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST)))) {
|
||||
// do nothing and return directly.
|
||||
}
|
||||
else
|
||||
{
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))
|
||||
{
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
|
||||
}
|
||||
else
|
||||
{ pHTTXContext = &pAd->TxContext[BulkOutPipeId];
|
||||
} else {
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) {
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT,
|
||||
NULL, 0);
|
||||
} else {
|
||||
pHTTXContext = &pAd->TxContext[BulkOutPipeId];
|
||||
if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) &&
|
||||
/*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */
|
||||
(pAd->DeQueueRunning[BulkOutPipeId] == FALSE) &&
|
||||
(pHTTXContext->bCurWriting == FALSE))
|
||||
{
|
||||
RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS);
|
||||
/*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */
|
||||
(pAd->DeQueueRunning[BulkOutPipeId] == FALSE) &&
|
||||
(pHTTXContext->bCurWriting == FALSE)) {
|
||||
RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId,
|
||||
MAX_TX_PROCESS);
|
||||
}
|
||||
|
||||
RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<1);
|
||||
RTUSB_SET_BULK_FLAG(pAd,
|
||||
fRTUSB_BULK_OUT_DATA_NORMAL << 1);
|
||||
RTUSBKickBulkOut(pAd);
|
||||
}
|
||||
}
|
||||
|
@ -740,41 +713,35 @@ static void rtusb_ac1_dma_done_tasklet(unsigned long data)
|
|||
|
||||
}
|
||||
|
||||
|
||||
static void rtusb_ac0_dma_done_tasklet(unsigned long data)
|
||||
{
|
||||
PRTMP_ADAPTER pAd;
|
||||
PHT_TX_CONTEXT pHTTXContext;
|
||||
UCHAR BulkOutPipeId = 0;
|
||||
purbb_t pUrb;
|
||||
PRTMP_ADAPTER pAd;
|
||||
PHT_TX_CONTEXT pHTTXContext;
|
||||
UCHAR BulkOutPipeId = 0;
|
||||
purbb_t pUrb;
|
||||
|
||||
|
||||
pUrb = (purbb_t)data;
|
||||
pHTTXContext = (PHT_TX_CONTEXT)pUrb->context;
|
||||
pAd = pHTTXContext->pAd;
|
||||
pUrb = (purbb_t) data;
|
||||
pHTTXContext = (PHT_TX_CONTEXT) pUrb->context;
|
||||
pAd = pHTTXContext->pAd;
|
||||
|
||||
rtusb_dataout_complete((unsigned long)pUrb);
|
||||
|
||||
if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST))))
|
||||
{
|
||||
fRTMP_ADAPTER_HALT_IN_PROGRESS |
|
||||
fRTMP_ADAPTER_NIC_NOT_EXIST)))) {
|
||||
// do nothing and return directly.
|
||||
}
|
||||
else
|
||||
{
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))
|
||||
{
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
|
||||
}
|
||||
else
|
||||
{ pHTTXContext = &pAd->TxContext[BulkOutPipeId];
|
||||
} else {
|
||||
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) {
|
||||
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT,
|
||||
NULL, 0);
|
||||
} else {
|
||||
pHTTXContext = &pAd->TxContext[BulkOutPipeId];
|
||||
if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) &&
|
||||
/* ((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */
|
||||
(pAd->DeQueueRunning[BulkOutPipeId] == FALSE) &&
|
||||
(pHTTXContext->bCurWriting == FALSE))
|
||||
{
|
||||
RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS);
|
||||
/* ((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */
|
||||
(pAd->DeQueueRunning[BulkOutPipeId] == FALSE) &&
|
||||
(pHTTXContext->bCurWriting == FALSE)) {
|
||||
RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId,
|
||||
MAX_TX_PROCESS);
|
||||
}
|
||||
|
||||
RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL);
|
||||
|
@ -782,34 +749,38 @@ static void rtusb_ac0_dma_done_tasklet(unsigned long data)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
NDIS_STATUS RtmpNetTaskInit(
|
||||
IN RTMP_ADAPTER *pAd)
|
||||
NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER * pAd)
|
||||
{
|
||||
POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
|
||||
|
||||
// Create receive tasklet
|
||||
tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (ULONG)pAd);
|
||||
tasklet_init(&pObj->mgmt_dma_done_task, rtusb_mgmt_dma_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac0_dma_done_task, rtusb_ac0_dma_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac1_dma_done_task, rtusb_ac1_dma_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac2_dma_done_task, rtusb_ac2_dma_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac3_dma_done_task, rtusb_ac3_dma_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (ULONG) pAd);
|
||||
tasklet_init(&pObj->mgmt_dma_done_task, rtusb_mgmt_dma_done_tasklet,
|
||||
(unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac0_dma_done_task, rtusb_ac0_dma_done_tasklet,
|
||||
(unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac1_dma_done_task, rtusb_ac1_dma_done_tasklet,
|
||||
(unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac2_dma_done_task, rtusb_ac2_dma_done_tasklet,
|
||||
(unsigned long)pAd);
|
||||
tasklet_init(&pObj->ac3_dma_done_task, rtusb_ac3_dma_done_tasklet,
|
||||
(unsigned long)pAd);
|
||||
tasklet_init(&pObj->tbtt_task, tbtt_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->null_frame_complete_task, rtusb_null_frame_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->rts_frame_complete_task, rtusb_rts_frame_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->pspoll_frame_complete_task, rtusb_pspoll_frame_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->null_frame_complete_task,
|
||||
rtusb_null_frame_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->rts_frame_complete_task,
|
||||
rtusb_rts_frame_done_tasklet, (unsigned long)pAd);
|
||||
tasklet_init(&pObj->pspoll_frame_complete_task,
|
||||
rtusb_pspoll_frame_done_tasklet, (unsigned long)pAd);
|
||||
|
||||
return NDIS_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
void RtmpNetTaskExit(IN RTMP_ADAPTER *pAd)
|
||||
void RtmpNetTaskExit(IN RTMP_ADAPTER * pAd)
|
||||
{
|
||||
POS_COOKIE pObj;
|
||||
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -39,40 +39,33 @@
|
|||
|
||||
#ifdef RTMP_MAC_USB
|
||||
|
||||
|
||||
#include "../rt_config.h"
|
||||
|
||||
extern UCHAR Phy11BGNextRateUpward[]; // defined in mlme.c
|
||||
extern UCHAR EpToQueue[];
|
||||
extern UCHAR Phy11BGNextRateUpward[]; // defined in mlme.c
|
||||
extern UCHAR EpToQueue[];
|
||||
|
||||
VOID REPORT_AMSDU_FRAMES_TO_LLC(
|
||||
IN PRTMP_ADAPTER pAd,
|
||||
IN PUCHAR pData,
|
||||
IN ULONG DataSize)
|
||||
VOID REPORT_AMSDU_FRAMES_TO_LLC(IN PRTMP_ADAPTER pAd,
|
||||
IN PUCHAR pData, IN ULONG DataSize)
|
||||
{
|
||||
PNDIS_PACKET pPacket;
|
||||
UINT nMSDU;
|
||||
struct sk_buff *pSkb;
|
||||
PNDIS_PACKET pPacket;
|
||||
UINT nMSDU;
|
||||
struct sk_buff *pSkb;
|
||||
|
||||
nMSDU = 0;
|
||||
/* allocate a rx packet */
|
||||
pSkb = dev_alloc_skb(RX_BUFFER_AGGRESIZE);
|
||||
pPacket = (PNDIS_PACKET)OSPKT_TO_RTPKT(pSkb);
|
||||
if (pSkb)
|
||||
{
|
||||
pPacket = (PNDIS_PACKET) OSPKT_TO_RTPKT(pSkb);
|
||||
if (pSkb) {
|
||||
|
||||
/* convert 802.11 to 802.3 packet */
|
||||
pSkb->dev = get_netdev_from_bssid(pAd, BSS0);
|
||||
RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS);
|
||||
deaggregate_AMSDU_announce(pAd, pPacket, pData, DataSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
DBGPRINT(RT_DEBUG_ERROR,("Can't allocate skb\n"));
|
||||
} else {
|
||||
DBGPRINT(RT_DEBUG_ERROR, ("Can't allocate skb\n"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
|
||||
|
@ -92,50 +85,53 @@ VOID REPORT_AMSDU_FRAMES_TO_LLC(
|
|||
|
||||
========================================================================
|
||||
*/
|
||||
NDIS_STATUS RTUSBFreeDescriptorRequest(
|
||||
IN PRTMP_ADAPTER pAd,
|
||||
IN UCHAR BulkOutPipeId,
|
||||
IN UINT32 NumberRequired)
|
||||
NDIS_STATUS RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd,
|
||||
IN UCHAR BulkOutPipeId,
|
||||
IN UINT32 NumberRequired)
|
||||
{
|
||||
// UCHAR FreeNumber = 0;
|
||||
// UINT Index;
|
||||
NDIS_STATUS Status = NDIS_STATUS_FAILURE;
|
||||
unsigned long IrqFlags;
|
||||
HT_TX_CONTEXT *pHTTXContext;
|
||||
|
||||
// UCHAR FreeNumber = 0;
|
||||
// UINT Index;
|
||||
NDIS_STATUS Status = NDIS_STATUS_FAILURE;
|
||||
unsigned long IrqFlags;
|
||||
HT_TX_CONTEXT *pHTTXContext;
|
||||
|
||||
pHTTXContext = &pAd->TxContext[BulkOutPipeId];
|
||||
RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
|
||||
if ((pHTTXContext->CurWritePosition < pHTTXContext->NextBulkOutPosition) && ((pHTTXContext->CurWritePosition + NumberRequired + LOCAL_TXBUF_SIZE) > pHTTXContext->NextBulkOutPosition))
|
||||
{
|
||||
if ((pHTTXContext->CurWritePosition < pHTTXContext->NextBulkOutPosition)
|
||||
&&
|
||||
((pHTTXContext->CurWritePosition + NumberRequired +
|
||||
LOCAL_TXBUF_SIZE) > pHTTXContext->NextBulkOutPosition)) {
|
||||
|
||||
RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
|
||||
}
|
||||
else if ((pHTTXContext->CurWritePosition == 8) && (pHTTXContext->NextBulkOutPosition < (NumberRequired + LOCAL_TXBUF_SIZE)))
|
||||
{
|
||||
RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
|
||||
}
|
||||
else if (pHTTXContext->bCurWriting == TRUE)
|
||||
{
|
||||
DBGPRINT(RT_DEBUG_TRACE,("RTUSBFreeD c3 --> QueIdx=%d, CWPos=%ld, NBOutPos=%ld!\n", BulkOutPipeId, pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition));
|
||||
RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
|
||||
}
|
||||
else
|
||||
{
|
||||
RTUSB_SET_BULK_FLAG(pAd,
|
||||
(fRTUSB_BULK_OUT_DATA_NORMAL <<
|
||||
BulkOutPipeId));
|
||||
} else if ((pHTTXContext->CurWritePosition == 8)
|
||||
&& (pHTTXContext->NextBulkOutPosition <
|
||||
(NumberRequired + LOCAL_TXBUF_SIZE))) {
|
||||
RTUSB_SET_BULK_FLAG(pAd,
|
||||
(fRTUSB_BULK_OUT_DATA_NORMAL <<
|
||||
BulkOutPipeId));
|
||||
} else if (pHTTXContext->bCurWriting == TRUE) {
|
||||
DBGPRINT(RT_DEBUG_TRACE,
|
||||
("RTUSBFreeD c3 --> QueIdx=%d, CWPos=%ld, NBOutPos=%ld!\n",
|
||||
BulkOutPipeId, pHTTXContext->CurWritePosition,
|
||||
pHTTXContext->NextBulkOutPosition));
|
||||
RTUSB_SET_BULK_FLAG(pAd,
|
||||
(fRTUSB_BULK_OUT_DATA_NORMAL <<
|
||||
BulkOutPipeId));
|
||||
} else {
|
||||
Status = NDIS_STATUS_SUCCESS;
|
||||
}
|
||||
RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
|
||||
|
||||
|
||||
return (Status);
|
||||
}
|
||||
|
||||
NDIS_STATUS RTUSBFreeDescriptorRelease(
|
||||
IN RTMP_ADAPTER *pAd,
|
||||
IN UCHAR BulkOutPipeId)
|
||||
NDIS_STATUS RTUSBFreeDescriptorRelease(IN RTMP_ADAPTER * pAd,
|
||||
IN UCHAR BulkOutPipeId)
|
||||
{
|
||||
unsigned long IrqFlags;
|
||||
HT_TX_CONTEXT *pHTTXContext;
|
||||
unsigned long IrqFlags;
|
||||
HT_TX_CONTEXT *pHTTXContext;
|
||||
|
||||
pHTTXContext = &pAd->TxContext[BulkOutPipeId];
|
||||
RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
|
||||
|
@ -145,28 +141,32 @@ NDIS_STATUS RTUSBFreeDescriptorRelease(
|
|||
return (NDIS_STATUS_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN RTUSBNeedQueueBackForAgg(
|
||||
IN RTMP_ADAPTER *pAd,
|
||||
IN UCHAR BulkOutPipeId)
|
||||
BOOLEAN RTUSBNeedQueueBackForAgg(IN RTMP_ADAPTER * pAd, IN UCHAR BulkOutPipeId)
|
||||
{
|
||||
unsigned long IrqFlags;
|
||||
HT_TX_CONTEXT *pHTTXContext;
|
||||
BOOLEAN needQueBack = FALSE;
|
||||
unsigned long IrqFlags;
|
||||
HT_TX_CONTEXT *pHTTXContext;
|
||||
BOOLEAN needQueBack = FALSE;
|
||||
|
||||
pHTTXContext = &pAd->TxContext[BulkOutPipeId];
|
||||
|
||||
RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
|
||||
if ((pHTTXContext->IRPPending == TRUE) /*&& (pAd->TxSwQueue[BulkOutPipeId].Number == 0) */)
|
||||
{
|
||||
if ((pHTTXContext->CurWritePosition < pHTTXContext->ENextBulkOutPosition) &&
|
||||
(((pHTTXContext->ENextBulkOutPosition+MAX_AGGREGATION_SIZE) < MAX_TXBULK_LIMIT) || (pHTTXContext->CurWritePosition > MAX_AGGREGATION_SIZE)))
|
||||
{
|
||||
if ((pHTTXContext->IRPPending ==
|
||||
TRUE) /*&& (pAd->TxSwQueue[BulkOutPipeId].Number == 0) */ ) {
|
||||
if ((pHTTXContext->CurWritePosition <
|
||||
pHTTXContext->ENextBulkOutPosition)
|
||||
&&
|
||||
(((pHTTXContext->ENextBulkOutPosition +
|
||||
MAX_AGGREGATION_SIZE) < MAX_TXBULK_LIMIT)
|
||||
|| (pHTTXContext->CurWritePosition >
|
||||
MAX_AGGREGATION_SIZE))) {
|
||||
needQueBack = TRUE;
|
||||
}
|
||||
else if ((pHTTXContext->CurWritePosition > pHTTXContext->ENextBulkOutPosition) &&
|
||||
((pHTTXContext->ENextBulkOutPosition + MAX_AGGREGATION_SIZE) < pHTTXContext->CurWritePosition))
|
||||
{
|
||||
} else
|
||||
if ((pHTTXContext->CurWritePosition >
|
||||
pHTTXContext->ENextBulkOutPosition)
|
||||
&&
|
||||
((pHTTXContext->ENextBulkOutPosition +
|
||||
MAX_AGGREGATION_SIZE) <
|
||||
pHTTXContext->CurWritePosition)) {
|
||||
needQueBack = TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -176,7 +176,6 @@ BOOLEAN RTUSBNeedQueueBackForAgg(
|
|||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
|
||||
|
@ -192,21 +191,17 @@ BOOLEAN RTUSBNeedQueueBackForAgg(
|
|||
|
||||
========================================================================
|
||||
*/
|
||||
VOID RTUSBRejectPendingPackets(
|
||||
IN PRTMP_ADAPTER pAd)
|
||||
VOID RTUSBRejectPendingPackets(IN PRTMP_ADAPTER pAd)
|
||||
{
|
||||
UCHAR Index;
|
||||
PQUEUE_ENTRY pEntry;
|
||||
PNDIS_PACKET pPacket;
|
||||
PQUEUE_HEADER pQueue;
|
||||
UCHAR Index;
|
||||
PQUEUE_ENTRY pEntry;
|
||||
PNDIS_PACKET pPacket;
|
||||
PQUEUE_HEADER pQueue;
|
||||
|
||||
|
||||
for (Index = 0; Index < 4; Index++)
|
||||
{
|
||||
for (Index = 0; Index < 4; Index++) {
|
||||
NdisAcquireSpinLock(&pAd->TxSwQueueLock[Index]);
|
||||
while (pAd->TxSwQueue[Index].Head != NULL)
|
||||
{
|
||||
pQueue = (PQUEUE_HEADER) &(pAd->TxSwQueue[Index]);
|
||||
while (pAd->TxSwQueue[Index].Head != NULL) {
|
||||
pQueue = (PQUEUE_HEADER) & (pAd->TxSwQueue[Index]);
|
||||
pEntry = RemoveHeadQueue(pQueue);
|
||||
pPacket = QUEUE_ENTRY_TO_PACKET(pEntry);
|
||||
RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE);
|
||||
|
@ -217,7 +212,6 @@ VOID RTUSBRejectPendingPackets(
|
|||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
|
||||
|
@ -246,21 +240,18 @@ VOID RTUSBRejectPendingPackets(
|
|||
========================================================================
|
||||
*/
|
||||
|
||||
|
||||
VOID RTMPWriteTxInfo(
|
||||
IN PRTMP_ADAPTER pAd,
|
||||
IN PTXINFO_STRUC pTxInfo,
|
||||
IN USHORT USBDMApktLen,
|
||||
IN BOOLEAN bWiv,
|
||||
IN UCHAR QueueSel,
|
||||
IN UCHAR NextValid,
|
||||
IN UCHAR TxBurst)
|
||||
VOID RTMPWriteTxInfo(IN PRTMP_ADAPTER pAd,
|
||||
IN PTXINFO_STRUC pTxInfo,
|
||||
IN USHORT USBDMApktLen,
|
||||
IN BOOLEAN bWiv,
|
||||
IN UCHAR QueueSel, IN UCHAR NextValid, IN UCHAR TxBurst)
|
||||
{
|
||||
pTxInfo->USBDMATxPktLen = USBDMApktLen;
|
||||
pTxInfo->QSEL = QueueSel;
|
||||
if (QueueSel != FIFO_EDCA)
|
||||
DBGPRINT(RT_DEBUG_TRACE, ("====> QueueSel != FIFO_EDCA<============\n"));
|
||||
pTxInfo->USBDMANextVLD = FALSE; //NextValid; // Need to check with Jan about this.
|
||||
DBGPRINT(RT_DEBUG_TRACE,
|
||||
("====> QueueSel != FIFO_EDCA<============\n"));
|
||||
pTxInfo->USBDMANextVLD = FALSE; //NextValid; // Need to check with Jan about this.
|
||||
pTxInfo->USBDMATxburst = TxBurst;
|
||||
pTxInfo->WIV = bWiv;
|
||||
pTxInfo->SwUseLastRound = 0;
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Загрузка…
Ссылка в новой задаче