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

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

?? isar.c

?? 優(yōu)龍2410linux2.6.8內(nèi)核源代碼
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
/* $Id: isar.c,v 1.22.2.6 2004/02/11 13:21:34 keil Exp $ * * isar.c   ISAR (Siemens PSB 7110) specific routines * * Author       Karsten Keil (keil@isdn4linux.de) * * This file is (c) under GNU General Public License * */#include <linux/init.h>#include "hisax.h"#include "isar.h"#include "isdnl1.h"#include <linux/interrupt.h>#define DBG_LOADFIRM	0#define DUMP_MBOXFRAME	2#define DLE	0x10#define ETX	0x03#define FAXMODCNT	13const	u_char	faxmodulation[] = {3,24,48,72,73,74,96,97,98,121,122,145,146};static	u_int	modmask = 0x1fff;static	int	frm_extra_delay = 2;static	int	para_TOA = 6;const   u_char  *FC1_CMD[] = {"FAE", "FTS", "FRS", "FTM", "FRM", "FTH", "FRH", "CTRL" };void isar_setup(struct IsdnCardState *cs);static void isar_pump_cmd(struct BCState *bcs, u_char cmd, u_char para);static void ll_deliver_faxstat(struct BCState *bcs, u_char status);static inline intwaitforHIA(struct IsdnCardState *cs, int timeout){	while ((cs->BC_Read_Reg(cs, 0, ISAR_HIA) & 1) && timeout) {		udelay(1);		timeout--;	}	if (!timeout)		printk(KERN_WARNING "HiSax: ISAR waitforHIA timeout\n");	return(timeout);}intsendmsg(struct IsdnCardState *cs, u_char his, u_char creg, u_char len,	u_char *msg){	int i;		if (!waitforHIA(cs, 4000))		return(0);#if DUMP_MBOXFRAME	if (cs->debug & L1_DEB_HSCX)		debugl1(cs, "sendmsg(%02x,%02x,%d)", his, creg, len);#endif	cs->BC_Write_Reg(cs, 0, ISAR_CTRL_H, creg);	cs->BC_Write_Reg(cs, 0, ISAR_CTRL_L, len);	cs->BC_Write_Reg(cs, 0, ISAR_WADR, 0);	if (msg && len) {		cs->BC_Write_Reg(cs, 1, ISAR_MBOX, msg[0]);		for (i=1; i<len; i++)			cs->BC_Write_Reg(cs, 2, ISAR_MBOX, msg[i]);#if DUMP_MBOXFRAME>1		if (cs->debug & L1_DEB_HSCX_FIFO) {			char tmp[256], *t;						i = len;			while (i>0) {				t = tmp;				t += sprintf(t, "sendmbox cnt %d", len);				QuickHex(t, &msg[len-i], (i>64) ? 64:i);				debugl1(cs, tmp);				i -= 64;			}		}#endif	}	cs->BC_Write_Reg(cs, 1, ISAR_HIS, his);	waitforHIA(cs, 10000);	return(1);}/* Call only with IRQ disabled !!! */inline voidrcv_mbox(struct IsdnCardState *cs, struct isar_reg *ireg, u_char *msg){	int i;	cs->BC_Write_Reg(cs, 1, ISAR_RADR, 0);	if (msg && ireg->clsb) {		msg[0] = cs->BC_Read_Reg(cs, 1, ISAR_MBOX);		for (i=1; i < ireg->clsb; i++)			 msg[i] = cs->BC_Read_Reg(cs, 2, ISAR_MBOX);#if DUMP_MBOXFRAME>1		if (cs->debug & L1_DEB_HSCX_FIFO) {			char tmp[256], *t;						i = ireg->clsb;			while (i>0) {				t = tmp;				t += sprintf(t, "rcv_mbox cnt %d", ireg->clsb);				QuickHex(t, &msg[ireg->clsb-i], (i>64) ? 64:i);				debugl1(cs, tmp);				i -= 64;			}		}#endif	}	cs->BC_Write_Reg(cs, 1, ISAR_IIA, 0);}/* Call only with IRQ disabled !!! */inline voidget_irq_infos(struct IsdnCardState *cs, struct isar_reg *ireg){	ireg->iis = cs->BC_Read_Reg(cs, 1, ISAR_IIS);	ireg->cmsb = cs->BC_Read_Reg(cs, 1, ISAR_CTRL_H);	ireg->clsb = cs->BC_Read_Reg(cs, 1, ISAR_CTRL_L);#if DUMP_MBOXFRAME	if (cs->debug & L1_DEB_HSCX)		debugl1(cs, "irq_stat(%02x,%02x,%d)", ireg->iis, ireg->cmsb,			ireg->clsb);#endif}intwaitrecmsg(struct IsdnCardState *cs, u_char *len,	u_char *msg, int maxdelay){	int timeout = 0;	struct isar_reg *ir = cs->bcs[0].hw.isar.reg;			while((!(cs->BC_Read_Reg(cs, 0, ISAR_IRQBIT) & ISAR_IRQSTA)) &&		(timeout++ < maxdelay))		udelay(1);	if (timeout >= maxdelay) {		printk(KERN_WARNING"isar recmsg IRQSTA timeout\n");		return(0);	}	get_irq_infos(cs, ir);	rcv_mbox(cs, ir, msg);	*len = ir->clsb;	return(1);}intISARVersion(struct IsdnCardState *cs, char *s){	int ver;	u_char msg[] = ISAR_MSG_HWVER;	u_char tmp[64];	u_char len;	u_long flags;	int debug;	cs->cardmsg(cs, CARD_RESET,  NULL);	spin_lock_irqsave(&cs->lock, flags);	/* disable ISAR IRQ */	cs->BC_Write_Reg(cs, 0, ISAR_IRQBIT, 0);	debug = cs->debug;	cs->debug &= ~(L1_DEB_HSCX | L1_DEB_HSCX_FIFO);	if (!sendmsg(cs, ISAR_HIS_VNR, 0, 3, msg)) {		spin_unlock_irqrestore(&cs->lock, flags);		return(-1);	}	if (!waitrecmsg(cs, &len, tmp, 100000)) {		spin_unlock_irqrestore(&cs->lock, flags);		return(-2);	}	cs->debug = debug;	if (cs->bcs[0].hw.isar.reg->iis == ISAR_IIS_VNR) {		if (len == 1) {			ver = tmp[0] & 0xf;			printk(KERN_INFO "%s ISAR version %d\n", s, ver);		} else			ver = -3;	} else		ver = -4;	spin_unlock_irqrestore(&cs->lock, flags);	return(ver);}intisar_load_firmware(struct IsdnCardState *cs, u_char __user *buf){	int ret, size, cnt, debug;	u_char len, nom, noc;	u_short sadr, left, *sp;	u_char __user *p = buf;	u_char *msg, *tmpmsg, *mp, tmp[64];	u_long flags;	struct isar_reg *ireg = cs->bcs[0].hw.isar.reg;		struct {u_short sadr;		u_short len;		u_short d_key;	} blk_head;		#define	BLK_HEAD_SIZE 6	if (1 != (ret = ISARVersion(cs, "Testing"))) {		printk(KERN_ERR"isar_load_firmware wrong isar version %d\n", ret);		return(1);	}	debug = cs->debug;#if DBG_LOADFIRM<2	cs->debug &= ~(L1_DEB_HSCX | L1_DEB_HSCX_FIFO);#endif		if ((ret = copy_from_user(&size, p, sizeof(int)))) {		printk(KERN_ERR"isar_load_firmware copy_from_user ret %d\n", ret);		return ret;	}	p += sizeof(int);	printk(KERN_DEBUG"isar_load_firmware size: %d\n", size);	cnt = 0;	/* disable ISAR IRQ */	cs->BC_Write_Reg(cs, 0, ISAR_IRQBIT, 0);	if (!(msg = kmalloc(256, GFP_KERNEL))) {		printk(KERN_ERR"isar_load_firmware no buffer\n");		return (1);	}	if (!(tmpmsg = kmalloc(256, GFP_KERNEL))) {		printk(KERN_ERR"isar_load_firmware no tmp buffer\n");		kfree(msg);		return (1);	}	spin_lock_irqsave(&cs->lock, flags);	/* disable ISAR IRQ */	cs->BC_Write_Reg(cs, 0, ISAR_IRQBIT, 0);	spin_unlock_irqrestore(&cs->lock, flags);	while (cnt < size) {		if ((ret = copy_from_user(&blk_head, p, BLK_HEAD_SIZE))) {			printk(KERN_ERR"isar_load_firmware copy_from_user ret %d\n", ret);			goto reterror;		}#ifdef __BIG_ENDIAN		sadr = (blk_head.sadr & 0xff)*256 + blk_head.sadr/256;		blk_head.sadr = sadr;		sadr = (blk_head.len & 0xff)*256 + blk_head.len/256;		blk_head.len = sadr;		sadr = (blk_head.d_key & 0xff)*256 + blk_head.d_key/256;		blk_head.d_key = sadr;#endif /* __BIG_ENDIAN */		cnt += BLK_HEAD_SIZE;		p += BLK_HEAD_SIZE;		printk(KERN_DEBUG"isar firmware block (%#x,%5d,%#x)\n",			blk_head.sadr, blk_head.len, blk_head.d_key & 0xff);		sadr = blk_head.sadr;		left = blk_head.len;		spin_lock_irqsave(&cs->lock, flags);		if (!sendmsg(cs, ISAR_HIS_DKEY, blk_head.d_key & 0xff, 0, NULL)) {			printk(KERN_ERR"isar sendmsg dkey failed\n");			ret = 1;goto reterr_unlock;		}		if (!waitrecmsg(cs, &len, tmp, 100000)) {			printk(KERN_ERR"isar waitrecmsg dkey failed\n");			ret = 1;goto reterr_unlock;		}		if ((ireg->iis != ISAR_IIS_DKEY) || ireg->cmsb || len) {			printk(KERN_ERR"isar wrong dkey response (%x,%x,%x)\n",				ireg->iis, ireg->cmsb, len);			ret = 1;goto reterr_unlock;		}		spin_unlock_irqrestore(&cs->lock, flags);		while (left>0) {			if (left > 126)				noc = 126;			else				noc = left;			nom = 2*noc;			mp  = msg;			*mp++ = sadr / 256;			*mp++ = sadr % 256;			left -= noc;			*mp++ = noc;			if ((ret = copy_from_user(tmpmsg, p, nom))) {				printk(KERN_ERR"isar_load_firmware copy_from_user ret %d\n", ret);				goto reterror;			}			p += nom;			cnt += nom;			nom += 3;			sp = (u_short *)tmpmsg;#if DBG_LOADFIRM			printk(KERN_DEBUG"isar: load %3d words at %04x left %d\n",				 noc, sadr, left);#endif			sadr += noc;			while(noc) {#ifdef __BIG_ENDIAN				*mp++ = *sp % 256;				*mp++ = *sp / 256;#else				*mp++ = *sp / 256;				*mp++ = *sp % 256;#endif /* __BIG_ENDIAN */				sp++;				noc--;			}			spin_lock_irqsave(&cs->lock, flags);			if (!sendmsg(cs, ISAR_HIS_FIRM, 0, nom, msg)) {				printk(KERN_ERR"isar sendmsg prog failed\n");				ret = 1;goto reterr_unlock;			}			if (!waitrecmsg(cs, &len, tmp, 100000)) {				printk(KERN_ERR"isar waitrecmsg prog failed\n");				ret = 1;goto reterr_unlock;			}			if ((ireg->iis != ISAR_IIS_FIRM) || ireg->cmsb || len) {				printk(KERN_ERR"isar wrong prog response (%x,%x,%x)\n",					ireg->iis, ireg->cmsb, len);				ret = 1;goto reterr_unlock;			}			spin_unlock_irqrestore(&cs->lock, flags);		}		printk(KERN_DEBUG"isar firmware block %5d words loaded\n",			blk_head.len);	}	/* 10ms delay */	cnt = 10;	while (cnt--)		udelay(1000);	msg[0] = 0xff;	msg[1] = 0xfe;	ireg->bstat = 0;	spin_lock_irqsave(&cs->lock, flags);	if (!sendmsg(cs, ISAR_HIS_STDSP, 0, 2, msg)) {		printk(KERN_ERR"isar sendmsg start dsp failed\n");		ret = 1;goto reterr_unlock;	}	if (!waitrecmsg(cs, &len, tmp, 100000)) {		printk(KERN_ERR"isar waitrecmsg start dsp failed\n");		ret = 1;goto reterr_unlock;	}	if ((ireg->iis != ISAR_IIS_STDSP) || ireg->cmsb || len) {		printk(KERN_ERR"isar wrong start dsp response (%x,%x,%x)\n",			ireg->iis, ireg->cmsb, len);		ret = 1;goto reterr_unlock;	} else		printk(KERN_DEBUG"isar start dsp success\n");	/* NORMAL mode entered */	/* Enable IRQs of ISAR */	cs->BC_Write_Reg(cs, 0, ISAR_IRQBIT, ISAR_IRQSTA);	spin_unlock_irqrestore(&cs->lock, flags);	cnt = 1000; /* max 1s */	while ((!ireg->bstat) && cnt) {		udelay(1000);		cnt--;	}	if (!cnt) {		printk(KERN_ERR"isar no general status event received\n");		ret = 1;goto reterror;	} else {		printk(KERN_DEBUG"isar general status event %x\n",			ireg->bstat);	}	/* 10ms delay */	cnt = 10;	while (cnt--)		udelay(1000);	spin_lock_irqsave(&cs->lock, flags);	ireg->iis = 0;	if (!sendmsg(cs, ISAR_HIS_DIAG, ISAR_CTRL_STST, 0, NULL)) {		printk(KERN_ERR"isar sendmsg self tst failed\n");		ret = 1;goto reterr_unlock;	}	cnt = 10000; /* max 100 ms */	spin_unlock_irqrestore(&cs->lock, flags);	while ((ireg->iis != ISAR_IIS_DIAG) && cnt) {		udelay(10);		cnt--;	}	udelay(1000);	if (!cnt) {		printk(KERN_ERR"isar no self tst response\n");		ret = 1;goto reterror;	}	if ((ireg->cmsb == ISAR_CTRL_STST) && (ireg->clsb == 1)		&& (ireg->par[0] == 0)) {		printk(KERN_DEBUG"isar selftest OK\n");	} else {		printk(KERN_DEBUG"isar selftest not OK %x/%x/%x\n",			ireg->cmsb, ireg->clsb, ireg->par[0]);		ret = 1;goto reterror;	}	spin_lock_irqsave(&cs->lock, flags);	ireg->iis = 0;	if (!sendmsg(cs, ISAR_HIS_DIAG, ISAR_CTRL_SWVER, 0, NULL)) {		printk(KERN_ERR"isar RQST SVN failed\n");		ret = 1;goto reterr_unlock;	}	spin_unlock_irqrestore(&cs->lock, flags);	cnt = 30000; /* max 300 ms */	while ((ireg->iis != ISAR_IIS_DIAG) && cnt) {		udelay(10);		cnt--;	}	udelay(1000);	if (!cnt) {		printk(KERN_ERR"isar no SVN response\n");		ret = 1;goto reterror;	} else {		if ((ireg->cmsb == ISAR_CTRL_SWVER) && (ireg->clsb == 1))			printk(KERN_DEBUG"isar software version %#x\n",				ireg->par[0]);		else {			printk(KERN_ERR"isar wrong swver response (%x,%x) cnt(%d)\n",				ireg->cmsb, ireg->clsb, cnt);			ret = 1;goto reterror;		}	}	spin_lock_irqsave(&cs->lock, flags);	cs->debug = debug;	isar_setup(cs);	ret = 0;reterr_unlock:	spin_unlock_irqrestore(&cs->lock, flags);reterror:	cs->debug = debug;	if (ret)		/* disable ISAR IRQ */		cs->BC_Write_Reg(cs, 0, ISAR_IRQBIT, 0);	kfree(msg);	kfree(tmpmsg);	return(ret);}extern void BChannel_bh(struct BCState *);#define B_LL_NOCARRIER	8#define B_LL_CONNECT	9#define B_LL_OK		10static voidisar_bh(struct BCState *bcs){	BChannel_bh(bcs);	if (test_and_clear_bit(B_LL_NOCARRIER, &bcs->event))		ll_deliver_faxstat(bcs, ISDN_FAX_CLASS1_NOCARR);	if (test_and_clear_bit(B_LL_CONNECT, &bcs->event))		ll_deliver_faxstat(bcs, ISDN_FAX_CLASS1_CONNECT);	if (test_and_clear_bit(B_LL_OK, &bcs->event))		ll_deliver_faxstat(bcs, ISDN_FAX_CLASS1_OK);}static voidsend_DLE_ETX(struct BCState *bcs){	u_char dleetx[2] = {DLE,ETX};	struct sk_buff *skb;		if ((skb = dev_alloc_skb(2))) {		memcpy(skb_put(skb, 2), dleetx, 2);		skb_queue_tail(&bcs->rqueue, skb);		schedule_event(bcs, B_RCVBUFREADY);	} else {		printk(KERN_WARNING "HiSax: skb out of memory\n");	}}static inline intdle_count(unsigned char *buf, int len){	int count = 0;	while (len--)		if (*buf++ == DLE)			count++;	return count;}static inline voidinsert_dle(unsigned char *dest, unsigned char *src, int count) {

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区高清免费观看影视大全 | 国产视频一区在线观看| 精品欧美乱码久久久久久1区2区| 欧美精品第1页| 国产欧美一区二区三区沐欲 | 成人免费一区二区三区在线观看| 亚洲一区二区三区四区中文字幕| 久久99精品久久久久久国产越南| 成人手机在线视频| 欧美日韩精品福利| 中文字幕av一区二区三区高| 一区二区三区四区亚洲| 国产综合久久久久影院| 色婷婷亚洲婷婷| 精品国产第一区二区三区观看体验 | 久久er精品视频| 色就色 综合激情| 久久影院午夜论| 亚洲成人午夜影院| 成人av免费在线| 亚洲精品一区二区三区影院| 亚洲午夜久久久久久久久电影院| 国产在线精品视频| 777奇米成人网| 亚洲你懂的在线视频| 国产麻豆欧美日韩一区| 欧美日韩精品欧美日韩精品| 国产精品成人网| 狠狠色2019综合网| 日韩一区二区免费电影| 尤物视频一区二区| 成人美女视频在线看| 日韩欧美国产电影| 亚洲va欧美va人人爽午夜| 91丨porny丨首页| 中文字幕欧美日本乱码一线二线 | 精品在线免费观看| 欧美一三区三区四区免费在线看 | 日本亚洲视频在线| 欧美综合色免费| 亚洲日本在线看| 99久久亚洲一区二区三区青草| 国产夜色精品一区二区av| 免费av网站大全久久| 欧美日韩免费一区二区三区| 亚洲综合另类小说| 欧美特级限制片免费在线观看| 亚洲图片欧美激情| 91在线观看一区二区| 国产精品久久久久久久岛一牛影视| 精东粉嫩av免费一区二区三区| 欧美一区二区三区免费在线看| 亚洲成人动漫在线观看| 欧美日韩专区在线| 五月开心婷婷久久| 91精品国产aⅴ一区二区| 欧美a级一区二区| 欧美成人精品福利| 国产乱码精品一区二区三| 国产亚洲欧洲997久久综合| 国产精品一二三四| 中文字幕一区二区三区蜜月| 97se亚洲国产综合在线| 一区二区三区在线影院| 欧美日韩国产综合草草| 日韩精品免费视频人成| 欧美一二三在线| 国产精品一级二级三级| 亚洲欧美怡红院| 欧美午夜电影网| 久久国产尿小便嘘嘘尿| 久久精品欧美日韩| 色综合天天狠狠| 亚洲成a人片在线观看中文| 欧美一卡二卡在线| 国产黑丝在线一区二区三区| 中文字幕欧美一| 欧美日韩在线精品一区二区三区激情| 日韩vs国产vs欧美| 国产蜜臀av在线一区二区三区| av在线播放一区二区三区| 亚洲已满18点击进入久久| 91精品在线一区二区| 国产精品456露脸| 亚洲精选免费视频| 日韩精品一区二区三区四区视频| 成人免费观看视频| 婷婷六月综合亚洲| 欧美激情综合在线| 欧美日韩国产一二三| 国产精华液一区二区三区| 亚洲精品国产高清久久伦理二区| 欧美一区日韩一区| a亚洲天堂av| 美女被吸乳得到大胸91| 中文字幕制服丝袜一区二区三区 | 日韩电影一二三区| 国产精品久久久一本精品| 欧美日韩在线播| 国产精品18久久久久久久久久久久| 亚洲精品第1页| 国产日本欧美一区二区| 欧美日韩精品电影| 成人免费毛片app| 蜜臀av性久久久久av蜜臀妖精| 国产精品国产三级国产普通话99| 日韩一区二区免费视频| 日本韩国一区二区| 成人丝袜18视频在线观看| 麻豆91在线看| 亚洲成人综合网站| 亚洲品质自拍视频| 中文字幕精品一区二区三区精品| 91精品国产高清一区二区三区蜜臀| 91麻豆成人久久精品二区三区| 国产一区二区三区综合| 日韩二区三区四区| 亚洲一区二区三区在线| 欧美激情在线一区二区三区| 日韩一级二级三级| 欧美日韩不卡在线| 91国内精品野花午夜精品| 国产.欧美.日韩| 久久99最新地址| 蜜臀91精品一区二区三区| 亚洲午夜久久久久久久久电影网 | 91在线观看地址| 成人黄色在线视频| 岛国一区二区三区| 国产精品中文有码| 国产乱国产乱300精品| 麻豆精品国产传媒mv男同| 婷婷中文字幕综合| 亚洲一二三四久久| 亚洲一区二区五区| 亚洲一区在线免费观看| 亚洲精品高清视频在线观看| 综合久久久久综合| 国产精品国产三级国产普通话三级 | 精品国产91久久久久久久妲己 | 日韩一区二区在线观看| 9191久久久久久久久久久| 在线观看精品一区| 色婷婷综合久色| 欧美日韩卡一卡二| 91麻豆精品国产自产在线观看一区 | 色婷婷av一区二区三区大白胸| www.日韩大片| 午夜电影网亚洲视频| 欧美电影免费观看完整版| 欧美日韩一级片网站| 色就色 综合激情| 欧美三级午夜理伦三级中视频| 91丝袜高跟美女视频| 色综合中文字幕国产 | 亚洲精品乱码久久久久久| 亚洲国产成人91porn| 亚洲国产精品麻豆| 丝袜脚交一区二区| 免费高清在线一区| 国产成人亚洲精品狼色在线| 国产成人免费视| 色哟哟欧美精品| 欧美一区二区三区视频免费播放| 精品久久国产97色综合| 中文一区在线播放| 亚洲在线中文字幕| 久久精品国产第一区二区三区| 国产精品亚洲第一区在线暖暖韩国 | 在线播放91灌醉迷j高跟美女 | 日本高清不卡在线观看| 在线不卡中文字幕播放| 久久人人超碰精品| 一区精品在线播放| 亚洲成人中文在线| 国产成人午夜精品影院观看视频| 91尤物视频在线观看| 91精品久久久久久久91蜜桃| 国产日产欧美一区| 亚洲高清视频中文字幕| 狠狠久久亚洲欧美| 91浏览器在线视频| 精品区一区二区| 亚洲精品日产精品乱码不卡| 男女激情视频一区| 99在线精品视频| 日韩精品一区二区三区在线| 亚洲视频一区二区在线观看| 日本视频在线一区| 91片在线免费观看| 精品欧美一区二区久久 | 亚洲人午夜精品天堂一二香蕉| 水蜜桃久久夜色精品一区的特点| 国产精品一二三区| 欧美电影在线免费观看| 国产精品超碰97尤物18| 久色婷婷小香蕉久久| 99r国产精品| 久久午夜电影网| 青青草成人在线观看|