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

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

?? hs.c

?? 用于底層開發(fā)的TCPIP協(xié)議棧源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
		hp->txdelay = atol(argv[7]);
	else
		hp->txdelay = 15L;
	if(argc > 8)
		hp->p = atoi(argv[8]);
	else
		hp->p = 64;
	if(argc > 9 && argv[9][0] == 'r')
		hp->clkrev = 1;
	else
		hp->clkrev = 0;
	hp->iface = if_hsb;
	hdlcparam(hp);

	hp = &Hdlc[2*dev];
	hp->ctl = Hs[dev].addr + CHANA + CTL;
	hp->data = Hs[dev].addr + CHANA + DATA;
	hp->bufsiz = atoi(argv[5]);
	hp->txdelay = Hdlc[2*dev+1].txdelay;
	hp->p = Hdlc[2*dev+1].p;
	if(argc > 9 && argv[9][0] == 'r')
		hp->clkrev = 1;
	else
		hp->clkrev = 0;
	hp->iface = if_hsa;
	hdlcparam(hp);

	outportb(Hs[dev].addr + 4,0x08);	/*EAGLE INT GATE */
	/* Clear mask (enable interrupt) in 8259 interrupt controller */
	maskon(Hs[dev].vec);

	/* Initialize timing delay loop */
	init_delay();
	cp = if_name(if_hsa," tx");
	if_hsa->txproc = newproc(cp,512,if_tx,0,if_hsa,NULL,0);
	free(cp);
	cp = if_name(if_hsb," tx");
	if_hsb->txproc = newproc(cp,512,if_tx,0,if_hsb,NULL,0);
	free(cp);
	return 0;
}
static int
hs_stop(iface)
struct iface *iface;
{
	int dev;

	dev = iface->dev;
	if(dev & 1)
		return -1;	/* Valid only for the first device */
	dev >>= 1;	/* Convert back into hs number */

	/* Turn off interrupts */
	maskoff(Hs[dev].vec);

	/* Restore original interrupt vector */
	setirq(Hs[dev].vec,Hs[dev].save.vec);

	/* Force hardware reset */
	write_scc(Hs[dev].addr + CHANA+CTL,R9,FHWRES);
	return 0;
}
/* Send raw packet */
static int
hs_raw(
struct iface *iface,
struct mbuf **bpp
){

	struct hdlc *hp;
	struct mbuf *nbp;
	register uint16 cnt;
	register uint8 *cp;
	uint16 ctl,data;

	dump(iface,IF_TRACE_OUT,*bpp);
	iface->rawsndcnt++;
	iface->lastsent = secclock();
	hp = &Hdlc[iface->dev];
	hp->txpkts++;

	ctl = hp->ctl;
	data = hp->data;

	cnt = len_p(*bpp);
	/* If buffer isn't contiguous (which is almost always
	 * the case) copy it to a new buffer for speed
	 */
	if((*bpp)->next != NULL){
		if((nbp = copy_p(*bpp,cnt)) == NULL){
			hp->nomem++;
			free_p(bpp);
			return -1;
		}
		free_p(bpp);
		*bpp = nbp;
	}
	cp = (*bpp)->data;
	/* Turn transmitter on */
	hstxon(hp);
	/* Initialize transmitter CRC */
	write_scc(ctl,R0,RES_Tx_CRC);
	for(;;){
		/* Wait for the transmitter to become ready */
		while(!(inportb(ctl) & Tx_BUF_EMP))
			;
		if(cnt-- == 0)
			break;
		outportb(data,*cp++); /* Send the character */
	}
	write_scc(ctl,R0,RES_EOM_L);	/* Allow CRC generation */
	/* End of frame. Wait for TxEOM to go high, indicating start of
	 * CRC transmission. Note that we don't reset the transmit
	 * interrupt pending flag as one ordinarily would, since we're
	 * not using tx interrupts.
	 */
	while(!(inportb(ctl) & TxEOM))
		;

	free_p(bpp);
	hstxoff(hp);	/* Shut down tx */
	/* Hold off to give other guy a chance to
	 * respond
	 */
	hp->deftime = msclock() + hp->txdelay + 500;
	return 0;
}

/* Turn on high speed transmitter. Does p-persistence, then sends a dummy
 * frame to allow for keyup delay. Returns with transmitter on and interrupts
 * disabled
 */
