亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? psc.c

?? fsmlabs的real time linux的內(nèi)核
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * (C) Finite State Machine Labs Inc. 2000 business@fsmlabs.com * * Released under the terms of GPL 2. * Open RTLinux makes use of a patented process described in * US Patent 5,995,745. Use of this process is governed * by the Open RTLinux Patent License which can be obtained from * www.fsmlabs.com/PATENT or by sending email to * licensequestions@fsmlabs.com */#include <linux/module.h>#include <linux/proc_fs.h>#include <linux/irq.h>#include <linux/sched.h>#include <linux/string.h>#include <linux/signal.h>#include <asm/uaccess.h>#include <asm/system.h>#include <asm/mmu_context.h>#include <rtl_debug.h>#include <rtl_core.h>#include <rtlinux_signal.h>#include <psc.h>#include <rtl_sync.h>#include <rtl_time.h>#include <rtl_sched.h>#include <rtl_fifo.h>#include <arch/rtl_switch.h>/* posix/signal.h defines these.  It's an ugly hack and this * is a ugly workaround. -- Cort */#undef sa_sigaction#undef sa_handler#undef sigactionMODULE_AUTHOR("FSMLabs <support@fsmlabs.com>");MODULE_DESCRIPTION("RTLinux user-level real-time Module");MODULE_LICENSE("GPL v2");#define PSC_DEVNAME "RTLinux user-level IRQ handler"extern long sys_call_table[256];unsigned long sys_ni_syscall;unsigned long __NR_rtf_destroy = 0;unsigned long __NR_rtf_create = 0;struct proc_dir_entry *proc_rtlinux, *proc_sigaction,    *proc_sigprocmask, *proc_gethrtime, *proc_rtf_put,    *proc_rtf_get, *proc_rtf_create, *proc_rtf_destroy;struct irq_thread {	struct rtlinux_sigaction action;	pid_t pid;	pthread_t ptid;} irq_threads[NR_IRQS];struct timer_thread {	struct rtlinux_sigaction action;	pid_t pid;	pthread_t ptid;	struct timer_thread *next;	int pending;} *timer_threads;/* support function for checking signal masks. -Nathan */int rtlinux_sigismember(const rtlinux_sigset_t * set, int sig){	int offset;	unsigned long int value;	if (set == NULL)		return (-1);	if (sig > RTLINUX_SIGMAX) {		errno = EINVAL;		return (-1);	}	offset = (int) ((sig / (sizeof(unsigned long int) * 8)));	value = 1 << (sig % (sizeof(unsigned long int) * 8));	if (((unsigned long int) (set->__val[offset] & value)) > 0)		return (1);	return (0);}int rtlinux_sigemptyset(rtlinux_sigset_t * set){	if (set == NULL)		return (-1);	memset(set, 0x00, sizeof(rtlinux_sigset_t));	return (0);}static void insert_timer_thread(struct timer_thread *thread){	unsigned long flags;	rtl_hard_savef_and_cli(flags);	rtlinux_sigemptyset(&(thread->action.sa_mask));	thread->pending = 0;	thread->next = timer_threads;	timer_threads = thread;	rtl_hard_restore_flags(flags);}static struct timer_thread *remove_timer_thread(struct timer_thread *tt){	unsigned long flags;	struct timer_thread *ret = NULL, *die = NULL;	rtl_hard_savef_and_cli(flags);	if ((tt = timer_threads)) {		timer_threads = timer_threads->next;		goto out;	}	for (ret = timer_threads; ret->next && (ret->next != tt);	     ret = ret->next)		/* nothing */ ;	die = ret->next;	if (ret->next)		ret->next = ret->next->next;	kfree(die);      out:	rtl_hard_restore_flags(flags);	return ret;}static struct timer_thread *find_timer_thread(pid_t pid, int signal){	unsigned long flags;	struct timer_thread *ret;	rtl_hard_savef_and_cli(flags);	for (ret = timer_threads; ret && ((ret->pid != pid) ||		(ret->action.sa_signal != signal)); ret = ret->next)		/* nothing */ ;	rtl_hard_restore_flags(flags);	return ret;}static int call_handler(struct rtlinux_sigaction *act, pid_t pid){	rtl_irqstate_t flags;#ifdef RTL_PSC_NEW	rtl_mmu_state_t mmu_state;#else	struct task_struct *linux_current = get_linux_current();#endif	struct task_struct *tsk;	int ret = 0;	/* make sure the task that wants this interrupt is still running */	if (!(tsk = find_task_by_pid(pid))) {	/* TODO is this really safe? */		/* make sure the handler is disabled */		act->sa_flags |= RTLINUX_SA_ONESHOT;		rtl_printf("task %d is gone!\n", pid);		ret = -1;		goto out;	}	if (!tsk->mm) {		/* make sure the handler is disabled */		act->sa_flags |= RTLINUX_SA_ONESHOT;		rtl_printf("task has no ->mm, not calling\n");		ret = -1;		goto out;	}#ifndef RTL_PSC_NEW	if (!linux_current->active_mm) {		act->sa_flags |= RTLINUX_SA_ONESHOT;		rtl_printf("current has no ->mm, not calling\n");		ret = -1;		goto out;	}#endif	rtl_no_interrupts(flags);	rtl_make_psc_active();#ifdef RTL_PSC_NEW	rtl_mmu_save(&mmu_state);	rtl_mmu_switch_to(tsk);	act->sa_handler(act->sa_signal);	rtl_mmu_restore(&mmu_state);#else	switch_mm(linux_current->active_mm, tsk->mm, tsk, rtl_getcpuid());	act->sa_handler(act->sa_signal);	switch_mm(tsk->mm, linux_current->active_mm, tsk, rtl_getcpuid());#endif	rtl_make_psc_inactive();	rtl_restore_interrupts(flags);      out:	return ret;}static void *psc_irq_thread(void *t){	ulong flags;	struct irq_thread *my_irq_thread = (struct irq_thread *) t;	rtl_stop_interrupts();	while (1) {		pthread_suspend_np(pthread_self());		/* if the handler call fails or we don't want to reset the 		 * handler remove it */		if (call_handler		    (&my_irq_thread->action, my_irq_thread->pid)		    || (my_irq_thread->			action.sa_flags & RTLINUX_SA_ONESHOT)) {			/* we are synchronizing with RTL, so hard cli */			rtl_hard_savef_and_cli(flags);			rtl_free_global_irq(my_irq_thread->					    action.sa_signal);			my_irq_thread->pid = 0;			rtl_hard_restore_flags(flags);		}		rtl_global_pend_irq(my_irq_thread->action.sa_signal);		rtl_hard_enable_irq(my_irq_thread->action.sa_signal);	}}static void *timer_handler(void *t){	struct timer_thread *ptr = (struct timer_thread *) t;	struct sched_param p;	p.sched_priority = 1;	pthread_setschedparam(pthread_self(), SCHED_FIFO, &p);	if (pthread_make_periodic_np(pthread_self(),				     gethrtime() + ptr->action.sa_period,				     ptr->action.sa_period))		    rtl_printf("Error from pthread_make_periodic_np()\n");	while (1) {		pthread_wait_np();		/* if the handler call fails or we don't want to reset the handler		 * remove it		 */		if (ptr->pending == 0) {			if (call_handler(&ptr->action, ptr->pid) ||			    (ptr->action.sa_flags & RTLINUX_SA_ONESHOT)) {				remove_timer_thread(ptr);				pthread_exit(NULL);			}		} else			ptr->pending++;	}	return NULL;}static unsigned int psc_irq_handler(unsigned int irq, struct pt_regs *regs){	/* just wake the stinking IRQ thread up and let it handle it -Nathan */	pthread_wakeup_np(irq_threads[irq].ptid);	return 0;}static int sigaction_write(struct file *file, const char *buffer,			   unsigned long count, void *data){	struct rtlinux_sigaction action;	ulong flags;	struct timer_thread *tt = NULL;	if (count != sizeof(action))		return -EINVAL;	/* make sure the buffer we were passed is good, then copy it */	if (copy_from_user	    ((void *) &action, (void *) buffer,	     sizeof(action))) return -EFAULT;	rtlinux_sigemptyset(&(action.sa_mask));	/* if the signal is < SIGTIMER0 it's an IRQ request */	if (action.sa_signal < RTLINUX_SIGTIMER0) {		/* a request to free the irq */		if ((action.sa_handler == RTLINUX_SIG_DFL) ||		    (action.sa_handler == RTLINUX_SIG_IGN)) {			pthread_kill(irq_threads[action.sa_signal].ptid,				     RTL_SIGNAL_CANCEL);			if (rtl_free_global_irq(action.sa_signal))				return -EALREADY;			else				return count;		}		/* we are synchronizing with RTL, so hard cli */		rtl_hard_savef_and_cli(flags);		/* grab the interrupt */		if (rtl_request_global_irq		    (action.sa_signal, psc_irq_handler)) {			rtl_hard_restore_flags(flags);			return -EBUSY;		}		/* hmm, somehow we need to threadify IRQs so they have state		 * so they can be switched and stuff.  hmmm . . .  -Nathan */		/* we now own the real-time irq, assign the code */		irq_threads[action.sa_signal].pid = current->pid;		irq_threads[action.sa_signal].action = action;		pthread_create(&irq_threads[action.sa_signal].ptid, NULL,			       psc_irq_thread,			       (void *) &irq_threads[action.sa_signal]);#ifdef CONFIG_RTL_FP_SUPPORT

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品麻豆| 精品一区中文字幕| 久久99精品国产麻豆婷婷| 91免费看`日韩一区二区| 欧美日韩不卡一区| 国产精品久久午夜夜伦鲁鲁| 午夜伊人狠狠久久| 国产精品自拍网站| 日韩精品中文字幕在线一区| 樱桃国产成人精品视频| 成人午夜精品在线| 欧美sm极限捆绑bd| 日韩精品一卡二卡三卡四卡无卡| 成人av网站免费观看| 欧美大片在线观看| 日韩福利电影在线观看| 日本高清成人免费播放| 中文字幕在线不卡国产视频| 激情五月激情综合网| 日韩一区二区三区在线观看| 午夜精品在线视频一区| 91成人看片片| 亚洲一区二区三区在线看| 成人国产视频在线观看| 欧美国产精品中文字幕| 国产一区二区三区免费| 欧美精品一区二区在线观看| 男人的天堂亚洲一区| 欧美一区二区日韩| 奇米777欧美一区二区| 欧美日韩国产一二三| 亚洲成av人片一区二区梦乃| 日本韩国欧美国产| 亚洲无线码一区二区三区| 在线观看一区二区精品视频| 亚洲精品成a人| 91搞黄在线观看| 亚洲午夜日本在线观看| 欧美视频在线观看一区| 亚洲国产毛片aaaaa无费看| 欧美最猛性xxxxx直播| 亚洲影院久久精品| 欧美日韩国产一二三| 日本三级亚洲精品| 欧美精品一区二| 国产激情视频一区二区三区欧美| 国产视频亚洲色图| voyeur盗摄精品| 亚洲在线观看免费视频| 欧美精选在线播放| 六月丁香婷婷色狠狠久久| 欧美精品一区二区蜜臀亚洲| 高清av一区二区| 亚洲欧洲中文日韩久久av乱码| 91福利国产精品| 久久狠狠亚洲综合| 中文字幕成人在线观看| 一本大道av伊人久久综合| 亚洲成人动漫精品| 精品国产伦一区二区三区观看方式| 风间由美性色一区二区三区| 亚洲欧美日韩中文播放 | 精品一区二区免费看| 国产亚洲精久久久久久| 色综合久久久久综合体| 日韩电影在线观看电影| 亚洲国产经典视频| 欧美日韩综合一区| 国产精品88888| 亚洲一二三四区不卡| 欧美一级二级三级蜜桃| aaa欧美色吧激情视频| 视频一区二区欧美| 国产精品丝袜一区| 欧美日韩午夜影院| 成人午夜电影久久影院| 图片区小说区区亚洲影院| 国产欧美日本一区二区三区| 91成人免费在线| 粉嫩绯色av一区二区在线观看| 亚洲黄色小视频| 久久九九久久九九| 欧美特级限制片免费在线观看| 国产精品99久久久久久有的能看| 亚洲同性gay激情无套| 精品国产一区二区三区久久久蜜月 | 五月婷婷另类国产| 国产精品青草综合久久久久99| 欧美日本精品一区二区三区| 国产不卡视频一区| 日本在线不卡视频| 亚洲图片另类小说| 国产精品日韩成人| 亚洲精品在线观看网站| 欧美三级韩国三级日本三斤 | 欧美国产视频在线| 欧美一卡在线观看| 欧美亚洲日本国产| 一本大道综合伊人精品热热| 国产一区二区女| 久久不见久久见中文字幕免费| 亚洲一区二区成人在线观看| 中文字幕一区二区视频| 国产午夜精品久久| 久久午夜羞羞影院免费观看| 欧美一级黄色录像| 欧美日韩国产另类一区| 色欧美乱欧美15图片| 9人人澡人人爽人人精品| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 粉嫩aⅴ一区二区三区四区 | 久久久九九九九| 精品国产乱码久久久久久久| 日韩网站在线看片你懂的| 欧美日韩成人在线一区| 8x福利精品第一导航| 欧美精品九九99久久| 欧美福利一区二区| 91精品国产色综合久久不卡电影| 欧美日韩精品欧美日韩精品一| 欧日韩精品视频| 欧美丰满嫩嫩电影| 日韩一级二级三级| 日韩免费一区二区| 国产亚洲欧美色| 中文字幕精品在线不卡| 亚洲欧洲成人自拍| 亚洲精品免费在线| 日韩一区欧美二区| 另类欧美日韩国产在线| 国产高清精品网站| 成人av在线网| 欧美亚洲动漫精品| 欧美卡1卡2卡| 久久日韩粉嫩一区二区三区| 久久九九全国免费| 洋洋成人永久网站入口| 亚洲国产日韩精品| 韩国女主播一区| 99久久久国产精品免费蜜臀| 色综合久久久久久久久| 91精品国产91热久久久做人人| 日韩午夜激情视频| 国产精品私人自拍| 日产国产欧美视频一区精品| 久久99日本精品| 成人少妇影院yyyy| 欧美日本精品一区二区三区| 2021中文字幕一区亚洲| 国产精品福利一区二区三区| 亚洲综合男人的天堂| 国内偷窥港台综合视频在线播放| 不卡在线观看av| 欧美色综合久久| 久久精品日韩一区二区三区| 亚洲欧美一区二区三区国产精品 | 丁香婷婷综合网| 欧洲人成人精品| 26uuu久久天堂性欧美| 亚洲欧洲日韩女同| 久久成人精品无人区| 色域天天综合网| 精品日韩在线观看| 一区二区不卡在线播放| 国产一区二区三区免费在线观看| 在线观看三级视频欧美| 精品美女一区二区| 亚洲午夜电影在线观看| 国产·精品毛片| 欧美一区日韩一区| 亚洲精品免费在线播放| 岛国av在线一区| 精品三级在线观看| 午夜精品成人在线视频| 99精品欧美一区二区三区小说 | 激情都市一区二区| 精品视频999| 18成人在线观看| 国产精品自产自拍| 欧美xfplay| 日韩二区三区四区| 欧美在线观看18| 日韩美女视频19| 成人激情午夜影院| 久久亚洲综合色一区二区三区 | 日韩精品一区国产麻豆| 亚洲国产日日夜夜| 91国模大尺度私拍在线视频| 国产精品久久久久久久蜜臀| 韩国一区二区三区| 久久青草欧美一区二区三区| 秋霞影院一区二区| 91精品国产入口在线| 无吗不卡中文字幕| 在线综合亚洲欧美在线视频| 午夜伦欧美伦电影理论片| 欧美日韩一本到| 青青草国产成人99久久| 9191久久久久久久久久久| 亚洲成国产人片在线观看|