69 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| #include <linux/kernel.h>
 | |
| #include <linux/module.h>
 | |
| #include <linux/moduleparam.h>
 | |
| #include <linux/platform_device.h>
 | |
| #include <linux/fs.h>
 | |
| #include <linux/miscdevice.h>
 | |
| #include "nvt_perf.h"
 | |
| #include "nvt_perf_dbg.h"
 | |
| 
 | |
| #define PERF_DEV_NAME      "nvt_perf"
 | |
| #define PERF_DRV_VERSION   "00.00.04"
 | |
| 
 | |
| unsigned int nvt_perf_debug_level = NVT_PERF_DBG_WRN | NVT_PERF_DBG_ERR;
 | |
| extern int do_cache_perf(void);
 | |
| 
 | |
| static long perf_file_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 | |
| {
 | |
| 
 | |
| 	switch (cmd) {
 | |
| 
 | |
| 	case NVT_PERF_CACHE:
 | |
| 		do_cache_perf();
 | |
| 		break;
 | |
| 
 | |
| 	default:
 | |
| 		nvt_dbg(ERR, "unknow ioctl type:0x%x\n", cmd);
 | |
| 	}
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| static struct file_operations nvt_perf_fops = {
 | |
| 	.owner		    = THIS_MODULE,
 | |
|     .unlocked_ioctl = perf_file_ioctl,
 | |
| };
 | |
| 
 | |
| static struct miscdevice nvt_perf_misc_device = {
 | |
| 	.minor		= MISC_DYNAMIC_MINOR,
 | |
| 	.name		= PERF_DEV_NAME,
 | |
| 	.fops		= &nvt_perf_fops,
 | |
| };
 | |
| 
 | |
| int __init nvt_perf_init(void)
 | |
| {
 | |
| 	int ret = 0;
 | |
| 	nvt_dbg(ERR, "NVT_PERF version:%s\n", PERF_DRV_VERSION);
 | |
| 
 | |
| 
 | |
| 	if ((ret = misc_register(&nvt_perf_misc_device))){
 | |
| 		nvt_dbg(ERR, "Failed to register misc device '%s'\n", nvt_perf_misc_device.name);
 | |
| 		goto ERR_MISC;
 | |
| 	}
 | |
| 
 | |
| ERR_MISC:
 | |
| 	return ret;
 | |
| }
 | |
| 
 | |
| void __exit nvt_perf_exit(void)
 | |
| {
 | |
| 	misc_deregister(&nvt_perf_misc_device);
 | |
| }
 | |
| 
 | |
| module_init(nvt_perf_init);
 | |
| module_exit(nvt_perf_exit);
 | |
| 
 | |
| MODULE_AUTHOR("Novatek Corp.");
 | |
| MODULE_DESCRIPTION("nvt perf");
 | |
| MODULE_LICENSE("Proprietary");
 | 