static void
hstxon(hp)
struct hdlc *hp;
{
	uint16 ctl;
	int i;
	long ca;
	int32 t;

	ctl = hp->ctl;

	/* Defer logic. Wait until deftime is in the past (so we
	 * defer to any overheard CTS messages) AND the p-persistence
	 * dice roll succeeds. The computation of ca allows for clock
	 * rollover (which happens every 49+ days).
	 */
	for(;;){
		t = msclock();
		ca = hp->deftime - t;
		if(ca > 0){
			ppause(ca);
			continue;
		}
		hp->deftime = t;	/* Keep from getting too old */
		if((rand() & 0xff) > hp->p){
			ppause((long)MSPTICK);
			continue;
		}
		break;
	}
	/* Prevent distractions. In particular, block off the DCD interrupt
	 * so we don't hear our own carrier and hang in the interrupt handler!
	 * Note that simply disabling CPU interrupts isn't enough since
	 * the call to ppause will block and the kernel will re-enable
	 * them.
	 */
	write_scc(ctl,R9,0);	/* Disable all SCC interrupts */
	disable();

	/* Turn on carrier, enable transmitter */
	write_scc(ctl,R5,TxCRC_ENAB | RTS | TxENAB | Tx8 | DTR);

	/* Delay for keyup interval */
	for(i=hp->txdelay;i != 0;i--)
		msdelay();

}
/* Turn transmitter off at the end of a series of frames */
static void
hstxoff(hp)
struct hdlc *hp;
{
	int cnt;
	uint16 ctl,data;

	ctl = hp->ctl;
	data = hp->data;
	/* To allow the SCC buffering to drain, we begin a dummy frame,
	 * then abort it
	 */
	for(cnt=5;cnt != 0;cnt--){
		while(!(inportb(ctl) & Tx_BUF_EMP))
			;
		outportb(data,0);
	}
	write_scc(ctl,R0,SEND_ABORT);

	/* Turn off carrier and disable transmitter */
	write_scc(ctl,R5,TxCRC_ENAB | Tx8 | DTR);
	/* Re-Enable SCC interrupts */
	write_scc(ctl,R9,MIE|NV);		
	enable();	/* Turn interrupts back on */
}

int
dohs(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	register int i;
	register struct hdlc *hp;

	for(i=0;i<2*Nhs;i++){
		hp = &Hdlc[i];
		printf("port %d: txpkts %lu ints %lu rxpkts %lu rxbytes %lu nomem %lu toobig %lu crcerr %lu aborts %lu overrun %lu\n",
		 i,hp->txpkts,hp->exints,hp->good,hp->rxbytes,
		 hp->nomem,hp->toobig,hp->crcerr,hp->aborts,
		 hp->overrun);
	}
	return 0;
}
static int32
hs_ctl(iface,cmd,set,val)
struct iface *iface;
int cmd;
int set;
int32 val;
{
	register struct hdlc *hp;
	int32 t,ca;

	hp = &Hdlc[iface->dev];
	switch(cmd){
	case PARAM_TXDELAY:	/* Tx keyup delay */
		if(set)
			hp->txdelay = val;
		return hp->txdelay;
	case PARAM_PERSIST:
		if(set)
			hp->p = val;
		return hp->p;
	case PARAM_MUTE:
		/* Mute transmitter for specified # of ms */
		if(set){
			if(val == -1){
				/* Special case for duration of a CTS */
				val = hp->txdelay + 500;
			}
			hp->deftime = msclock() + val;
		}
		t = msclock();
		ca = hp->deftime - t;
		if(ca < 0){
			hp->deftime = t;
			ca = 0;
		}
		return ca;
	}
	return -1;
}
#ifdef	notdef		/* replaced with assembler in 8530.asm */
/* Read data from the 8530 receiver.
 * Returns when either a good frame is received, or when carrier drops.
 * If a good frame is received, the length is returned; otherwise -1.
 */
