void msm_dmov_enqueue_cmd(unsigned id, struct msm_dmov_cmd *cmd) { unsigned long irq_flags; unsigned int status; spin_lock_irqsave(&msm_dmov_lock, irq_flags); status = readl(DMOV_STATUS(id)); if (list_empty(&ready_commands[id]) && (status & DMOV_STATUS_CMD_PTR_RDY)) { #if 0 if (list_empty(&active_commands[id])) { PRINT_FLOW("msm_dmov_enqueue_cmd(%d), enable interrupt\n", id); writel(DMOV_CONFIG_IRQ_EN, DMOV_CONFIG(id)); } #endif PRINT_IO("msm_dmov_enqueue_cmd(%d), start command, status %x\n", id, status); list_add_tail(&cmd->list, &active_commands[id]); if (!channel_active) enable_irq(INT_ADM_AARM); channel_active |= 1U << id; writel(cmd->cmdptr, DMOV_CMD_PTR(id)); } else { if (list_empty(&active_commands[id])) PRINT_ERROR("msm_dmov_enqueue_cmd(%d), error datamover stalled, status %x\n", id, status); PRINT_IO("msm_dmov_enqueue_cmd(%d), enqueue command, status %x\n", id, status); list_add_tail(&cmd->list, &ready_commands[id]); } spin_unlock_irqrestore(&msm_dmov_lock, irq_flags); }
void msm_dmov_enqueue_cmd_ext(unsigned id, struct msm_dmov_cmd *cmd) { unsigned long irq_flags; unsigned int status; spin_lock_irqsave(&msm_dmov_lock, irq_flags); if (clk_ctl == CLK_DIS) clk_enable(msm_dmov_clk); else if (clk_ctl == CLK_TO_BE_DIS) del_timer(&timer); clk_ctl = CLK_EN; status = readl(DMOV_STATUS(id)); if (list_empty(&ready_commands[id]) && (status & DMOV_STATUS_CMD_PTR_RDY)) { if (cmd->exec_func) cmd->exec_func(cmd); PRINT_IO( "msm_dmov_enqueue_cmd_ext(%d), start command, status %x\n", id, status); list_add_tail(&cmd->list, &active_commands[id]); if (!channel_active) enable_irq(INT_ADM_AARM); channel_active |= 1U << id; writel(cmd->cmdptr, DMOV_CMD_PTR(id)); } else { if (!channel_active) { clk_ctl = CLK_TO_BE_DIS; mod_timer(&timer, jiffies + HZ); } if (list_empty(&active_commands[id])) PRINT_ERROR( "msm_dmov_enqueue_cmd_ext(%d), stalled, status %x\n", id, status); PRINT_IO( "msm_dmov_enqueue_cmd_ext(%d), enqueue command, status %x\n", id, status); list_add_tail(&cmd->list, &ready_commands[id]); } spin_unlock_irqrestore(&msm_dmov_lock, irq_flags); }
void msm_dmov_flush(unsigned int id) { unsigned long irq_flags; spin_lock_irqsave(&msm_dmov_lock, irq_flags); /* XXX not checking if flush cmd sent already */ if (!list_empty(&active_commands[id])) { PRINT_IO("msm_dmov_flush(%d), send flush cmd\n", id); writel(DMOV_FLUSH_TYPE, DMOV_FLUSH0(id)); } spin_unlock_irqrestore(&msm_dmov_lock, irq_flags); }
int main() { char filepath[256]={'\0'}; char stat_str[1024]={'\0'}; int count=0; struct stat_result result; memset(&result,0,sizeof(struct stat_result)); /*char data[1024]="fsfe fa发给d f"; char buf[1024]="fsfe fa发给d f"; stat_word(&result,data); print_result(&result); PLOG("space_count=%d\n",result.space_count); stat_word(&result,buf); print_result(&result); PLOG("space_count=%d\n",result.space_count);*/ while(1) { memset(&result,0,sizeof(struct stat_result)); memset(filepath,0,256); memset(stat_str,0,1024); PRINT_IO("选择txt文本文档:"); gets(filepath); if( file_open_able(filepath) != 0 ) { PRINT_ERROR("file can't open !\n"); continue; } PRINT_IO("输入您要统计的字符串:"); gets(stat_str); count=stat(&result,filepath,stat_str); print_result(&result); PLOG("space_count=%d\n",result.space_count); } return 0; }