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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? rtl_core.c

?? fsmlabs的real time linux的內(nèi)核
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* * (C) Finite State Machine Labs Inc. 1999-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/kernel.h>#include <linux/version.h>#include <linux/errno.h>#include <linux/slab.h>#include <linux/timex.h>#include <linux/spinlock.h>#include <linux/module.h>#include <linux/interrupt.h>#include <linux/console.h>#include <linux/irq.h>#include <linux/config.h>#include <asm/uaccess.h>#include <asm/system.h>#include <asm/irq.h>#include <asm/segment.h>#include <asm/ptrace.h>#include <arch/constants.h>#include <rtl_conf.h>#include <rtl_printf.h>#include <rtl_core.h>#include <rtl_sync.h>#include <rtl.h>#include <reserve_cpu.h>#include <rtl_debug.h>#include <linux/irq.h>MODULE_LICENSE("GPL v2");/* * Thanks to the wonders of EXTRAVERSION in the kernel, poor naming,  * bad Linux planning and plagues of frogs we have to have this and can't * trigger off KERNEL_VERSION() or the like. *    -- Cort */#if 0#ifndef softirq_active#define softirq_active(x) (softirq_state[x].active)#endif#ifndef softirq_mask#define softirq_mask(x) (softirq_state[x].mask)#endif#else#ifndef softirq_active#define softirq_active(x) (softirq_pending(x))#endif#ifndef softirq_mask#define softirq_mask(x) (1)#endif#endif/* do checks for and print errors when we stop handling interrupts */#undef DEBUG_PENDING#ifdef DEBUG_PENDINGstatic unsigned long global_pending = 0;#ifdef __LOCAL_IRQS__static unsigned long local_pending = 0;#endif /* __LOCAL_IRQS__ */#endif /* DEBUG_PENDING */void rtl_free_soft_irq(unsigned int irq){	free_irq(irq, 0);}void rtl_hard_disable_irq(unsigned int ix);void rtl_debug(void);static inline void debug_test_enabled(char *s);unsigned long last_cli[NR_CPUS];#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96)/* * Workaround a bug that causes bad accesses when doing * __builtin_return_address() from leaf functions so we make * those functions non-leaf. *   -- Cort */ void non_leaf(void) {}#define rtl_builtin_return_address(X) ({ 		\	void *i = __builtin_return_address(X);	\	non_leaf();					\	i;						\})#define __builtin_return_address(x) rtl_builtin_return_address(x)#endif /* gcc bug */#ifdef CONFIG_RTL_TRACER#ifndef rtl_tracevoid rtl_trace_default(int event_id, long event_data, void * eip) { }void (*rtl_trace)(int event_id, long event_data, void * eip) = rtl_trace_default;void rtl_trace2(int event_id, long event_data) { rtl_trace(event_id, event_data, __builtin_return_address(0)); }#endif#endif/* unsigned rtl_reserved_cpumask = 0; */void conpr(const char *s){	long flags;	static spinlock_t rtl_conpr_lock = SPIN_LOCK_UNLOCKED;	struct console *c;	int len = strlen(s);	rtl_hard_savef_and_cli(flags);	rtl_spin_lock(&rtl_conpr_lock);	c = console_drivers;	while(c) {		if ((c->flags & CON_ENABLED) && c->write)			c->write(c, s, len);		c = c->next;	}	rtl_spin_unlock(&rtl_conpr_lock);	rtl_hard_restore_flags(flags);}void conprn(const unsigned int hexnum){	int i;	unsigned int d;	unsigned int n = hexnum;    	char s[10];	s[9] = 0;	s[8] = ' ';	for (i=7; i>=0; i--) {		d = n % 16;		if (d < 10) {			d += '0';		} else {			d += 'a' - 10;		}		s[i] = d; 		n = n / 16;	}    	conpr(s);}/* assuming 255 global irqs and 31 max local vectors    On the x86 we only have local irqs when we are smp.   But in PowerPC and other we may have local irqs from   on chip timers and other advanced technologies   *//* bit positions for flags, constants, and macros for global structure */#define IRQ_NOT_VALID -1#define IRQ_ARRAY_SIZE ((256/8)/sizeof(ulong)) /*256 global irqs */#define IRQ_ZINIT {0}#if BITS_PER_LONG == 32#define IRQ_NZINIT {~0x0,~0x0,~0x0,~0x0,~0x0,~0x0,~0x0,~0x0}#else#define IRQ_NZINIT {~0x0,~0x0,~0x0,~0x0}#endif#if BITS_PER_LONG == 32#define irq_toi(x)  ((x>>5)&7)#define irq_top(x)  ((x)& 0x1fUL)#else#define irq_toi(x)  ((x>>6)&15)#define irq_top(x)  ((x)& 0x3fUL)#endif#define pi_toirq(p,i) ( (p) + ((i)*BITS_PER_LONG))#define G_PEND(f) set_bit(irq_top(f),&rtl_global.pending[irq_toi(f)])#define G_UNPEND(f) clear_bit(irq_top(f),&rtl_global.pending[irq_toi(f)])#define G_ISPEND(f) test_bit(irq_top(f),&rtl_global.pending[irq_toi(f)])/* clear and set global enabled irq bits */#define G_ENABLED(f) set_bit(irq_top(f),&rtl_global.soft_enabled[irq_toi(f)])#define G_DISABLE(f) clear_bit(irq_top(f),&rtl_global.soft_enabled[irq_toi(f)])#define G_ISENABLED(f) test_bit(irq_top(f),&rtl_global.soft_enabled[irq_toi(f)])/* clear and set real time handlers (RealTimeHandlers) */#define G_SET_RTH(f) set_bit(irq_top(f),&rtl_global.rtirq[irq_toi(f)])#define G_CLEAR_RTH(f) clear_bit(irq_top(f),&rtl_global.rtirq[irq_toi(f)])#define G_TEST_RTH(f) test_bit(irq_top(f),&rtl_global.rtirq[irq_toi(f)])#define G_TEST_AND_SET_RTH(f) test_and_set_bit(irq_top(f),&rtl_global.rtirq[irq_toi(f)])#define G_TEST_AND_CLEAR_RTH(f) test_and_clear_bit(irq_top(f),&rtl_global.rtirq[irq_toi(f)])/* global flags */#define g_rtl_started 0#define g_pend_since_sti 1#define g_initializing 2#define g_initialized 3#define G_SET(f) set_bit(f,&rtl_global.flags)#define G_CLEAR(f) clear_bit(f,&rtl_global.flags)#define G_TEST(f) test_bit(f,&rtl_global.flags)#define G_TEST_AND_SET(f) test_and_set_bit(f,&rtl_global.flags)#define G_TEST_AND_CLEAR(f) test_and_clear_bit(f,&rtl_global.flags)/* Bit positions of flags for local structure and macros   for operating on them */#define l_idle 0#define l_ienable 1#define l_pend_since_sti 2#define l_busy 3#define l_psc_active 4#define L_SET(f) set_bit(f,&rtl_local[cpu_id].flags)#define L_CLEAR(f) clear_bit(f,&rtl_local[cpu_id].flags)#define L_TEST(f) test_bit(f,&rtl_local[cpu_id].flags)#define L_TEST_AND_SET(f) test_and_set_bit(f,&rtl_local[cpu_id].flags)#define L_PEND(f) set_bit(f,&rtl_local[cpu_id].pending)#define L_UNPEND(f) clear_bit(f,&rtl_local[cpu_id].pending)#define L_ISPEND(f) test_bit(f,&rtl_local[cpu_id].pending)#define L_SET_RTH(f) set_bit(f,&rtl_local[cpu_id].rtirq)#define L_CLEAR_RTH(f) clear_bit(f,&rtl_local[cpu_id].rtirq)#define L_TEST_RTH(f) test_bit(f,&rtl_local[cpu_id].rtirq)#define L_TEST_AND_SET_RTH(f) test_and_set_bit(f,&rtl_local[cpu_id].rtirq)#define L_TEST_AND_CLEAR_RTH(f) test_and_clear_bit(f,&rtl_local[cpu_id].rtirq)#define dispatch_rtl_handler(irq,r) rtl_global_handlers[irq].handler(irq,r)/* TODO soft smp_processor_id doesn't work here???? -- Michael */#define DeclareAndInit(cpu_id)  unsigned int cpu_id = rtl_getcpuid()#define HardDeclareAndInit(cpu_id)  unsigned int cpu_id = rtl_getcpuid()/* The basic control data structures local and global*/struct rtl_local rtl_local[NR_CPUS];struct rtl_global{	spinlock_t hard_irq_controller_lock;	unsigned long flags;	unsigned long pending[IRQ_ARRAY_SIZE];	unsigned long soft_enabled[IRQ_ARRAY_SIZE];	unsigned long rtirq[IRQ_ARRAY_SIZE];};struct rtl_global rtl_global ={ SPIN_LOCK_UNLOCKED,0,IRQ_ZINIT,IRQ_NZINIT,IRQ_ZINIT} ;/* RTLinux interrupts */struct rtl_global_handlers{        unsigned int (*handler)(unsigned int irq, struct pt_regs *r);}rtl_global_handlers[IRQ_MAX_COUNT];#ifdef __LOCAL_IRQS__void rtl_local_pend_vec(int vector,int cpu_id){	int i = VECTOR_TO_LOCAL_PND(vector);	L_PEND(i);	L_SET(l_pend_since_sti);}int rtl_local_ispending_irq(int ix){ 	HardDeclareAndInit(cpu_id);	return L_ISPEND(ix);}#endifextern void * rtl_code[];#include "arch/arch.h"static inline void debug_test_enabled(char *s){	unsigned long flags;	rtl_hard_save_flags(flags);	if ( (ARCH_DEFINED_ENABLE && !(flags & ARCH_DEFINED_ENABLE))	     || (!ARCH_DEFINED_ENABLE && (flags & ARCH_DEFINED_DISABLE)) )	{		do_first(10) {			rtl_printf("%s: intrs hard disabled! called from %p\n",\			   s, __builtin_return_address(0));		}	}}/* rtl_intercept intercepts global interrupts */#define RUN_LINUX_HANDLER(irq) (G_ISPEND(irq) && !L_TEST(l_busy)\       	&& L_TEST(l_ienable) && G_ISENABLED(irq))intercept_t rtl_intercept(MACHDEPREGS regs){	int irq;	HardDeclareAndInit(cpu_id);		rtl_spin_lock(&rtl_global.hard_irq_controller_lock);	if ((irq = rtl_irq_controller_get_irq(regs)) != -1)	{		rtl_trace (RTL_TRACE_INTERCEPT, irq, (void *) instruction_pointer(MACHDEPREGS_PTR(regs)));		rtl_irq_controller_ack(irq); /* may also mask, if needed */				if(G_TEST_RTH(irq)){ /* this is a RT irq */			/* if RT wants to share it pends */			rtl_spin_unlock(&rtl_global.hard_irq_controller_lock);			dispatch_rtl_handler(irq,MACHDEPREGS_PTR(regs));			rtl_spin_lock(&rtl_global.hard_irq_controller_lock);		} else {			G_PEND(irq);			G_SET(g_pend_since_sti);		}		if(RUN_LINUX_HANDLER(irq))		{			/* unpend so dispatch doesn't dispatch 2 times*/			G_UNPEND(irq);			rtl_soft_cli(); /* disable local soft interrupts */			G_DISABLE(irq); /* disable this irq */			rtl_spin_unlock(&rtl_global.hard_irq_controller_lock);			rtl_hard_sti();#ifdef DEBUG_PENDING			global_pending = 0;#endif /* DEBUG_PENDING */			dispatch_linux_irq(MACHDEPREGS_PTR(regs),irq);			rtl_trace2 (RTL_TRACE_INTERCEPT_EXIT, irq);			RETURN_FROM_INTERRUPT_LINUX; /* goes via ret_from_intr */		}#ifdef DEBUG_PENDING		/*		 * If a Linux interrupt has been pended, and we haven't		 * handled it, increment the global pending count.		 *  -- Cort Dougan <cort@fsmlabs.com		 */		if ( G_ISPEND(irq) && (global_pending++ > 20) )		{			rtl_hard_cli();			printk("Too many global intrs pended irq %d from %08lx\n",			       irq, instruction_pointer(regs));			printk("didn't run handler because:\n"			       "ispend %d !l_busy %d ienable %d genable %d\n",			       G_ISPEND(irq), !L_TEST(l_busy),			       L_TEST(l_ienable), G_ISENABLED(irq) );			rtl_debug();			while(1);		}#endif /* DEBUG_PENDING */				/* get here if irq==-1 or if otherwise can't run linux handler */	}	rtl_spin_unlock(&rtl_global.hard_irq_controller_lock);	rtl_trace2 (RTL_TRACE_INTERCEPT_EXIT, irq);	RETURN_FROM_INTERRUPT;}#ifdef __LOCAL_IRQS__static inline unsigned int get_lpended_irq(void){	int i;	DeclareAndInit(cpu_id); /* only called in Linux context */	if(rtl_local[cpu_id].pending){		i = ffz(~rtl_local[cpu_id].pending);		clear_bit(i,&rtl_local[cpu_id].pending);		i = LOCAL_PND_TO_VECTOR(i);	}	else i = IRQ_NOT_VALID;	return i ;}intercept_t rtl_local_intercept(MACHDEPREGS regs){	int pnd;	HardDeclareAndInit(cpu_id);	/* no lock needed because we are already hard cli and only	   use local per-cpu structures. The rtl_irq_controller	   operations MUST vector to local only hardware or must	   use spinlocks */	pnd = MACHDEPREGS_TO_PND(regs);	rtl_trace (RTL_TRACE_LOCAL_INTERCEPT, LOCAL_PND_TO_VECTOR(pnd), (void *) instruction_pointer(MACHDEPREGS_PTR(regs)));	rtl_local_irq_controller_ack();	if(L_TEST_RTH(pnd)){ /* this is a RT irq */		dispatch_rtl_local_handler(pnd,MACHDEPREGS_PTR(regs));/* if RT wants to share it pends */	}	else{		L_PEND(pnd);		L_SET(l_pend_since_sti);	}		if(!L_ISPEND(pnd) || L_TEST(l_busy) || !L_TEST(l_ienable) )	{		rtl_trace2 (RTL_TRACE_LOCAL_INTERCEPT_EXIT, LOCAL_PND_TO_VECTOR(pnd));#ifdef DEBUG_PENDING		if ( L_ISPEND(pnd) && (local_pending++ > 20) )		{			printk("Too many local intrs pended pnd %d\n", pnd);			rtl_debug();			rtl_soft_sti();			while(1);		}#endif /* DEBUG_PENDING */				RETURN_FROM_LOCAL;	}	else	{		L_UNPEND(pnd); /* yes it is stupid, see above */		rtl_soft_cli(); /* disable local soft interrupts */		rtl_hard_sti();#ifdef DEBUG_PENDING		local_pending = 0;#endif /* DEBUG_PENDING */		dispatch_local_linux_irq(MACHDEPREGS_PTR(regs),pnd);	}	rtl_trace2 (RTL_TRACE_LOCAL_INTERCEPT_EXIT, LOCAL_PND_TO_VECTOR(pnd));	RETURN_FROM_LOCAL_LINUX;}#endif/* tools for soft_sti */static inline unsigned int get_gpended_irq(void){	unsigned int i, j;	rtl_irqstate_t flags;	unsigned long irqs;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品美女一区二区| 国产最新精品免费| 亚洲一区二区五区| 一区二区三区不卡视频在线观看 | 亚洲国产精品欧美一二99| 国产精品国产三级国产普通话三级 | 蜜臀av国产精品久久久久 | 欧美日韩国产电影| 欧美男生操女生| 正在播放亚洲一区| 日韩一区二区电影| 欧美成人精品3d动漫h| 精品国产乱码久久久久久闺蜜| 欧美一区二区三区婷婷月色| 日韩欧美国产一区二区三区| 日韩一区二区在线播放| 精品国产免费人成在线观看| 久久亚洲精精品中文字幕早川悠里 | 欧美日韩视频一区二区| 91.成人天堂一区| 日韩精品中文字幕一区| 国产亚洲精品aa午夜观看| 国产精品视频你懂的| 亚洲欧美日韩精品久久久久| 亚洲国产三级在线| 麻豆视频一区二区| 国产a精品视频| 91麻豆免费观看| 欧美久久久久久久久| 日韩精品一区二区在线观看| 久久久久99精品一区| 日韩毛片高清在线播放| 午夜欧美在线一二页| 久久精品国产精品亚洲综合| 国产成人午夜99999| 色综合天天综合狠狠| 91精品国产综合久久久久久久久久| 欧美成人r级一区二区三区| 国产欧美日韩一区二区三区在线观看 | 久久久国产综合精品女国产盗摄| 中文字幕一区在线观看视频| 亚洲高清免费观看 | 91极品视觉盛宴| 日韩一区二区中文字幕| 国产精品麻豆一区二区| 亚洲国产欧美另类丝袜| 国产麻豆成人精品| 91搞黄在线观看| 国产亚洲一区二区三区在线观看| 亚洲人123区| 久久69国产一区二区蜜臀| jiyouzz国产精品久久| 91麻豆精品国产91久久久久| 国产精品网站一区| 日韩—二三区免费观看av| 福利视频网站一区二区三区| 欧美日韩一区二区欧美激情| 国产婷婷一区二区| 天堂久久久久va久久久久| 粉嫩欧美一区二区三区高清影视| 欧美日韩国产高清一区二区三区| 亚洲国产精品99久久久久久久久| 视频一区视频二区中文字幕| 99久久国产综合精品女不卡| 日韩美女主播在线视频一区二区三区| 亚洲免费资源在线播放| 国产成人免费在线观看不卡| 欧美精品亚洲二区| 亚洲你懂的在线视频| 国产大片一区二区| 日韩欧美电影一二三| 亚洲国产另类av| 91麻豆精品在线观看| 国产欧美一区二区在线| 蜜臀av国产精品久久久久| 欧美无砖专区一中文字| 国产精品盗摄一区二区三区| 国产一本一道久久香蕉| 91精品国产综合久久久久久久| 亚洲天堂免费看| 成人性生交大片免费看在线播放| 日韩欧美国产精品一区| 天堂成人国产精品一区| 91福利在线导航| 亚洲美女视频一区| 成人国产精品免费| 国产日韩欧美精品电影三级在线 | 欧美日韩日日摸| 亚洲女与黑人做爰| 91在线视频免费观看| 日本一区二区成人在线| 国产一区二区精品在线观看| 欧美成人aa大片| 麻豆视频观看网址久久| 日韩欧美国产一区二区在线播放| 日韩影视精彩在线| 欧美高清dvd| 天天操天天干天天综合网| 欧美亚洲另类激情小说| 亚洲综合小说图片| 欧美日韩视频第一区| 亚洲va欧美va天堂v国产综合| 欧美三区免费完整视频在线观看| 一区二区三区在线播放| 在线一区二区三区| 亚洲国产日韩在线一区模特| 欧美日韩电影在线播放| 日本欧美一区二区三区乱码| 欧美成人伊人久久综合网| 免费一级片91| 久久综合九色欧美综合狠狠| 狠狠色丁香婷综合久久| 久久精品亚洲一区二区三区浴池| 国产精品18久久久久久久久久久久| 久久久噜噜噜久久人人看| 成人毛片老司机大片| 亚洲视频免费观看| 欧美日韩三级一区| 精品综合久久久久久8888| 久久久国产精品麻豆| 99久久夜色精品国产网站| 一区二区三区美女| 制服丝袜亚洲网站| 国产一区二区三区日韩| 国产精品天干天干在线综合| 99精品国产视频| 亚洲电影一级黄| 欧美精品一区视频| 成人精品一区二区三区四区| 亚洲免费电影在线| 欧美顶级少妇做爰| 国产精品一区二区无线| 日韩久久一区二区| 91精品婷婷国产综合久久性色| 激情综合色丁香一区二区| 日本一区二区高清| 欧美日韩国产综合一区二区| 极品美女销魂一区二区三区免费| 国产精品毛片久久久久久久| 欧美日韩久久久| 国产精品1区2区| 香蕉久久夜色精品国产使用方法| 欧美成人国产一区二区| 91天堂素人约啪| 麻豆精品一区二区综合av| 国产精品久久久久久久浪潮网站| 欧美午夜精品理论片a级按摩| 美女视频黄a大片欧美| 国产精品传媒在线| 538在线一区二区精品国产| 国产美女在线观看一区| 亚洲在线中文字幕| 久久久五月婷婷| 欧美色区777第一页| 国产精品1区2区| 日本欧美久久久久免费播放网| 国产精品福利在线播放| 欧美一级爆毛片| 91精品办公室少妇高潮对白| 国产一区二区三区| 天堂久久一区二区三区| 日韩久久一区二区| 久久蜜桃av一区二区天堂| 欧美日韩国产综合久久| 99久久99久久精品国产片果冻| 免费黄网站欧美| 亚洲国产日韩一区二区| 中文字幕巨乱亚洲| 日韩精品一区二区三区四区视频| 色综合天天综合狠狠| 国产精品自拍av| 日本午夜精品一区二区三区电影| 亚洲人一二三区| 国产色产综合产在线视频| 在线综合+亚洲+欧美中文字幕| 色婷婷av一区二区三区gif| 国产成人午夜视频| 精品在线亚洲视频| 石原莉奈在线亚洲二区| 一区二区三区鲁丝不卡| 国产精品久久久久久户外露出| 精品久久免费看| 欧美日韩激情一区二区| 在线免费观看日本欧美| 成人av先锋影音| 国产二区国产一区在线观看| 美女精品一区二区| 日产国产高清一区二区三区| 一区二区免费视频| 一区二区三区中文免费| 亚洲欧洲另类国产综合| 欧美国产精品一区二区三区| 26uuu亚洲| 精品乱人伦一区二区三区| 91精品午夜视频| 91精品婷婷国产综合久久性色| 欧美人牲a欧美精品| 欧美人与z0zoxxxx视频| 在线不卡a资源高清| 欧美日韩精品一区二区三区蜜桃|