int
rx8530(ctl,data,buf,bufsize)
uint16 ctl,data;
char *buf;
uint16 bufsize;
{
	int cnt = 0;
	register char status;
	char error;
	register char *cp = buf;

	for(;;){
		status = inportb(ctl);
		if(!(status & DCD)){
			cnt = -1;
			break;
		} else if(status & BRK_ABRT){
			cp = buf;
			cnt = 0;
		} else if(status & Rx_CH_AV){
			/* Receive character is ready, get it */
			*cp++ = inportb(data);
			if(++cnt > bufsize){
				/* Buffer overflow, start again */
				write_scc(ctl,R3,ENT_HM|RxENABLE|RxCRC_ENAB|Rx8);
				cp = buf;
				cnt = 0;
			}
		} else if((error = read_scc(ctl,R1)) & END_FR){
			if(!(error & CRC_ERR))
				break;	/* Good frame! */
			/* Bad frame, start again */
			cp = buf;
			cnt = 0;
		}
	}
	return cnt;
}
#endif

static int32 Del_const;

/* Find the value of Del_const that will cause one execution of mloop()
 * to take one millisecond
 */
static void
init_delay()
{
	int32 start,delay;
	register int i,j;
	int success = 0;

	/* Start with small value to make things tolerable on slow machines */
	Del_const = 10;
	printf("Del_const = %lu\n",Del_const);
	/* Limit the number of iterations in case we don't converge */
	for(i=0;i<5;i++){
		start = msclock();
		for(j=0;j<1000;j++)
			msdelay();
		delay = msclock()-start;
		printf("delay %lu\n",delay);
		if(delay == 0){
			/* Too fast for accurate measurement on coarse clk */	
			Del_const *= 10;
			printf("Del_const = %lu\n",Del_const);
			continue;
		}
		Del_const = (Del_const * 1000)/delay;
		printf("Del_const = %lu\n",Del_const);
		if(delay > 950 && delay < 1050){
			success = 1;
			break;	/* Within 1 tick - Close enough */
		}
	}
	if(!success)
		printf("HS: Warning: auto delay set failed\n");
}
/* Delay for one millisecond (once calibrated by init_delay()) */
static void
msdelay()
{
	int32 i;

	for(i=Del_const;i !=0;i--)
		;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成网站精品片在线观看| 91精品国产入口在线| 国产欧美日韩久久| 美女视频一区二区三区| 欧洲生活片亚洲生活在线观看| 国产日韩精品视频一区| 精品一区二区三区日韩| 日韩一区二区视频| 美女视频黄 久久| 日韩一区二区影院| 美女任你摸久久| 日韩视频免费直播| 免费一区二区视频| 精品卡一卡二卡三卡四在线| 久久福利资源站| 久久噜噜亚洲综合| 国产成人一区二区精品非洲| 久久亚区不卡日本| 丁香六月综合激情| 成人免费一区二区三区在线观看| 成人免费视频app| 成人欧美一区二区三区视频网页| www.av亚洲| 亚洲精品欧美二区三区中文字幕| 91小视频在线免费看| 一区二区激情小说| 欧美一区二区三区四区高清| 久久99深爱久久99精品| 中文字幕久久午夜不卡| 色哦色哦哦色天天综合| 视频一区在线视频| 久久嫩草精品久久久精品一| 99视频超级精品| 三级影片在线观看欧美日韩一区二区| 51午夜精品国产| 国产成人在线看| 亚洲福中文字幕伊人影院| 欧美一区中文字幕| 国产精品69久久久久水密桃| 亚洲精品成人天堂一二三| 777a∨成人精品桃花网| 成人app网站| 蜜桃视频在线观看一区| 综合自拍亚洲综合图不卡区| 91麻豆精品国产无毒不卡在线观看| 国产一本一道久久香蕉| 亚洲综合自拍偷拍| 久久精品无码一区二区三区| 欧美亚洲丝袜传媒另类| 狠狠v欧美v日韩v亚洲ⅴ| 一区二区在线观看不卡| 日本一区二区成人| 日韩女优毛片在线| 欧美色综合网站| 成人久久18免费网站麻豆| 韩国视频一区二区| 日本aⅴ精品一区二区三区| 亚洲精选免费视频| 中文字幕色av一区二区三区| 欧美刺激脚交jootjob| 久久免费视频一区| 日韩一级完整毛片| 狠狠久久亚洲欧美| 国产亚洲一区二区在线观看| 99久久久精品| 蜜桃视频免费观看一区| 午夜电影久久久| 欧美一区日韩一区| hitomi一区二区三区精品| 国产成人99久久亚洲综合精品| 奇米一区二区三区av| 日韩专区欧美专区| 午夜精品福利一区二区蜜股av | 久久综合色一综合色88| 一本久久综合亚洲鲁鲁五月天| 国产福利一区二区| 国产不卡在线一区| 成人av小说网| 欧美亚一区二区| 91精品在线观看入口| 欧美mv日韩mv国产网站app| 久久一区二区三区四区| 中文字幕乱码一区二区免费| 成人免费一区二区三区在线观看 | 久久久一区二区三区捆绑**| 久久久久九九视频| 国产精品久久久久久久久免费丝袜| 国产精品国产三级国产普通话99 | 欧美精品777| 精品国产髙清在线看国产毛片| 久久伊人蜜桃av一区二区| 中文字幕在线一区免费| 亚洲国产精品视频| 国产精品91一区二区| 欧美性大战久久久久久久蜜臀| 这里只有精品视频在线观看| 国产欧美日韩另类视频免费观看| 亚洲日本在线天堂| 久久精品国产一区二区三区免费看| 国产乱一区二区| 欧美日韩免费观看一区三区| 久久香蕉国产线看观看99| 一区二区三区色| 国产精品一区免费视频| 91福利在线导航| 国产精品丝袜黑色高跟| 日韩激情视频网站| 日本精品一区二区三区四区的功能| 日韩亚洲欧美综合| 午夜精品久久久久影视| 99国产精品久久久久| 国产亚洲短视频| 精品一区二区三区视频| 欧美一区二区黄| 亚洲国产一区二区在线播放| av电影在线不卡| 欧美国产禁国产网站cc| 韩国v欧美v亚洲v日本v| 91麻豆精品国产| 亚洲h在线观看| 欧美高清视频www夜色资源网| 亚洲色图欧洲色图| 99国产精品一区| 亚洲欧洲性图库| 懂色av中文字幕一区二区三区| 久久综合久久鬼色中文字| 美腿丝袜亚洲三区| 日韩午夜精品视频| 免费在线视频一区| 日韩欧美色电影| 精品一区二区免费视频| 亚洲精品一区二区三区在线观看 | 一区二区成人在线视频| 在线看国产日韩| 伊人开心综合网| 欧美无人高清视频在线观看| 亚洲一二三级电影| 欧美精品久久久久久久多人混战| 日韩影院精彩在线| 精品国产乱码久久久久久蜜臀| 激情综合色综合久久| 国产欧美视频一区二区三区| 粉嫩嫩av羞羞动漫久久久| 国产精品国产自产拍高清av王其| 成人精品免费看| 亚洲综合成人在线| 7777精品伊人久久久大香线蕉完整版| 日本中文字幕一区| 国产丝袜欧美中文另类| 色诱视频网站一区| 美女任你摸久久| 亚洲同性gay激情无套| 欧美日韩一级大片网址| 国产裸体歌舞团一区二区| 成人欧美一区二区三区视频网页| 欧美精品色一区二区三区| 国产一区二区福利| 亚洲成av人片一区二区三区| 久久先锋影音av鲁色资源网| 91国内精品野花午夜精品| 麻豆精品国产传媒mv男同| 国产精品久久久久久久久图文区 | 9i在线看片成人免费| 日本免费新一区视频| 亚洲视频一二区| 精品国产凹凸成av人导航| 色一情一伦一子一伦一区| 久久99精品国产麻豆婷婷洗澡| 亚洲精品成人悠悠色影视| 国产欧美日韩不卡| 欧美成人精精品一区二区频| 欧美日韩精品免费观看视频| 国产福利一区二区三区视频 | 欧美日韩五月天| 97久久精品人人做人人爽| 国产一区啦啦啦在线观看| 日本va欧美va精品发布| 天堂久久一区二区三区| 中文字幕免费不卡在线| 99视频一区二区| 三级一区在线视频先锋| 欧美一区二区观看视频| 国产风韵犹存在线视精品| 偷拍与自拍一区| 欧美国产激情一区二区三区蜜月 | 天天综合天天综合色| 中文字幕一区二区视频| 国产精品欧美经典| 国产欧美视频一区二区| 久久精品免视看| 欧美激情一区二区三区蜜桃视频| 精品国产三级电影在线观看| 日韩三级免费观看| 精品国产第一区二区三区观看体验| 91国内精品野花午夜精品| 91网站最新地址| 色八戒一区二区三区| 91在线国产观看| 色偷偷成人一区二区三区91| 色www精品视频在线观看|