Пример #1
0
int cpe_thread_handler(void *unused)
{
    kal_uint32 ret = 0;
    
    do
    {
        ktime_t ktime = ktime_set(cpe_period, 0);
        
        wait_event_interruptible(cpe_timer_waiter, cpe_timer_flag != 0);
        cpe_timer_flag = 0;
        
        ret = mtk_cpe_one_shot_handler((kal_uint16)g_path1, (kal_uint16)g_path2, (kal_uint16)g_path3);
        xlog_printk(ANDROID_LOG_INFO, "Power/CPE", "got critical path rosc counter = %d\n", ret);
        
        hrtimer_start(&cpe_timer, ktime, HRTIMER_MODE_REL);
    } while (!kthread_should_stop());
    
    return 0;
}
Пример #2
0
static ssize_t cpe_one_shot_mode_write(struct file *file, const char *buffer, unsigned long count, void *data)
{
    int len = 0;
    char mode[20], desc[32];
    kal_uint32 ret = 0;
    
    len = (count < (sizeof(desc) - 1)) ? count : (sizeof(desc) - 1);
    if (copy_from_user(desc, buffer, len)) 
    {
        return 0;
    }
    desc[len] = '\0';
        
    printk("\n=============== Critical Path Emulator One Shot Mode ================\n");
    if (sscanf(desc, "%s", mode) == 1)
    {
        if (!strcmp(mode, "enable"))
        {
            printk("  enable critical path emulator one shot mode\n");
            
            ret = mtk_cpe_one_shot_handler(g_path1, g_path2, g_path3);
            printk("  got critical path rosc counter = %d\n", ret);
            printk("==========================================\n");
            return count;
        }
        else
        {
            printk("  bad argument!! argument should be \"enable\" or \"disable\"\n");
            printk(  "==========================================\n");
        }
    }
    else
    {
        printk("  bad argument!!\n");
        printk(  "==========================================\n");
    }
    
    return -EINVAL;
}