static irqreturn_t g2d_drv_isr(int irq, void *dev_id) { for(;;) { if (!g2d_drv_get_status()) break; G2D_DBG("handle interrupt, status : %d\n", g2d_drv_get_status()); } wake_up_interruptible(&isr_wait_queue); return IRQ_HANDLED; }
void _g2d_command_handler(g2d_command_t *cmd) { G2D_DBG("start to handle command\n"); #ifdef G2D_QUEUE if (cmd->ctx.end_of_frame) { g2d_drv_fb_queue_buffer(cmd->ctx.fb_id); up(&cmd->lock); return; } #endif g2d_drv_power_on(); g2d_drv_run(&cmd->ctx); wait_event_interruptible(isr_wait_queue, !g2d_drv_get_status()); #ifdef G2D_DEBUG _g2d_reg_dump(); #endif g2d_drv_power_off(); G2D_DBG("handle command done\n"); #ifdef G2D_QUEUE up(&cmd->lock); #endif }