117 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/*-----------------------------------------------------------------------------*/
 | 
						|
/* Include Header Files                                                        */
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
//! Linux
 | 
						|
#include <linux/init.h>
 | 
						|
#include <linux/module.h>
 | 
						|
#include <linux/moduleparam.h>
 | 
						|
 | 
						|
//! RTOS
 | 
						|
#include <kwrap/task.h>
 | 
						|
#include <kwrap/semaphore.h>
 | 
						|
#include <kwrap/flag.h>
 | 
						|
#include <kwrap/perf.h>
 | 
						|
#include "rtos_os_proc.h"
 | 
						|
#include "vos_ioctl.h"
 | 
						|
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
/* Local Constant Definitions                                                  */
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
#define NVT_VOS_VERSION             "1.00.008"
 | 
						|
// Total number of kernel ID sources
 | 
						|
#define MAX_FLAG_COUNT              1000
 | 
						|
#define MAX_TASK_COUNT              500
 | 
						|
#define MAX_SEM_COUNT               2000
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
/* Local Types Declarations                                                    */
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
 | 
						|
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
/* Extern Global Variables                                                     */
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
// GxSystem.a will start a idle task to detect dummy interrupt,
 | 
						|
// and didn't provide API to turn this function off.
 | 
						|
// We have to terminate the task via brute force
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
/* Extern Function Prototype                                                   */
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
/* Local Function Protype                                                      */
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
/* Local Global Variables                                                      */
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
static int max_flag_count = 300;
 | 
						|
static int max_task_count = 100;
 | 
						|
static int max_sem_count  = 999;
 | 
						|
module_param(max_flag_count, uint, 0644);
 | 
						|
module_param(max_task_count, uint, 0644);
 | 
						|
module_param(max_sem_count, uint, 0644);
 | 
						|
MODULE_PARM_DESC(max_flag_count, "Set Max flag count");
 | 
						|
MODULE_PARM_DESC(max_task_count, "Set Max task count");
 | 
						|
MODULE_PARM_DESC(max_sem_count, "Set Max sem count");
 | 
						|
 | 
						|
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
/* Interface Functions                                                         */
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
static int _rtos_init_(void)
 | 
						|
{
 | 
						|
	printk("nvt_vos: %s (%s %s)\n", NVT_VOS_VERSION, __DATE__, __TIME__);
 | 
						|
 | 
						|
	if (max_flag_count > MAX_FLAG_COUNT) {
 | 
						|
		printk(KERN_ERR "rtos wrapper init max_flag_count = %d exceeds limit %d\n", max_flag_count, MAX_FLAG_COUNT);
 | 
						|
		return -1;
 | 
						|
	}
 | 
						|
	if (max_task_count > MAX_TASK_COUNT) {
 | 
						|
		printk(KERN_ERR "rtos wrapper init max_task_count = %d exceeds limit %d\n", max_task_count, MAX_TASK_COUNT);
 | 
						|
		return -1;
 | 
						|
	}
 | 
						|
	if (max_sem_count > MAX_SEM_COUNT) {
 | 
						|
		printk(KERN_ERR "rtos wrapper init max_sem_count = %d exceeds limit %d\n", max_sem_count, MAX_SEM_COUNT);
 | 
						|
		return -1;
 | 
						|
	}
 | 
						|
	#if 0
 | 
						|
	printk(KERN_INFO "rtos wrapper init max_flag_count = %d\n", max_flag_count);
 | 
						|
	printk(KERN_INFO "rtos wrapper init max_task_count = %d\n", max_task_count);
 | 
						|
	printk(KERN_INFO "rtos wrapper init max_sem_count = %d\n", max_sem_count);
 | 
						|
	#endif
 | 
						|
	vos_ioctl_init(NULL);
 | 
						|
	rtos_sem_init(max_sem_count); // should before rtos_sem_init
 | 
						|
	rtos_flag_init(max_flag_count);
 | 
						|
	rtos_task_init(max_task_count);
 | 
						|
	rtos_proc_init(NULL);
 | 
						|
	vos_perf_init(NULL);
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
static void _rtos_exit_(void)
 | 
						|
{
 | 
						|
	rtos_sem_exit();
 | 
						|
	rtos_task_exit();
 | 
						|
	rtos_flag_exit();
 | 
						|
	vos_perf_exit();
 | 
						|
	vos_ioctl_exit();
 | 
						|
	rtos_proc_exit();
 | 
						|
	printk(KERN_INFO "rtos wrapper exit\n");
 | 
						|
}
 | 
						|
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
/* Kernel Mode Definiton                                                       */
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
 | 
						|
#ifdef __NVT_VOS_KWRAP_USE_INITCALL
 | 
						|
arch_initcall(_rtos_init_);
 | 
						|
__exitcall(_rtos_exit_);
 | 
						|
#else
 | 
						|
module_init(_rtos_init_);
 | 
						|
module_exit(_rtos_exit_);
 | 
						|
#endif
 | 
						|
 | 
						|
MODULE_AUTHOR("Novatek Corp.");
 | 
						|
MODULE_DESCRIPTION("rtos wrapper driver");
 | 
						|
MODULE_LICENSE("GPL");
 | 
						|
MODULE_VERSION(NVT_VOS_VERSION); |