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

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

?? rtl_core.c

?? fsmlabs的real time linux的內(nèi)核
?? C
?? 第 1 頁 / 共 2 頁
字號:
	rtl_spin_lock_irqsave(&rtl_global.hard_irq_controller_lock, flags);	for (i=0; i < IRQ_ARRAY_SIZE; i++) {		irqs = rtl_global.pending[i] & rtl_global.soft_enabled[i];		if (!irqs)			continue;		j = ffz(~irqs);		clear_bit(j, &rtl_global.pending[i]);		rtl_spin_unlock_irqrestore(&rtl_global.hard_irq_controller_lock, flags);		return pi_toirq (j, i);	}	rtl_spin_unlock_irqrestore(&rtl_global.hard_irq_controller_lock, flags);	return IRQ_NOT_VALID;}void rtl_soft_cli(void){	DeclareAndInit(cpu_id);	if ( L_TEST(l_ienable) )		last_cli[cpu_id] = (unsigned long)__builtin_return_address(0);	L_CLEAR(l_ienable);}void rtl_soft_sti_no_emulation(void){	DeclareAndInit(cpu_id);	if ( !L_TEST(l_ienable) )		last_cli[cpu_id] = 0;	L_SET(l_ienable);}void rtl_process_pending(void){	int irq = 0;	int last_irq = 0;	DeclareAndInit(cpu_id);	rtl_soft_cli(); /*disable soft interrupts !*/       	do{		irq = IRQ_NOT_VALID;	       	G_CLEAR(g_pend_since_sti);	       	L_CLEAR(l_pend_since_sti);#ifdef __LOCAL_IRQS__	       	while ( (irq = get_lpended_irq()) != IRQ_NOT_VALID ) {#ifdef DEBUG_PENDING			local_pending = 0;#endif /* DEBUG_PENDING */			soft_dispatch_local(irq);		}#endif#ifdef __RTL_LOCALIRQS__		if (!test_bit(cpu_id, &rtl_reserved_cpumask))#endif		{			while ( (irq = get_gpended_irq()) != IRQ_NOT_VALID )			{				last_irq = irq;#ifdef DEBUG_PENDING				global_pending = 0;#endif /* DEBUG_PENDING */				soft_dispatch_global(irq);			}		}#ifdef __RTL_LOCALIRQS__		}while(irq != IRQ_NOT_VALID || (!test_bit(cpu_id, &rtl_reserved_cpumask) && G_TEST(g_pend_since_sti)) || L_TEST(l_pend_since_sti));#else	}while(irq != IRQ_NOT_VALID || G_TEST(g_pend_since_sti) || L_TEST(l_pend_since_sti));#endif#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0)	/* process any bottom halves */	if (  softirq_active(cpu_id) & softirq_mask(cpu_id) )		do_softirq();#endif		}void rtl_soft_sti(void){	DeclareAndInit(cpu_id);	/*debug_test_enabled("rtl_soft_sti");*/	if ( L_TEST(l_pend_since_sti) || G_TEST(g_pend_since_sti)#if LINUX_VERSION_CODE >= 0x020300	   || (softirq_active(cpu_id) & softirq_mask(cpu_id) )#endif	   )		rtl_process_pending();	rtl_soft_sti_no_emulation();}void rtl_soft_save_flags(unsigned long *x){	DeclareAndInit(cpu_id);	*x = (L_TEST(l_ienable)? ARCH_DEFINED_ENABLE: ARCH_DEFINED_DISABLE);}void rtl_soft_restore_flags(unsigned long x){	if(x == ARCH_DEFINED_ENABLE)rtl_soft_sti();	else rtl_soft_cli();}void rtl_soft_save_and_cli(unsigned long *x){	extern unsigned long last_cli[NR_CPUS];	DeclareAndInit(cpu_id);		rtl_soft_save_flags(x);	rtl_soft_cli();	/*	 * If we make a sti->cli transition record the	 * caller so we have some useful data instead of the	 * address of this function.	 *   -- Cort	 */	if ( (ARCH_DEFINED_ENABLE && (*x & ARCH_DEFINED_ENABLE))	     || (!ARCH_DEFINED_ENABLE && !(*x & ARCH_DEFINED_DISABLE)) )		last_cli[cpu_id] = (ulong)__builtin_return_address(0);}void rtl_soft_local_irq_save(unsigned long *x){	rtl_soft_save_flags(x);	rtl_soft_cli();}void rtl_soft_local_irq_restore(unsigned long x){	rtl_soft_restore_flags(x);}void rtl_virt_disable(unsigned int irq){	G_DISABLE(irq);}void rtl_virt_enable(unsigned int irq){	rtl_irqstate_t flags;	rtl_no_interrupts(flags);		G_ENABLED(irq);	if(!G_ISPEND(irq))	{		rtl_hard_enable_irq(irq);		rtl_restore_interrupts(flags);	}	else	{		HardDeclareAndInit(cpu_id);		rtl_restore_interrupts(flags);		if( L_TEST(l_ienable))			__sti(); /* emulate the bastard */	}}/* these are exported so that they can be called by rt drivers */void rtl_global_pend_irq(int ix) { G_PEND(ix); G_SET(g_pend_since_sti); }int rtl_global_ispending_irq(int ix) { return G_ISPEND(ix); }void rtl_hard_enable_irq(unsigned int ix){	rtl_irqstate_t flags;	rtl_no_interrupts (flags);	rtl_spin_lock(&rtl_global.hard_irq_controller_lock);	rtl_irq_controller_enable(ix);	rtl_spin_unlock(&rtl_global.hard_irq_controller_lock);	rtl_restore_interrupts (flags);}void rtl_hard_disable_irq(unsigned int ix){	rtl_irqstate_t flags;	rtl_no_interrupts (flags);	rtl_spin_lock(&rtl_global.hard_irq_controller_lock);	rtl_irq_controller_disable(ix);	rtl_spin_unlock(&rtl_global.hard_irq_controller_lock);	rtl_restore_interrupts (flags);}/* these are used by schedulers to make sure that Linux interrupts   do not advance and delay RT tasks  Both  need to be called with irqs disabled */void rtl_make_rt_system_active(void){	HardDeclareAndInit(cpu_id);	L_SET(l_busy);}void rtl_make_rt_system_idle(void){	HardDeclareAndInit(cpu_id);        L_CLEAR(l_busy);}unsigned int rtl_rt_system_is_idle(void){	HardDeclareAndInit(cpu_id);        return !L_TEST(l_busy);}void rtl_make_psc_active(void){	HardDeclareAndInit(cpu_id);	L_SET(l_psc_active);}void rtl_make_psc_inactive(void){	HardDeclareAndInit(cpu_id);        L_CLEAR(l_psc_active);}int rtl_is_psc_active(void){	HardDeclareAndInit(cpu_id);        return L_TEST(l_psc_active);}/* requesting and freeing rt interrupts *//* TODO resolve the smp synchronization problem here */int rtl_request_global_irq(unsigned int irq, 			   unsigned int (*handler)(unsigned int, struct pt_regs *)){	if (!G_TEST_RTH(irq))	{		rtl_global_handlers[irq].handler =handler;		G_SET_RTH(irq);		mb();		if(rtl_global_handlers[irq].handler == handler)		{			rtl_hard_enable_irq (irq);			return 0;		}	}	return -EBUSY;}int rtl_free_global_irq(unsigned int irq ){	if (!G_TEST_AND_CLEAR_RTH(irq))		return -EINVAL;	return 0;	/* don't need to clear the handler, because it will never	   be invoked -- see rtl_intercept. If we wanted to clear the handler	   we would have a problem with synchronization in the smp case */}MODULE_AUTHOR("FSMLabs <support@fsmlabs.com>");MODULE_DESCRIPTION("RTLinux Main Module");int quiet;MODULE_PARM(quiet, "i");int init_module(void){	int ret;	if ( arch_takeover() )	{		printk("arch_takeover failed\n");		return -1;	}	if ( !quiet )		printk("RTLinux Extensions Loaded (http://www.fsmlabs.com/)\n");	ret = rtl_printf_init();	if (ret < 0)		return ret;	rtl_soft_sti(); 	rtlinux_suspend_linux_init();	return 0;}void cleanup_module(void){	HardDeclareAndInit(cpu_id);	rtl_printf_cleanup();	/*	 * Process any pending interrupts, _hard_ disable	 * then go on.  This way, we don't get any interrupts	 * while we're vulnerable and giving up the architecture.	 *   -- Cort	 *	 *   This works for the current processor only -- Michael	 */	rtl_hard_cli();	rtl_soft_sti_no_emulation();	do {		rtl_hard_sti();		rtl_process_pending();		rtl_hard_cli();	} while ( G_TEST(g_pend_since_sti) || L_TEST(l_pend_since_sti));	arch_giveup();	rtlinux_suspend_linux_cleanup();	rtl_hard_sti();}spinlock_t debug_lock = SPIN_LOCK_UNLOCKED;void rtl_debug(void){	int i;	unsigned long flags, xxx_last_cli[NR_CPUS];	memcpy( (void *)xxx_last_cli, (void *)last_cli, sizeof(last_cli) );	#define WIDTH(x) ((int)(sizeof(x)*2))		rtl_spin_lock(&debug_lock);	rtl_hard_save_flags(flags);	printk( "RTL: cpu %d\n", rtl_getcpuid() );	if ( ARCH_DEFINED_ENABLE == 0 )		printk( "RTL: hard flags %0*lx %s\n", WIDTH(flags), flags,			(flags&ARCH_DEFINED_DISABLE) ? "disabled" : "enabled" );	else		printk( "RTL: hard flags %0*lx %s\n", WIDTH(flags), flags,			(flags&ARCH_DEFINED_ENABLE) ? "enabled" : "disabled" );			printk( "RTL: global flags %0*lx %s%s\n",		WIDTH(rtl_global.flags), rtl_global.flags,		((rtl_global.flags>>g_pend_since_sti)&1) ? "pend_since_sti " : "",		((rtl_global.flags>>g_initializing)&1) ? "initializing " : "");	printk( "RTL: global pending " );	for ( i = 0; i < IRQ_ARRAY_SIZE; i++ )		printk( "%0*lx ", WIDTH(rtl_global.pending[i]),					rtl_global.pending[i] );	printk("\n");	printk( "RTL: global enabled " );	for ( i = 0; i < IRQ_ARRAY_SIZE; i++ )		printk( "%0*lx ", WIDTH(rtl_global.soft_enabled[i]),					rtl_global.soft_enabled[i] );	printk( "\n" );	for ( i = 0 ; i < rtl_num_cpus(); i++ )	{		int cpu = cpu_logical_map (i);		printk( "RTL: cpu%d "#ifdef __LOCAL_IRQS__			"local pending %08x "#endif						"flags: %08x %s%s%s last_cli: %0*lx\n", cpu,			rtl_local[cpu].flags,#ifdef __LOCAL_IRQS__			rtl_local[cpu].pending,#endif						((rtl_local[cpu].flags>>l_ienable)&1)?"ienabled ":"disabled ",			((rtl_local[cpu].flags>>l_pend_since_sti)&1)?"pend_since_sti ":"",			((rtl_local[cpu].flags>>l_busy)&1)?"busy":"",			WIDTH(xxx_last_cli[i]), xxx_last_cli[i] );	}	rtl_spin_unlock(&debug_lock);#undef WIDTH	}void rtl_soft_irq_type(int unused, void *junk, struct pt_regs *garbage){	printk("rtl_soft_irq_type(): shouldn't have been called!\n");}/* TODO VY: needs some synchronization here. Doesn't request_irq also   have a problem? */int rtl_get_soft_irq (void (*handler) (int, void *, struct pt_regs *),                     const char *devname){	int i;	int debug = 0;	for (i = RTL_NR_IRQS - 1; i > 15; i--)	{		if ( !(debug = request_irq (i, handler, 0, devname, 0)) )		{			rtl_virt_enable(i);			/* This needs to be done this way since having the 'continue'			 * below causes egcs-2.90.29 with target MIPS (host PPC)			 * to emit code that will execute both the true _and_ the			 * false case of the above if.			 *  -- Cort			 */			goto bad_mips_gcc;		}	}	printk("RTL_GET_SOFT_IRQ %d: request=%d\n", i, debug);	return -1;bad_mips_gcc:	return i;}/* compatibility irq handler table */#include <asm/rt_irq.h>typedef void (*RTL_V1_HANDLER)(void);RTL_V1_HANDLER rtl_v1_irq[NR_IRQS];extern unsigned int rtl_compat_irq_handler(unsigned int irq, struct pt_regs *regs){	rtl_v1_irq[irq]();	rtl_hard_enable_irq(irq);	return 0;}int request_RTirq(unsigned   int   irq,   void (*handler)(void)){	int ret;	rtl_v1_irq[irq] = handler;	ret = rtl_request_global_irq(irq, rtl_compat_irq_handler);	if (ret)		return ret;	rtl_hard_enable_irq(irq);	return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩视频第一区| 久久99深爱久久99精品| 91女厕偷拍女厕偷拍高清| 国产精品日产欧美久久久久| 国产成人激情av| 欧美经典一区二区| 91麻豆自制传媒国产之光| 亚洲黄色小视频| 欧美精品免费视频| 久久97超碰国产精品超碰| 精品国产人成亚洲区| 国产精品1024| 亚洲欧美日韩电影| 欧美色大人视频| 美女一区二区久久| 国产精品久久久久久久久久久免费看| 成人精品国产一区二区4080| 亚洲欧美日韩一区| 91精品国产色综合久久不卡电影 | 久久不见久久见免费视频1| 精品久久久久一区| 97精品久久久午夜一区二区三区| 亚洲欧美经典视频| 欧美一级日韩一级| 粉嫩蜜臀av国产精品网站| 亚洲精品国产精品乱码不99| 91精品国产91久久综合桃花| 国内成人自拍视频| 亚洲欧美日韩久久| 日韩精品资源二区在线| 成人激情开心网| 日韩影视精彩在线| 国产精品福利一区| 欧美一区二区三区在线观看| 白白色亚洲国产精品| 婷婷成人激情在线网| 欧美激情一区二区三区不卡| 欧美美女bb生活片| 国产69精品久久777的优势| 亚洲一二三四在线观看| 精品美女一区二区| 欧美中文字幕一区二区三区| 国产一区二区0| 日韩电影一区二区三区| 亚洲视频综合在线| 久久久久久久久久久99999| 欧美亚男人的天堂| 成人av免费在线观看| 男男视频亚洲欧美| 亚洲一线二线三线久久久| 国产亚洲视频系列| 日韩三级中文字幕| 欧美日韩一级黄| 99re在线精品| 国产精品91一区二区| 日韩精品电影在线观看| 亚洲精品日日夜夜| 国产精品视频免费| 久久久久久久久久电影| 欧美一区日韩一区| 欧美日韩亚洲国产综合| 91麻豆免费看| 成人美女在线观看| 国产成人在线看| 精品影视av免费| 免费一级片91| 日韩在线一区二区三区| 亚洲成人av在线电影| 亚洲欧美另类小说视频| 国产精品久久久久婷婷二区次| 久久综合久久综合久久| 日韩欧美精品在线| 91精品国产欧美一区二区成人| 欧美三级视频在线播放| 日本韩国欧美在线| 91国偷自产一区二区三区观看| 成人av综合一区| 国产**成人网毛片九色 | 丝袜国产日韩另类美女| 亚洲一区二区三区四区在线免费观看| 亚洲欧美在线观看| 国产精品国产三级国产a| 亚洲欧洲日韩在线| 中文字幕在线观看一区二区| 国产精品进线69影院| 国产精品久久久久国产精品日日 | 亚洲视频电影在线| 亚洲码国产岛国毛片在线| 一区二区成人在线视频| 亚洲成人中文在线| 日韩高清在线观看| 激情六月婷婷综合| 成人性视频免费网站| 99精品国产一区二区三区不卡| 色美美综合视频| 在线不卡一区二区| 精品少妇一区二区| 国产精品拍天天在线| 亚洲欧美成aⅴ人在线观看| 亚洲在线一区二区三区| 天堂va蜜桃一区二区三区漫画版| 水野朝阳av一区二区三区| 久久se这里有精品| 成人永久aaa| 欧美视频在线观看一区二区| 日韩西西人体444www| 久久久久久亚洲综合| 亚洲天天做日日做天天谢日日欢 | 精品欧美一区二区三区精品久久| 精品99一区二区| 国产精品免费av| 亚洲图片激情小说| 天天免费综合色| 国产成人av福利| 91黄视频在线| 精品国产伦一区二区三区观看方式 | 国产精品久久久久影院| 午夜精品视频一区| 成人在线视频一区| 7777精品伊人久久久大香线蕉经典版下载 | 91在线视频免费91| 91精品国产福利在线观看| 国产网红主播福利一区二区| 一区二区三区四区在线免费观看| 欧美96一区二区免费视频| 成人精品一区二区三区中文字幕| 欧美午夜宅男影院| 国产亚洲综合av| 同产精品九九九| 99久久精品久久久久久清纯| 日韩美女一区二区三区四区| 1000部国产精品成人观看| 美日韩一级片在线观看| 色综合久久久久综合体| 亚洲精品一区二区三区精华液| 亚洲免费观看高清| 国产精品综合久久| 欧美精品乱码久久久久久按摩 | 色婷婷综合激情| 久久久久久一级片| 日本网站在线观看一区二区三区 | 国产丶欧美丶日本不卡视频| 欧美理论片在线| 亚洲欧美色综合| 风间由美一区二区av101| 日韩欧美久久一区| 亚洲成人在线观看视频| 99久精品国产| 欧美激情一二三区| 国产剧情av麻豆香蕉精品| 91精品一区二区三区在线观看| 亚洲日韩欧美一区二区在线| 国产激情精品久久久第一区二区 | 亚洲第一精品在线| 色婷婷激情一区二区三区| 国产精品污污网站在线观看| 国模冰冰炮一区二区| 日韩一级黄色大片| 日本中文字幕一区二区有限公司| 91福利在线导航| 中文字幕人成不卡一区| 成人一区二区三区| 国产精品久线在线观看| 国产成人av在线影院| 国产欧美精品日韩区二区麻豆天美| 日韩成人av影视| 欧美猛男gaygay网站| 五月天久久比比资源色| 欧美片网站yy| 奇米精品一区二区三区在线观看| 日韩欧美中文一区二区| 久久国产婷婷国产香蕉| 久久综合久久综合久久| 国产91精品在线观看| 国产精品美女久久久久久久久| 成熟亚洲日本毛茸茸凸凹| 国产精品婷婷午夜在线观看| 99精品欧美一区二区三区综合在线| 国产精品萝li| 欧美午夜精品免费| 首页国产欧美久久| 日韩一级片在线播放| 国内精品伊人久久久久av影院| 久久综合成人精品亚洲另类欧美 | www久久精品| 成熟亚洲日本毛茸茸凸凹| 国产精品久久久久久久第一福利 | 337p亚洲精品色噜噜| 日本成人在线不卡视频| 91精品在线一区二区| 欧美aaaaaa午夜精品| 国产日韩欧美一区二区三区综合 | 麻豆成人免费电影| 在线亚洲一区观看| 奇米色777欧美一区二区| 日韩精品一区二区三区老鸭窝| 精品影视av免费| 亚洲欧美色图小说| 欧美色手机在线观看| 日韩精品一区第一页|