⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kernelcalls.c

📁 1. 8623L平台
💻 C
📖 第 1 页 / 共 2 页
字号:
	wait_queue_head_t *trueq;	trueq = (wait_queue_head_t *) vmalloc(sizeof(wait_queue_head_t));	init_waitqueue_head(trueq);	*q = (struct kc_wait_queue_head_t *) trueq;}/** free the memory used by a waitqueue_head * @param q pointer to the struct kc_wait_queue_head_t to free */EXPORT_SYMBOL(kc_deinit_waitqueue_head);void kc_deinit_waitqueue_head(struct kc_wait_queue_head_t *q){	vfree(q);}/** wake_up_interruptible abstraction * ... */EXPORT_SYMBOL(kc_wake_up_interruptible);void kc_wake_up_interruptible(struct kc_wait_queue_head_t *q){	wake_up_interruptible((wait_queue_head_t *) q);}/** interruptible_sleep_on_timeout abstraction * ... */EXPORT_SYMBOL(kc_interruptible_sleep_on_timeout);long kc_interruptible_sleep_on_timeout(struct kc_wait_queue_head_t *q,				       signed long timeout){	if (timeout == 0) return 0;	return interruptible_sleep_on_timeout((wait_queue_head_t *) q, timeout);}/** signal_pending abstraction for current process * ... */EXPORT_SYMBOL(kc_signal_pending_current);int kc_signal_pending_current(){	return signal_pending(current);}/** get current pid */EXPORT_SYMBOL(kc_currentpid);int kc_currentpid(){	return current->pid;}/** Wait for an event with given timeout * @param wq the wait_queue * @param condition the condition to wait * @timeout maximum wait * @return time remaining */EXPORT_SYMBOL(kc_wait_event_interruptible_timeout);long kc_wait_event_interruptible_timeout(struct kc_wait_queue_head_t *wq, 					 unsigned int (*condition)(void *cookie), signed long timeout,void *cookie){	long __ret = timeout;        if (!(condition(cookie)))                                       __wait_event_interruptible_timeout( 			     *(wait_queue_head_t *)wq, condition(cookie), __ret);        return __ret;}//// atomic// /** allocate a new atomic_t * @param v pointer to struct kc_atomic_t * */EXPORT_SYMBOL(kc_atomic_init);void kc_atomic_init(struct kc_atomic_t **v){	atomic_t *truev;	truev = (atomic_t *) vmalloc(sizeof(atomic_t));	*v = (struct kc_atomic_t *) truev;}/** Free memory used by a struct kc_atomic_t * @param v struct kc_atomic_t to free */EXPORT_SYMBOL(kc_atomic_deinit);void kc_atomic_deinit(struct kc_atomic_t *v){	vfree(v);}/** atomic_read abstraction * ... */EXPORT_SYMBOL(kc_atomic_read);int kc_atomic_read(struct kc_atomic_t *v){	return atomic_read((atomic_t *) v);}/** atomic_set abstraction * ... */EXPORT_SYMBOL(kc_atomic_set);void kc_atomic_set(struct kc_atomic_t *v, int i){	atomic_set((atomic_t *) v, i);}/** atomic_inc abstraction * ... */EXPORT_SYMBOL(kc_atomic_inc);void kc_atomic_inc(struct kc_atomic_t *v){	atomic_inc((atomic_t *) v);}/** atomic_add_negative abstraction * ... */EXPORT_SYMBOL(kc_atomic_add_negative);int kc_atomic_add_negative(int i, struct kc_atomic_t *v){	return atomic_add_negative(i, (atomic_t *) v);}/** atomic_dec_and_test abstraction * ... */EXPORT_SYMBOL(kc_atomic_dec_and_test);int kc_atomic_dec_and_test(struct kc_atomic_t *v){	return atomic_dec_and_test((atomic_t *) v);}//// bitops// /** test_and_set_bit abstraction * ... */EXPORT_SYMBOL(kc_test_and_set_bit);int kc_test_and_set_bit(int nr, volatile void *addr){	return test_and_set_bit(nr, addr);}/** test_and_clear_bit abstraction * ... */EXPORT_SYMBOL(kc_test_and_clear_bit);int kc_test_and_clear_bit(int nr, volatile void *addr){	return test_and_clear_bit(nr, addr);}/** clear_bit abstraction * ... */EXPORT_SYMBOL(kc_clear_bit);void kc_clear_bit(int nr, volatile void *addr){	clear_bit(nr, addr);}/** test_bit abstraction * ... */EXPORT_SYMBOL(kc_test_bit);int kc_test_bit(int nr, volatile void *addr){	return test_bit(nr, (void *) addr);}/** set_bit abstraction * ... */EXPORT_SYMBOL(kc_set_bit);void kc_set_bit(int nr, volatile void *addr){	set_bit(nr, addr);}//// string// /** memcpy abstraction * ... */EXPORT_SYMBOL(kc_memcpy);void *kc_memcpy(void *const dest, const void *src, unsigned long n){	return memcpy(dest, src, n);}/** memset abstraction * ... */EXPORT_SYMBOL(kc_memset);void *kc_memset(void *d, int c, unsigned int l){	return memset(d, c, l);}/** memcmp abstraction * ... */EXPORT_SYMBOL(kc_memcmp);int kc_memcmp(const void *d, const void *s, unsigned int l){	return memcmp(d, s, l);}/** strncpy abstraction * ... */EXPORT_SYMBOL(kc_strncpy);char *kc_strncpy(char *d, const char *s, unsigned int l){	return strncpy(d, s, l);}/** strcat abstraction * ... */EXPORT_SYMBOL(kc_strcat);char *kc_strcat(char *d, const char *s){	return strcat(d, s);}/** strcpy abstraction * ... */EXPORT_SYMBOL(kc_strcpy);char *kc_strcpy(char *d, const char *s){	return strcpy(d, s);}/** strlen abstraction * ... */EXPORT_SYMBOL(kc_strlen);unsigned int kc_strlen(const char *d){	return strlen(d);}/** strnicmp * ... */EXPORT_SYMBOL(kc_strnicmp);int kc_strnicmp(const char *d, const char *s, unsigned int l){	return strnicmp(d, s, l);}//// tophalf & tasklet// /** tasklet_init abstraction * ... */EXPORT_SYMBOL(kc_tasklet_init);void kc_tasklet_init(struct kc_tasklet_struct **t,	void (*func) (unsigned long), unsigned long data){	*t = (struct kc_tasklet_struct *) vmalloc(sizeof(struct tasklet_struct));	tasklet_init((struct tasklet_struct *) *t, func, data);}/** free a kc_tasklet_struct * @param t the tasklet ro destroy */EXPORT_SYMBOL(kc_tasklet_deinit);void kc_tasklet_deinit(struct kc_tasklet_struct *t){	vfree(t);}/** tasklet_disable abstraction * ... */EXPORT_SYMBOL(kc_tasklet_disable);void kc_tasklet_disable(struct kc_tasklet_struct *t){	tasklet_disable((struct tasklet_struct *) t);}/** virt/phys/page abstraction * ... */EXPORT_SYMBOL(kc_virt_to_page);struct kc_page * kc_virt_to_page(unsigned long addr){	return (struct kc_page *)virt_to_page((void *)addr);}EXPORT_SYMBOL(kc_virt_to_phys);unsigned long kc_virt_to_phys(unsigned long addr){#if (EM86XX_CHIP==EM86XX_CHIPID_TANGO2)	/* virt_to_xxx can not handle uncached address correctly */#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)	kcinfo("kc_virt_to_phys: virt = %p to -> phys= %p\n", addr, PHYSADDR(addr));	return PHYSADDR((void *)addr);#else	kcinfo("kc_virt_to_phys: virt = %p to -> phys= %p\n", addr, CPHYSADDR(addr));	return CPHYSADDR((void *)addr);#endif#else	return (unsigned long) virt_to_phys(addr);#endif /* (EM86XX_CHIP==EM86XX_CHIPID_TANGO2) */}EXPORT_SYMBOL(kc_virt_to_bus);unsigned long kc_virt_to_bus(unsigned long addr){#if (EM86XX_CHIP==EM86XX_CHIPID_TANGO2)	/* virt_to_xxx can not handle uncached address correctly */#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)	kcinfo("kc_virt_to_bus: virt = %p to -> bus = %p\n", addr, PHYSADDR(addr));	return PHYSADDR((void *)addr);#else	kcinfo("kc_virt_to_bus: virt = %p to -> bus = %p\n", addr, CPHYSADDR(addr));	return CPHYSADDR((void *)addr);#endif#else	return (unsigned long) virt_to_bus(addr);#endif /* (EM86XX_CHIP==EM86XX_CHIPID_TANGO2) */}EXPORT_SYMBOL(kc_phys_to_virt);unsigned long kc_phys_to_virt(unsigned long addr){#if (EM86XX_CHIP==EM86XX_CHIPID_TANGO2)	/* kcinfo("kc_phys_to_virt: phys = %p to -> virt= %p\n", addr, KSEG0ADDR(addr)); */	return KSEG0ADDR((void *)addr);#else	return (unsigned long) phys_to_virt(addr);#endif /* (EM86XX_CHIP==EM86XX_CHIPID_TANGO2) */}//// time// /** jiffies abstraction * ... */EXPORT_SYMBOL(kc_jiffies);unsigned long kc_jiffies(void) { return jiffies; }/** mdelay abstraction * ... */EXPORT_SYMBOL(kc_mdelay);void kc_mdelay(unsigned long n) { udelay(n*1000); }/** udelay abstraction * ... */EXPORT_SYMBOL(kc_udelay);void kc_udelay(unsigned long n) { udelay(n); }/** get time in ms * @return time in ms */EXPORT_SYMBOL(kc_gettimems);unsigned long kc_gettimems(void) { 	static int firsttimehere=TRUE;	static struct timeval timeorigin;	struct timeval now;		if (firsttimehere) {		do_gettimeofday(&timeorigin);		firsttimehere=FALSE;	}		do_gettimeofday(&now);		return (now.tv_sec-timeorigin.tv_sec)*1000+now.tv_usec/1000-timeorigin.tv_usec/1000;}/** get time in us * @return time in us */EXPORT_SYMBOL(kc_gettimeus);unsigned long long kc_gettimeus(void) { 	static int firsttimehere=TRUE;	static struct timeval timeorigin;	struct timeval now;		if (firsttimehere) {		do_gettimeofday(&timeorigin);		firsttimehere=FALSE;	}		do_gettimeofday(&now);		return 		(unsigned long long)(		 (		  (long long)now.tv_sec		  -(long long)timeorigin.tv_sec		  )*1000000LL		 +		 ( 		  (long long)now.tv_usec		  -(long long)timeorigin.tv_usec		  )		 );}/** Invalidate data cache.  * @param pData the physical address to be flushed * @param size the size of the zone to flush */void kc_invalidate_cache(void *pData, unsigned int size){#if (EM86XX_CHIP==EM86XX_CHIPID_TANGO2)                        dcache_range_i(KSEG0ADDR((unsigned long) pData), (unsigned long) size);#else			cpu_pt110_dcache_invalidate_range((unsigned long) pData,(unsigned long) size);#endif	kcinfo("cache invalidated : addr = %p, size = %lu\n", pData, size);}/** Flush data cache.  * @param pData the physical address to be flushed * @param size the size of the zone to flush */EXPORT_SYMBOL(kc_flush_cache);void kc_flush_cache(void *pData, unsigned int size){#if (EM86XX_CHIP==EM86XX_CHIPID_TANGO2)                        dcache_range_w(KSEG0ADDR((unsigned long) pData),(unsigned long) size);#else			cpu_pt110_dcache_clean_range( (unsigned long) pData,(unsigned long) size);#endif	kcinfo("cache flushed : addr = %p, size = %lu\n", pData, size);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -