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

📄 kern_synch.c

📁 MIPS处理器的bootloader,龙芯就是用的修改过的PMON2
💻 C
字号:
/* $Id: kern_synch.c,v 1.2 2001/12/20 08:03:33 pefo Exp $ */#include <sys/param.h>#include <sys/proc.h>#include <sys/map.h>#include <sys/kernel.h>#include <sys/systm.h>#include <sys/syslog.h>#include <sys/signal.h>#include <sys/signalvar.h>void idle __P((void));void endtsleep __P((void *));inttsleep (chan, pri, mesg, timo)	void *chan;	int pri, timo;	char *mesg;{	struct proc *p = curproc;	int catch = pri & PCATCH;	int sig = 0;	int s = splhigh ();	if (!chan) {extern void _pmon_break(void);		printf("chan = 0!\n");		_pmon_break();		panic ("tsleep !chan");	}	if (p->p_wchan || !chan) {		panic ("tsleep");	}	p->p_wmesg = mesg;	p->p_wchan = chan;	p->p_pri = pri;	if (timo) {		timeout(endtsleep, (void *)p, timo);	}	if (catch) {		p->p_flag |= SSINTR;		if ((sig = CURSIG(p)) != 0) {			unsleep (p);			p->p_stat = SRUN;			goto resume;		}	}	p->p_stat = SSLEEP;	do { 		idle ();	} while (p->p_wchan);resume:	(void) splx (s);	p->p_flag &= ~SSINTR;	if (p->p_flag & STIMO) {		p->p_flag &= ~STIMO;		if (catch == 0 || sig == 0) {			return (EWOULDBLOCK);		}	}	if (timo) {		untimeout(endtsleep, (void *)p);	}	if (catch && (sig || CURSIG(p))) {		if (p->p_sigacts->ps_sigintr & sigmask(sig)) {			return (EINTR);		}		return (ERESTART);	}	return (0);}voidsleep (chan, pri)    void *chan;    int pri;{    tsleep (chan, pri, 0, 0);}voidunsleep (p)    struct proc *p;{    int s = splhigh ();    if (p->p_wchan) {	p->p_wchan = 0;    }    (void) splx (s);}voidsetrunnable (p)    struct proc *p;{    int s = splhigh();    if (p->p_stat != SSLEEP)      panic ("setrunnable");    unsleep (p);    p->p_stat = SRUN;    splx (s);}voidendtsleep(sp)    void *sp;{    struct proc *p = sp;    int s = splhigh();    if (p->p_wchan) {	setrunnable(p);	p->p_flag |= STIMO;    }    splx(s);}voidwakeup (chan)	void *chan;{	int s = splhigh ();	if (curproc && curproc->p_wchan == chan) {		unsleep (curproc);	}	(void) splx (s);}voididle (){    int s = spl0 ();    scandevs ();    (void) splx (s);}#include "../net/netisr.h"#define DOISR(isr, handler) \ if (netisr & (1 << (isr))) { \	netisr &= ~(1 << (isr)); \	handler (); \ }voidsoftnet (){#ifdef INET    DOISR(NETISR_ARP, arpintr);    DOISR(NETISR_IP, ipintr);#endif#ifdef NS    DOISR(NETISR_NS, nsintr);#endif#ifdef ISO    DOISR(NETISR_ISO, clnlintr);#endif#ifdef CCITT    DOISR(NETISR_CCITT, hdintr);#endif#ifdef NETISR_SCLK    DOISR(NETISR_SCLK, softclock);#endif}

⌨️ 快捷键说明

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