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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? jade.c

?? 底層驅動開發
?? C
字號:
/* $Id: jade.c,v 1.9.2.4 2004/01/14 16:04:48 keil Exp $ * * JADE stuff (derived from original hscx.c) * * Author       Roland Klabunde * Copyright    by Roland Klabunde   <R.Klabunde@Berkom.de> *  * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. * */#include <linux/init.h>#include "hisax.h"#include "hscx.h"#include "jade.h"#include "isdnl1.h"#include <linux/interrupt.h>int __initJadeVersion(struct IsdnCardState *cs, char *s){    int ver,i;    int to = 50;    cs->BC_Write_Reg(cs, -1, 0x50, 0x19);    i=0;    while (to) {    	udelay(1);	ver = cs->BC_Read_Reg(cs, -1, 0x60);	to--;	if (ver)    	    break;	if (!to) {	    printk(KERN_INFO "%s JADE version not obtainable\n", s);    	    return (0);        }    }    /* Wait for the JADE */    udelay(10);    /* Read version */    ver = cs->BC_Read_Reg(cs, -1, 0x60);    printk(KERN_INFO "%s JADE version: %d\n", s, ver);    return (1);}/* Write to indirect accessible jade register set */static voidjade_write_indirect(struct IsdnCardState *cs, u_char reg, u_char value){    int to = 50;    u_char ret;    /* Write the data */    cs->BC_Write_Reg(cs, -1, COMM_JADE+1, value);    /* Say JADE we wanna write indirect reg 'reg' */    cs->BC_Write_Reg(cs, -1, COMM_JADE, reg);    to = 50;    /* Wait for RDY goes high */    while (to) {    	udelay(1);	ret = cs->BC_Read_Reg(cs, -1, COMM_JADE);	to--;	if (ret & 1)	    /* Got acknowledge */	    break;	if (!to) {    	    printk(KERN_INFO "Can not see ready bit from JADE DSP (reg=0x%X, value=0x%X)\n", reg, value);	    return;	}    }}static voidmodejade(struct BCState *bcs, int mode, int bc){    struct IsdnCardState *cs = bcs->cs;    int jade = bcs->hw.hscx.hscx;    if (cs->debug & L1_DEB_HSCX) {	char tmp[40];	sprintf(tmp, "jade %c mode %d ichan %d",		'A' + jade, mode, bc);	debugl1(cs, tmp);    }    bcs->mode = mode;    bcs->channel = bc;	    cs->BC_Write_Reg(cs, jade, jade_HDLC_MODE, (mode == L1_MODE_TRANS ? jadeMODE_TMO:0x00));    cs->BC_Write_Reg(cs, jade, jade_HDLC_CCR0, (jadeCCR0_PU|jadeCCR0_ITF));    cs->BC_Write_Reg(cs, jade, jade_HDLC_CCR1, 0x00);    jade_write_indirect(cs, jade_HDLC1SERRXPATH, 0x08);    jade_write_indirect(cs, jade_HDLC2SERRXPATH, 0x08);    jade_write_indirect(cs, jade_HDLC1SERTXPATH, 0x00);    jade_write_indirect(cs, jade_HDLC2SERTXPATH, 0x00);    cs->BC_Write_Reg(cs, jade, jade_HDLC_XCCR, 0x07);    cs->BC_Write_Reg(cs, jade, jade_HDLC_RCCR, 0x07);    if (bc == 0) {	cs->BC_Write_Reg(cs, jade, jade_HDLC_TSAX, 0x00);	cs->BC_Write_Reg(cs, jade, jade_HDLC_TSAR, 0x00);    } else {	cs->BC_Write_Reg(cs, jade, jade_HDLC_TSAX, 0x04);	cs->BC_Write_Reg(cs, jade, jade_HDLC_TSAR, 0x04);    }    switch (mode) {	case (L1_MODE_NULL):		cs->BC_Write_Reg(cs, jade, jade_HDLC_MODE, jadeMODE_TMO);		break;	case (L1_MODE_TRANS):		cs->BC_Write_Reg(cs, jade, jade_HDLC_MODE, (jadeMODE_TMO|jadeMODE_RAC|jadeMODE_XAC));		break;	case (L1_MODE_HDLC):		cs->BC_Write_Reg(cs, jade, jade_HDLC_MODE, (jadeMODE_RAC|jadeMODE_XAC));		break;    }    if (mode) {	cs->BC_Write_Reg(cs, jade, jade_HDLC_RCMD, (jadeRCMD_RRES|jadeRCMD_RMC));	cs->BC_Write_Reg(cs, jade, jade_HDLC_XCMD, jadeXCMD_XRES);	/* Unmask ints */	cs->BC_Write_Reg(cs, jade, jade_HDLC_IMR, 0xF8);    }    else	/* Mask ints */	cs->BC_Write_Reg(cs, jade, jade_HDLC_IMR, 0x00);}static voidjade_l2l1(struct PStack *st, int pr, void *arg){    struct BCState *bcs = st->l1.bcs;    struct sk_buff *skb = arg;    u_long flags;    switch (pr) {	case (PH_DATA | REQUEST):		spin_lock_irqsave(&bcs->cs->lock, flags);		if (bcs->tx_skb) {			skb_queue_tail(&bcs->squeue, skb);		} else {			bcs->tx_skb = skb;			test_and_set_bit(BC_FLG_BUSY, &bcs->Flag);			bcs->hw.hscx.count = 0;			bcs->cs->BC_Send_Data(bcs);		}		spin_unlock_irqrestore(&bcs->cs->lock, flags);		break;	case (PH_PULL | INDICATION):		spin_lock_irqsave(&bcs->cs->lock, flags);		if (bcs->tx_skb) {			printk(KERN_WARNING "jade_l2l1: this shouldn't happen\n");		} else {			test_and_set_bit(BC_FLG_BUSY, &bcs->Flag);			bcs->tx_skb = skb;			bcs->hw.hscx.count = 0;			bcs->cs->BC_Send_Data(bcs);		}		spin_unlock_irqrestore(&bcs->cs->lock, flags);		break;	case (PH_PULL | REQUEST):		if (!bcs->tx_skb) {		    test_and_clear_bit(FLG_L1_PULL_REQ, &st->l1.Flags);		    st->l1.l1l2(st, PH_PULL | CONFIRM, NULL);		} else		    test_and_set_bit(FLG_L1_PULL_REQ, &st->l1.Flags);		break;	case (PH_ACTIVATE | REQUEST):		spin_lock_irqsave(&bcs->cs->lock, flags);		test_and_set_bit(BC_FLG_ACTIV, &bcs->Flag);		modejade(bcs, st->l1.mode, st->l1.bc);		spin_unlock_irqrestore(&bcs->cs->lock, flags);		l1_msg_b(st, pr, arg);		break;	case (PH_DEACTIVATE | REQUEST):		l1_msg_b(st, pr, arg);		break;	case (PH_DEACTIVATE | CONFIRM):		spin_lock_irqsave(&bcs->cs->lock, flags);		test_and_clear_bit(BC_FLG_ACTIV, &bcs->Flag);		test_and_clear_bit(BC_FLG_BUSY, &bcs->Flag);		modejade(bcs, 0, st->l1.bc);		spin_unlock_irqrestore(&bcs->cs->lock, flags);		st->l1.l1l2(st, PH_DEACTIVATE | CONFIRM, NULL);		break;    }}static voidclose_jadestate(struct BCState *bcs){    modejade(bcs, 0, bcs->channel);    if (test_and_clear_bit(BC_FLG_INIT, &bcs->Flag)) {	if (bcs->hw.hscx.rcvbuf) {		kfree(bcs->hw.hscx.rcvbuf);		bcs->hw.hscx.rcvbuf = NULL;	}	if (bcs->blog) {		kfree(bcs->blog);		bcs->blog = NULL;	}	skb_queue_purge(&bcs->rqueue);	skb_queue_purge(&bcs->squeue);	if (bcs->tx_skb) {		dev_kfree_skb_any(bcs->tx_skb);		bcs->tx_skb = NULL;		test_and_clear_bit(BC_FLG_BUSY, &bcs->Flag);	}    }}static intopen_jadestate(struct IsdnCardState *cs, struct BCState *bcs){	if (!test_and_set_bit(BC_FLG_INIT, &bcs->Flag)) {		if (!(bcs->hw.hscx.rcvbuf = kmalloc(HSCX_BUFMAX, GFP_ATOMIC))) {			printk(KERN_WARNING			       "HiSax: No memory for hscx.rcvbuf\n");			test_and_clear_bit(BC_FLG_INIT, &bcs->Flag);			return (1);		}		if (!(bcs->blog = kmalloc(MAX_BLOG_SPACE, GFP_ATOMIC))) {			printk(KERN_WARNING				"HiSax: No memory for bcs->blog\n");			test_and_clear_bit(BC_FLG_INIT, &bcs->Flag);			kfree(bcs->hw.hscx.rcvbuf);			bcs->hw.hscx.rcvbuf = NULL;			return (2);		}		skb_queue_head_init(&bcs->rqueue);		skb_queue_head_init(&bcs->squeue);	}	bcs->tx_skb = NULL;	test_and_clear_bit(BC_FLG_BUSY, &bcs->Flag);	bcs->event = 0;	bcs->hw.hscx.rcvidx = 0;	bcs->tx_cnt = 0;	return (0);}static intsetstack_jade(struct PStack *st, struct BCState *bcs){	bcs->channel = st->l1.bc;	if (open_jadestate(st->l1.hardware, bcs))		return (-1);	st->l1.bcs = bcs;	st->l2.l2l1 = jade_l2l1;	setstack_manager(st);	bcs->st = st;	setstack_l1_B(st);	return (0);}void __initclear_pending_jade_ints(struct IsdnCardState *cs){	int val;	char tmp[64];	cs->BC_Write_Reg(cs, 0, jade_HDLC_IMR, 0x00);	cs->BC_Write_Reg(cs, 1, jade_HDLC_IMR, 0x00);	val = cs->BC_Read_Reg(cs, 1, jade_HDLC_ISR);	sprintf(tmp, "jade B ISTA %x", val);	debugl1(cs, tmp);	val = cs->BC_Read_Reg(cs, 0, jade_HDLC_ISR);	sprintf(tmp, "jade A ISTA %x", val);	debugl1(cs, tmp);	val = cs->BC_Read_Reg(cs, 1, jade_HDLC_STAR);	sprintf(tmp, "jade B STAR %x", val);	debugl1(cs, tmp);	val = cs->BC_Read_Reg(cs, 0, jade_HDLC_STAR);	sprintf(tmp, "jade A STAR %x", val);	debugl1(cs, tmp);	/* Unmask ints */	cs->BC_Write_Reg(cs, 0, jade_HDLC_IMR, 0xF8);	cs->BC_Write_Reg(cs, 1, jade_HDLC_IMR, 0xF8);}void __initinitjade(struct IsdnCardState *cs){	cs->bcs[0].BC_SetStack = setstack_jade;	cs->bcs[1].BC_SetStack = setstack_jade;	cs->bcs[0].BC_Close = close_jadestate;	cs->bcs[1].BC_Close = close_jadestate;	cs->bcs[0].hw.hscx.hscx = 0;	cs->bcs[1].hw.hscx.hscx = 1;	/* Stop DSP audio tx/rx */	jade_write_indirect(cs, 0x11, 0x0f);	jade_write_indirect(cs, 0x17, 0x2f);	/* Transparent Mode, RxTx inactive, No Test, No RFS/TFS */	cs->BC_Write_Reg(cs, 0, jade_HDLC_MODE, jadeMODE_TMO);	cs->BC_Write_Reg(cs, 1, jade_HDLC_MODE, jadeMODE_TMO);	/* Power down, 1-Idle, RxTx least significant bit first */	cs->BC_Write_Reg(cs, 0, jade_HDLC_CCR0, 0x00);	cs->BC_Write_Reg(cs, 1, jade_HDLC_CCR0, 0x00);	/* Mask all interrupts */	cs->BC_Write_Reg(cs, 0, jade_HDLC_IMR,  0x00);	cs->BC_Write_Reg(cs, 1, jade_HDLC_IMR,  0x00);	/* Setup host access to hdlc controller */	jade_write_indirect(cs, jade_HDLCCNTRACCESS, (jadeINDIRECT_HAH1|jadeINDIRECT_HAH2));	/* Unmask HDLC int (don磘 forget DSP int later on)*/	cs->BC_Write_Reg(cs, -1,jade_INT, (jadeINT_HDLC1|jadeINT_HDLC2));	/* once again TRANSPARENT */		modejade(cs->bcs, 0, 0);	modejade(cs->bcs + 1, 0, 0);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区免费大片| 久久蜜桃av一区二区天堂| 国产一区二区三区精品视频| 中文字幕乱码久久午夜不卡| 欧美日韩中文字幕一区二区| 国产精品一区二区免费不卡 | 亚洲精品在线免费观看视频| 97精品久久久午夜一区二区三区 | 亚洲综合色在线| 国产欧美精品在线观看| 91麻豆精品91久久久久久清纯| 成人黄页毛片网站| 国产在线精品不卡| 日韩成人dvd| 亚洲综合免费观看高清完整版| 久久女同精品一区二区| 777欧美精品| 欧美日韩精品一区二区三区| jlzzjlzz亚洲日本少妇| 国产一区欧美日韩| 日韩国产精品久久久| 亚洲综合色成人| 亚洲美女视频一区| 中文字幕在线一区二区三区| 久久综合九色综合久久久精品综合 | 亚洲四区在线观看| 久久久久久97三级| 精品乱人伦一区二区三区| 欧美日高清视频| 日本高清免费不卡视频| 91麻豆国产自产在线观看| 成人激情黄色小说| 成人黄色在线网站| av欧美精品.com| 成人三级伦理片| 成人三级伦理片| 成人久久久精品乱码一区二区三区| 国模大尺度一区二区三区| 久久99久久久久久久久久久| 天天操天天综合网| 日韩av一区二区在线影视| 日韩影院在线观看| 男女男精品网站| 麻豆成人免费电影| 精品影视av免费| 国产乱码精品一区二区三| 国产激情一区二区三区| 国产成人aaaa| 成人av电影在线网| 91麻豆免费看| 欧美色网站导航| 欧美人xxxx| 精品久久久久久综合日本欧美 | 中文字幕二三区不卡| 国产精品美女久久久久av爽李琼| 国产精品免费观看视频| 亚洲男人都懂的| 视频一区国产视频| 国产一区福利在线| 成+人+亚洲+综合天堂| 色综合亚洲欧洲| 欧美日本国产视频| 久久九九久精品国产免费直播| 欧美激情在线一区二区三区| 亚洲天堂a在线| 日本亚洲天堂网| 国产福利91精品一区二区三区| 成人va在线观看| 欧美久久久一区| 久久久综合网站| 亚洲乱码国产乱码精品精小说| 天天综合色天天综合| 精品一区二区在线看| eeuss鲁片一区二区三区| 在线亚洲一区观看| 精品第一国产综合精品aⅴ| 国产三级久久久| 亚洲第一综合色| 国产伦精品一区二区三区免费| 成人av在线影院| 91精品国产综合久久久久久漫画| 久久免费的精品国产v∧| 亚洲免费观看视频| 久久99九九99精品| 日本道精品一区二区三区| 日韩美女天天操| 亚洲欧美电影一区二区| 精品在线播放免费| 欧美午夜精品理论片a级按摩| 精品成人在线观看| 亚洲一级电影视频| 国产高清不卡一区二区| 欧美性猛片aaaaaaa做受| 久久久久久久久97黄色工厂| 亚洲成人资源网| 成人听书哪个软件好| 日韩欧美一级精品久久| 最新高清无码专区| 国产一区二区三区久久悠悠色av| 在线一区二区三区做爰视频网站| 久久亚洲一级片| 亚洲丰满少妇videoshd| eeuss影院一区二区三区| 欧美精品一区二区三区四区 | 亚洲国产成人va在线观看天堂| 国产成人午夜99999| 91精品国产综合久久久久久久久久 | 国产精品福利av| 精品一区二区综合| 51精品久久久久久久蜜臀| 日韩美女久久久| 国产乱码精品1区2区3区| 91精品国产综合久久香蕉的特点| 亚洲日本一区二区| 成人黄色电影在线| 久久人人爽人人爽| 青青国产91久久久久久| 在线亚洲高清视频| 一区二区中文视频| 成人视屏免费看| 国产日产欧美一区| 国产一二三精品| 欧美精品一区二区不卡| 久久成人羞羞网站| 91精品黄色片免费大全| 天堂资源在线中文精品| 色综合天天综合给合国产| 国产精品美女久久久久久久网站| 国产一区二区三区香蕉| 精品国产1区2区3区| 美女久久久精品| 91精品国产入口在线| 首页综合国产亚洲丝袜| 欧美怡红院视频| 日韩理论片在线| 99久久精品国产一区二区三区| 国产精品成人网| 成人黄动漫网站免费app| 中文字幕av一区二区三区免费看 | 国产精品自在在线| 国产亚洲短视频| 成人一区二区三区视频在线观看| 国产欧美日韩在线看| 成人午夜视频免费看| 国产精品久久久久久久久搜平片 | 91啪亚洲精品| 亚洲综合成人在线视频| 欧美日韩精品一区二区在线播放| 五月综合激情网| 日韩一区二区三区高清免费看看 | 成人一区二区三区视频 | 亚洲人成小说网站色在线| 色偷偷久久人人79超碰人人澡| 亚洲一区在线电影| 欧美久久一区二区| 精品一区二区三区在线视频| 欧美激情一区二区三区在线| 92国产精品观看| 亚洲成人黄色影院| 日韩欧美激情四射| 国产·精品毛片| 亚洲综合在线视频| 日韩一区二区三区电影| 国产成人免费视频网站高清观看视频| 久久蜜桃香蕉精品一区二区三区| 不卡av在线网| 婷婷综合另类小说色区| 337p粉嫩大胆色噜噜噜噜亚洲 | 亚洲国产欧美日韩另类综合| 欧美一区二区三区色| 国产精品一区二区久久精品爱涩| 国产精品乱人伦中文| 欧美午夜精品电影| 美女视频一区二区三区| √…a在线天堂一区| 在线成人小视频| 国产91在线观看丝袜| 午夜久久久久久| 中文字幕第一页久久| 欧美区视频在线观看| 国产成人综合视频| 亚洲chinese男男1069| 久久精品在线观看| 亚洲日本丝袜连裤袜办公室| 色妞www精品视频| 久久国产精品色婷婷| 国产精品久久久久桃色tv| 3d动漫精品啪啪1区2区免费| 成人免费高清视频在线观看| 日韩二区在线观看| 综合婷婷亚洲小说| 2024国产精品视频| 欧美日韩aaa| 一本在线高清不卡dvd| 久久www免费人成看片高清| 亚洲欧洲在线观看av| 欧美大黄免费观看| 欧美系列在线观看| av午夜精品一区二区三区| 久久国产麻豆精品|