static int _is_tx_dma_in_flush(P_MTK_DMA_INFO_STR p_dma_info) { bool b_ret = true; unsigned int base = p_dma_info->base; /*see if flush operation is in process*/ b_ret = ((DMA_FLUSH_BIT & BTIF_READ32(TX_DMA_FLUSH(base))) != 0) ? true : false; return b_ret; }
static int _tx_dma_flush(P_MTK_DMA_INFO_STR p_dma_info) { unsigned int i_ret = -1; unsigned long base = p_dma_info->base; unsigned int stop = BTIF_READ32(TX_DMA_STOP(base)); /*in MTK DMA BTIF channel we cannot set STOP and FLUSH bit at the same time*/ if ((DMA_STOP_BIT && stop) != 0) BTIF_ERR_FUNC("BTIF's DMA in stop state, omit flush operation\n"); else { BTIF_DBG_FUNC("flush tx dma\n"); BTIF_SET_BIT(TX_DMA_FLUSH(base), DMA_FLUSH_BIT); i_ret = 0; } return i_ret; }
static int hal_tx_dma_dump_reg(P_MTK_DMA_INFO_STR p_dma_info, ENUM_BTIF_REG_ID flag) { int i_ret = -1; unsigned int base = p_dma_info->base; unsigned int int_flag = 0; unsigned int enable = 0; unsigned int stop = 0; unsigned int flush = 0; unsigned int wpt = 0; unsigned int rpt = 0; unsigned int int_buf = 0; unsigned int valid_size = 0; /*unsigned long irq_flag = 0;*/ /*spin_lock_irqsave(&(g_clk_cg_spinlock), irq_flag);*/ if (0 == clock_is_on(MTK_BTIF_APDMA_CLK_CG)) { /*spin_unlock_irqrestore(&(g_clk_cg_spinlock), irq_flag);*/ BTIF_ERR_FUNC("%s: clock is off, this should never happen!!!\n", __FILE__); return i_ret; } int_flag = BTIF_READ32(TX_DMA_INT_FLAG(base)); enable = BTIF_READ32(TX_DMA_EN(base)); stop = BTIF_READ32(TX_DMA_STOP(base)); flush = BTIF_READ32(TX_DMA_FLUSH(base)); wpt = BTIF_READ32(TX_DMA_VFF_WPT(base)); rpt = BTIF_READ32(TX_DMA_VFF_RPT(base)); int_buf = BTIF_READ32(TX_DMA_INT_BUF_SIZE(base)); valid_size = BTIF_READ32(TX_DMA_VFF_VALID_SIZE(base)); /*spin_unlock_irqrestore(&(g_clk_cg_spinlock), irq_flag);*/ BTIF_INFO_FUNC("DMA's clock is on\n"); BTIF_INFO_FUNC("Tx DMA's base address: 0x%x\n", base); if (REG_TX_DMA_ALL == flag) { BTIF_INFO_FUNC("TX_EN(:0x%x\n", enable); BTIF_INFO_FUNC("INT_FLAG:0x%x\n", int_flag); BTIF_INFO_FUNC("TX_STOP:0x%x\n", stop); BTIF_INFO_FUNC("TX_FLUSH:0x%x\n", flush); BTIF_INFO_FUNC("TX_WPT:0x%x\n", wpt); BTIF_INFO_FUNC("TX_RPT:0x%x\n", rpt); BTIF_INFO_FUNC("INT_BUF_SIZE:0x%x\n", int_buf); BTIF_INFO_FUNC("VALID_SIZE:0x%x\n", valid_size); BTIF_INFO_FUNC("INT_EN:0x%x\n", BTIF_READ32(TX_DMA_INT_EN(base))); BTIF_INFO_FUNC("TX_RST:0x%x\n", BTIF_READ32(TX_DMA_RST(base))); BTIF_INFO_FUNC("VFF_ADDR:0x%x\n", BTIF_READ32(TX_DMA_VFF_ADDR(base))); BTIF_INFO_FUNC("VFF_LEN:0x%x\n", BTIF_READ32(TX_DMA_VFF_LEN(base))); BTIF_INFO_FUNC("TX_THRE:0x%x\n", BTIF_READ32(TX_DMA_VFF_THRE(base))); BTIF_INFO_FUNC("W_INT_BUF_SIZE:0x%x\n", BTIF_READ32(TX_DMA_W_INT_BUF_SIZE(base))); BTIF_INFO_FUNC("LEFT_SIZE:0x%x\n", BTIF_READ32(TX_DMA_VFF_LEFT_SIZE(base))); BTIF_INFO_FUNC("DBG_STATUS:0x%x\n", BTIF_READ32(TX_DMA_DEBUG_STATUS(base))); i_ret = 0; } else { BTIF_WARN_FUNC("unknown flag:%d\n", flag); } BTIF_INFO_FUNC("tx dma %s\n", (enable & DMA_EN_BIT) && (!(stop && DMA_STOP_BIT)) ? "enabled" : "stoped"); BTIF_INFO_FUNC("data in tx dma is %s sent by HW\n", ((wpt == rpt) && (int_buf == 0)) ? "completely" : "not completely"); return i_ret; }