static INT32 mtk_sdio_interrupt(MTK_WCN_HIF_SDIO_CLTCTX cltCtx) { P_GLUE_INFO_T prGlueInfo = NULL; INT32 ret = 0; prGlueInfo = mtk_wcn_hif_sdio_get_drvdata(cltCtx); ASSERT(prGlueInfo); if (!prGlueInfo) { //printk(KERN_INFO DRV_NAME"No glue info in mtk_sdio_interrupt()\n"); return (-HIF_SDIO_ERR_FAIL); } if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { //printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip INT\n"); ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); return ret; } /*WCNCR 00002676*/ KAL_WAKE_UNLOCK(NULL, &isr_wakelock); KAL_WAKE_LOCK_TIMEOUT(NULL, &isr_wakelock, KAL_HZ/10); ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); set_bit (GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag); /* when we got sdio interrupt, we wake up the tx servie thread*/ wake_up_interruptible(&prGlueInfo->waitq); return ret; }
static INT32 mtk_sdio_interrupt(MTK_WCN_HIF_SDIO_CLTCTX cltCtx) { P_GLUE_INFO_T prGlueInfo = NULL; INT32 ret = 0; prGlueInfo = mtk_wcn_hif_sdio_get_drvdata(cltCtx); /* ASSERT(prGlueInfo); */ if (!prGlueInfo) { /* printk(KERN_INFO DRV_NAME"No glue info in mtk_sdio_interrupt()\n"); */ return (-HIF_SDIO_ERR_FAIL); } if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { /* printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip INT\n"); */ ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); return ret; } ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); set_bit(GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag); /* when we got sdio interrupt, we wake up the tx servie thread */ #if CFG_SUPPORT_MULTITHREAD wake_up_interruptible(&prGlueInfo->waitq_hif); #else wake_up_interruptible(&prGlueInfo->waitq); #endif return ret; }
static INT32 mtk_sdio_interrupt(MTK_WCN_HIF_SDIO_CLTCTX cltCtx) { P_GLUE_INFO_T prGlueInfo = NULL; INT32 ret = 0; struct sdio_func* func; func = hif_sdio_ctx_to_func_wapper(cltCtx); sdio_release_host(func); prGlueInfo = mtk_wcn_hif_sdio_get_drvdata(cltCtx); ASSERT(prGlueInfo); if (!prGlueInfo) { //printk(KERN_INFO DRV_NAME"No glue info in mtk_sdio_interrupt()\n"); return (-HIF_SDIO_ERR_FAIL); } if (prGlueInfo->u4Flag & GLUE_FLAG_HALT) { //printk(KERN_INFO DRV_NAME"GLUE_FLAG_HALT skip INT\n"); ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); return ret; } ret = mtk_wcn_hif_sdio_writel(cltCtx, MCR_WHLPCR, WHLPCR_INT_EN_CLR); set_bit (GLUE_FLAG_INT_BIT, &prGlueInfo->u4Flag); /* when we got sdio interrupt, we wake up the tx servie thread*/ wake_up_interruptible(&prGlueInfo->waitq); sdio_claim_host(func); return ret; }