HAL_IMEM VOID DisableRxRelatedInterrupt88XX( IN HAL_PADAPTER Adapter ) { PHAL_DATA_TYPE pHalData = _GET_HAL_DATA(Adapter); HAL_PADAPTER priv = Adapter; ULONG flags; #if 0 HAL_SAVE_INT_AND_CLI(flags); pHalData->IntMask_RxINTBackup[0] = pHalData->IntMask[0]; pHalData->IntMask_RxINTBackup[1] = pHalData->IntMask[1]; pHalData->IntMask[0] &= ~BIT_RXOK; pHalData->IntMask[1] &= ~BIT_FOVW; HAL_RESTORE_INT(flags); HAL_RTL_W32(REG_HIMR0, pHalData->IntMask[0]); HAL_RTL_W32(REG_HIMR1, pHalData->IntMask[1]); #else HAL_RTL_W32(REG_HIMR0, pHalData->IntMask[0] & ~ (BIT_RXOK | BIT_RDU)); HAL_RTL_W32(REG_HIMR1, pHalData->IntMask[1] & ~BIT_FOVW); #endif }
VOID EnableIMR88XX( IN HAL_PADAPTER Adapter ) { PHAL_DATA_TYPE pHalData = _GET_HAL_DATA(Adapter); RT_TRACE_F(COMP_INIT, DBG_LOUD, ("\n")); HAL_RTL_W32(REG_HIMR0, pHalData->IntMask[0]); HAL_RTL_W32(REG_HIMR1, pHalData->IntMask[1]); }
HAL_IMEM BOOLEAN InterruptRecognized88XX( IN HAL_PADAPTER Adapter, IN PVOID pContent, IN u4Byte ContentLen ) { PHAL_DATA_TYPE pHalData = _GET_HAL_DATA(Adapter); pHalData->IntArray[0] = HAL_RTL_R32(REG_HISR0); pHalData->IntArray[0] &= pHalData->IntMask[0]; HAL_RTL_W32(REG_HISR0, pHalData->IntArray[0]); pHalData->IntArray[1] = HAL_RTL_R32(REG_HISR1); pHalData->IntArray[1] &= pHalData->IntMask[1]; HAL_RTL_W32(REG_HISR1, pHalData->IntArray[1]); return (pHalData->IntArray[0]!=0 || pHalData->IntArray[1]!=0); }
HAL_IMEM VOID EnableRxRelatedInterrupt88XX( IN HAL_PADAPTER Adapter ) { PHAL_DATA_TYPE pHalData = _GET_HAL_DATA(Adapter); HAL_PADAPTER priv = Adapter; ULONG flags; #if 0 HAL_SAVE_INT_AND_CLI(flags); pHalData->IntMask[0] = pHalData->IntMask_RxINTBackup[0]; pHalData->IntMask[1] = pHalData->IntMask_RxINTBackup[1]; HAL_RESTORE_INT(flags); #endif HAL_RTL_W32(REG_HIMR0, pHalData->IntMask[0]); HAL_RTL_W32(REG_HIMR1, pHalData->IntMask[1]); }
RT_STATUS HAL_ReadTypeID( IN HAL_PADAPTER Adapter ) { u1Byte value8; u4Byte value32; u1Byte HCI; RT_STATUS rtResult = RT_STATUS_FAILURE; value8 = PlatformEFIORead1Byte(Adapter, REG_SYS_CFG2); HCI = PlatformEFIORead1Byte(Adapter, REG_SYS_STATUS1); RT_TRACE(COMP_INIT, DBG_LOUD, ("REG_SYS_CFG2(0xFC): 0x%x \n, REG_SYS_STATUS1(0xF4): 0x%x\n", value8, HCI)); switch(value8) { #if IS_EXIST_RTL8881AEM case HAL_HW_TYPE_ID_8881A: _GET_HAL_DATA(Adapter)->HardwareType = HARDWARE_TYPE_RTL8881AEM; rtResult = RT_STATUS_SUCCESS; break; #endif #if (IS_EXIST_RTL8192EE || IS_EXIST_RTL8192EU) case HAL_HW_TYPE_ID_8192E: // TODO: Check register difinition & replace by Marco if ( (HCI & 0x30) == 0x20 || (HCI & 0x30) == 0x30) { _GET_HAL_DATA(Adapter)->HardwareType = HARDWARE_TYPE_RTL8192EE; } else { _GET_HAL_DATA(Adapter)->HardwareType = HARDWARE_TYPE_RTL8192EU; } rtResult = RT_STATUS_SUCCESS; break; #endif default: RT_TRACE(COMP_INIT, DBG_LOUD, (" Chip TypeID Error (REG_SYS_CFG2: 0x%x) \n", value8)); break; } RT_TRACE(COMP_INIT, DBG_LOUD, (" HardwareType: %d \n", _GET_HAL_DATA(Adapter)->HardwareType)); //3 Check if it is test chip value32 = PlatformEFIORead4Byte(Adapter, REG_SYS_CFG1); if ( value32 & BIT23 ) { _GET_HAL_DATA(Adapter)->bTestChip = _TRUE; } else { _GET_HAL_DATA(Adapter)->bTestChip = _FALSE; } // recognize 92E b /c cut #if IS_EXIST_RTL8192EE if(_GET_HAL_DATA(Adapter)->bTestChip) { if( _GET_HAL_DATA(Adapter)->HardwareType == HARDWARE_TYPE_RTL8192EE) { if(((value32>>12)& 0xf) == 0x0) _GET_HAL_DATA(Adapter)->cutVersion = ODM_CUT_B; else if(((value32>>12)& 0xf) == 0x2) _GET_HAL_DATA(Adapter)->cutVersion = ODM_CUT_C; } }
// // Description: // Check the interrupt content (read from previous process) in HAL. // Arguments: // [in] pAdapter - // The adapter context pointer. // [in] intType - // The HAL interrupt type for querying. // Return: // If the corresponding interrupt content (bit) is toggled, return TRUE. // If the input interrupt type isn't recognized or this corresponding // hal interupt isn't toggled, return FALSE. // Note: // We don't perform I/O here to read interrupt such as ISR here, so the // interrupt content shall be read before this handler. // HAL_IMEM BOOLEAN GetInterrupt88XX( IN HAL_PADAPTER Adapter, IN HAL_INT_TYPE intType ) { HAL_DATA_TYPE *pHalData = _GET_HAL_DATA(Adapter); BOOLEAN bResult = FALSE; switch(intType) { default: // Unknown interrupt type, no need to alarm because this IC may not // support this interrupt. RT_TRACE_F(COMP_SYSTEM, DBG_WARNING, ("Unkown intType: %d!\n", intType)); break; case HAL_INT_TYPE_ANY: bResult = (pHalData->IntArray[0] || pHalData->IntArray[1]) ? TRUE : FALSE; break; //4 // ========== DWORD 0 ========== case HAL_INT_TYPE_BCNDERR0: bResult = (pHalData->IntArray[0] & BIT_BCNDERR0) ? TRUE : FALSE; break; case HAL_INT_TYPE_TBDOK: bResult = (pHalData->IntArray[0] & BIT_TXBCNOK) ? TRUE : FALSE; break; case HAL_INT_TYPE_TBDER: bResult = (pHalData->IntArray[0] & BIT_TXBCNERR) ? TRUE : FALSE; break; case HAL_INT_TYPE_BcnInt: bResult = (pHalData->IntArray[0] & BIT_BCNDMAINT0) ? TRUE : FALSE; break; case HAL_INT_TYPE_PSTIMEOUT: bResult = (pHalData->IntArray[0] & BIT_PSTIMEOUT) ? TRUE : FALSE; break; case HAL_INT_TYPE_PSTIMEOUT1: bResult = (pHalData->IntArray[0] & BIT_TIMEOUT1) ? TRUE : FALSE; break; case HAL_INT_TYPE_PSTIMEOUT2: bResult = (pHalData->IntArray[0] & BIT_TIMEOUT2) ? TRUE : FALSE; break; case HAL_INT_TYPE_C2HCMD: bResult = (pHalData->IntArray[0] & BIT_C2HCMD_INT) ? TRUE : FALSE; break; case HAL_INT_TYPE_VIDOK: bResult = (pHalData->IntArray[0] & BIT_VIDOK) ? TRUE : FALSE; break; case HAL_INT_TYPE_VODOK: bResult = (pHalData->IntArray[0] & BIT_VODOK) ? TRUE : FALSE; break; case HAL_INT_TYPE_BEDOK: bResult = (pHalData->IntArray[0] & BIT_BEDOK) ? TRUE : FALSE; break; case HAL_INT_TYPE_BKDOK: bResult = (pHalData->IntArray[0] & BIT_BKDOK) ? TRUE : FALSE; break; case HAL_INT_TYPE_MGNTDOK: bResult = (pHalData->IntArray[0] & BIT_MGTDOK) ? TRUE : FALSE; break; case HAL_INT_TYPE_HIGHDOK: bResult = (pHalData->IntArray[0] & BIT_HIGHDOK) ? TRUE : FALSE; break; #if 0 //Filen: removed case HAL_INT_TYPE_BDOK: bResult = (pHalData->IntArray[0] & IMR_BCNDOK0_88E) ? TRUE : FALSE; break; #endif case HAL_INT_TYPE_CPWM: bResult = (pHalData->IntArray[0] & BIT_CPWM_INT) ? TRUE : FALSE; break; case HAL_INT_TYPE_TSF_BIT32_TOGGLE: bResult = (pHalData->IntArray[0] & BIT_TSF_BIT32_TOGGLE) ? TRUE : FALSE; break; case HAL_INT_TYPE_RX_OK: bResult = (pHalData->IntArray[0] & BIT_RXOK) ? TRUE : FALSE; break; case HAL_INT_TYPE_RDU: bResult = (pHalData->IntArray[0] & BIT_RDU) ? TRUE : FALSE; break; case HAL_INT_TYPE_CTWEND: bResult = (pHalData->IntArray[0] & BIT_CTWEND) ? TRUE : FALSE; break; //4 // ========== DWORD 1 ========== case HAL_INT_TYPE_RXFOVW: bResult = (pHalData->IntArray[1] & BIT_FOVW) ? TRUE : FALSE; break; case HAL_INT_TYPE_TXFOVW: bResult = (pHalData->IntArray[1] & BIT_TXFOVW) ? TRUE : FALSE; break; case HAL_INT_TYPE_RXERR: bResult = (pHalData->IntArray[1] & BIT_RXERR_INT) ? TRUE : FALSE; break; case HAL_INT_TYPE_TXERR: bResult = (pHalData->IntArray[1] & BIT_TXERR_INT) ? TRUE : FALSE; break; case HAL_INT_TYPE_BcnInt_MBSSID: bResult = ((pHalData->IntArray[1] & (BIT_BCNDMAINT1|BIT_BCNDMAINT2|BIT_BCNDMAINT3|BIT_BCNDMAINT4| BIT_BCNDMAINT5|BIT_BCNDMAINT6|BIT_BCNDMAINT7)) || (pHalData->IntArray[0] & BIT_BCNDMAINT0) ) ? TRUE : FALSE; break; case HAL_INT_TYPE_BcnInt1: bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT1) ? TRUE : FALSE; break; case HAL_INT_TYPE_BcnInt2: bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT2) ? TRUE : FALSE; break; case HAL_INT_TYPE_BcnInt3: bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT3) ? TRUE : FALSE; break; case HAL_INT_TYPE_BcnInt4: bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT4) ? TRUE : FALSE; break; case HAL_INT_TYPE_BcnInt5: bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT5) ? TRUE : FALSE; break; case HAL_INT_TYPE_BcnInt6: bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT6) ? TRUE : FALSE; break; case HAL_INT_TYPE_BcnInt7: bResult = (pHalData->IntArray[1] & BIT_BCNDMAINT7) ? TRUE : FALSE; break; } return bResult; }
VOID RemoveInterruptMask88XX( IN HAL_PADAPTER Adapter, IN HAL_INT_TYPE intType ) { HAL_DATA_TYPE *pHalData = _GET_HAL_DATA(Adapter); switch(intType) { default: // Unknown interrupt type, no need to alarm because this IC may not // support this interrupt. RT_TRACE_F(COMP_SYSTEM, DBG_WARNING, ("Unkown intType: %d!\n", intType)); break; case HAL_INT_TYPE_ANY: pHalData->IntMask[0] &= ~0xFFFFFFFF; pHalData->IntMask[1] &= ~0xFFFFFFFF; break; //4 // ========== DWORD 0 ========== case HAL_INT_TYPE_TBDOK: pHalData->IntMask[0] &= ~BIT_TXBCNOK; break; case HAL_INT_TYPE_TBDER: pHalData->IntMask[0] &= ~BIT_TXBCNERR; break; case HAL_INT_TYPE_BcnInt: pHalData->IntMask[0] &= ~BIT_BCNDMAINT0; break; case HAL_INT_TYPE_PSTIMEOUT: pHalData->IntMask[0] &= ~BIT_PSTIMEOUT; break; case HAL_INT_TYPE_PSTIMEOUT1: pHalData->IntMask[0] &= ~BIT_TIMEOUT1; break; case HAL_INT_TYPE_PSTIMEOUT2: pHalData->IntMask[0] &= ~BIT_TIMEOUT2; break; case HAL_INT_TYPE_C2HCMD: pHalData->IntMask[0] &= ~BIT_C2HCMD_INT; break; case HAL_INT_TYPE_VIDOK: pHalData->IntMask[0] &= ~BIT_VIDOK; break; case HAL_INT_TYPE_VODOK: pHalData->IntMask[0] &= ~BIT_VODOK; break; case HAL_INT_TYPE_BEDOK: pHalData->IntMask[0] &= ~BIT_BEDOK; break; case HAL_INT_TYPE_BKDOK: pHalData->IntMask[0] &= ~BIT_BKDOK; break; case HAL_INT_TYPE_MGNTDOK: pHalData->IntMask[0] &= ~BIT_MGTDOK; break; case HAL_INT_TYPE_HIGHDOK: pHalData->IntMask[0] &= ~BIT_HIGHDOK; break; #if 0 //Filen: removed case HAL_INT_TYPE_BDOK: pHalData->IntMask[0] &= ~IMR_BCNDOK0_88E; break; #endif case HAL_INT_TYPE_CPWM: pHalData->IntMask[0] &= ~BIT_CPWM_INT; break; case HAL_INT_TYPE_TSF_BIT32_TOGGLE: pHalData->IntMask[0] &= ~BIT_TSF_BIT32_TOGGLE; break; case HAL_INT_TYPE_RX_OK: pHalData->IntMask[0] &= ~BIT_RXOK; break; case HAL_INT_TYPE_RDU: pHalData->IntMask[0] &= ~BIT_RDU; break; //4 // ========== DWORD 1 ========== case HAL_INT_TYPE_RXFOVW: pHalData->IntMask[1] &= ~BIT_FOVW; break; case HAL_INT_TYPE_TXFOVW: pHalData->IntMask[1] &= ~BIT_TXFOVW; break; case HAL_INT_TYPE_RXERR: pHalData->IntMask[1] &= ~BIT_RXERR_INT; break; case HAL_INT_TYPE_TXERR: pHalData->IntMask[1] &= ~BIT_TXERR_INT; break; } }