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

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

?? jade.c

?? linux-2.4.29操作系統的源碼
?? C
字號:
/* $Id: jade.c,v 1.1.4.1 2001/11/20 14:19:36 kai 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. * */#define __NO_VERSION__#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;    long flags;    u_char ret;    save_flags(flags);    cli();    /* 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) {	    restore_flags(flags);    	    printk(KERN_INFO "Can not see ready bit from JADE DSP (reg=0x%X, value=0x%X)\n", reg, value);	    return;	}    }    restore_flags(flags);}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);}voidjade_sched_event(struct BCState *bcs, int event){    bcs->event |= 1 << event;    queue_task(&bcs->tqueue, &tq_immediate);    mark_bh(IMMEDIATE_BH);}static voidjade_l2l1(struct PStack *st, int pr, void *arg){    struct sk_buff *skb = arg;    long flags;    switch (pr) {	case (PH_DATA | REQUEST):		save_flags(flags);		cli();		if (st->l1.bcs->tx_skb) {			skb_queue_tail(&st->l1.bcs->squeue, skb);			restore_flags(flags);		} else {			st->l1.bcs->tx_skb = skb;			test_and_set_bit(BC_FLG_BUSY, &st->l1.bcs->Flag);			st->l1.bcs->hw.hscx.count = 0;			restore_flags(flags);			st->l1.bcs->cs->BC_Send_Data(st->l1.bcs);		}		break;	case (PH_PULL | INDICATION):		if (st->l1.bcs->tx_skb) {			printk(KERN_WARNING "jade_l2l1: this shouldn't happen\n");			break;		}		test_and_set_bit(BC_FLG_BUSY, &st->l1.bcs->Flag);		st->l1.bcs->tx_skb = skb;		st->l1.bcs->hw.hscx.count = 0;		st->l1.bcs->cs->BC_Send_Data(st->l1.bcs);		break;	case (PH_PULL | REQUEST):		if (!st->l1.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):		test_and_set_bit(BC_FLG_ACTIV, &st->l1.bcs->Flag);		modejade(st->l1.bcs, st->l1.mode, st->l1.bc);		l1_msg_b(st, pr, arg);		break;	case (PH_DEACTIVATE | REQUEST):		l1_msg_b(st, pr, arg);		break;	case (PH_DEACTIVATE | CONFIRM):		test_and_clear_bit(BC_FLG_ACTIV, &st->l1.bcs->Flag);		test_and_clear_bit(BC_FLG_BUSY, &st->l1.bcs->Flag);		modejade(st->l1.bcs, 0, st->l1.bc);		st->l1.l1l2(st, PH_DEACTIVATE | CONFIRM, NULL);		break;    }}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);}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中文字幕一区二区三区| 久久久国产一区二区三区四区小说| 免费的国产精品| 亚洲一区二区三区影院| www国产亚洲精品久久麻豆| 欧美一区二区三区思思人| 欧美色图12p| 欧美性一区二区| 欧美午夜宅男影院| 欧美日韩国产影片| 欧美日韩国产综合视频在线观看| 91在线国产福利| 99在线热播精品免费| 97se亚洲国产综合自在线| 成人sese在线| 99国产精品99久久久久久| av午夜一区麻豆| 色婷婷久久久综合中文字幕| 91蜜桃免费观看视频| 91免费国产在线| 欧洲精品中文字幕| 欧美色网一区二区| 日韩三级视频中文字幕| 日韩一级完整毛片| 精品国产凹凸成av人网站| 国产日韩成人精品| 亚洲欧美电影一区二区| 一级特黄大欧美久久久| 日韩黄色小视频| 国产在线精品国自产拍免费| 99热在这里有精品免费| 在线观看免费一区| 精品入口麻豆88视频| 欧美激情在线观看视频免费| 亚洲欧美一区二区视频| 亚洲国产色一区| 精品一区二区免费视频| 国产成人av网站| 色婷婷一区二区| 欧美一区二区三区不卡| 国产精品理伦片| 日韩精品成人一区二区在线| 国产麻豆成人精品| 色琪琪一区二区三区亚洲区| 中文字幕va一区二区三区| 伊人夜夜躁av伊人久久| 日本不卡一区二区三区高清视频| 国产成人高清视频| 欧美日本不卡视频| 欧美激情一区二区三区全黄| 亚洲国产精品嫩草影院| 精品在线播放免费| 色999日韩国产欧美一区二区| 日韩一区二区三区免费观看| 国产精品国产三级国产| 日韩va欧美va亚洲va久久| 91在线视频免费观看| 欧美成人女星排名| 亚洲成人av一区| 97久久超碰国产精品| 精品捆绑美女sm三区| 亚洲一卡二卡三卡四卡无卡久久| 国产成人自拍网| 日韩一区二区精品葵司在线 | 日韩理论片中文av| 麻豆精品视频在线观看| 欧美中文字幕久久| 国产精品欧美一级免费| 精品一区二区在线免费观看| 欧美日韩国产欧美日美国产精品| 国产偷国产偷亚洲高清人白洁 | 欧美色偷偷大香| 久久久久99精品一区| 麻豆国产一区二区| 久久久亚洲欧洲日产国码αv| 一区二区三区av电影 | 国产一区 二区 三区一级| 欧美三级一区二区| 一区二区三区免费在线观看| 成人av在线资源网| 国产女主播在线一区二区| 久久99国产精品免费| 91精品欧美福利在线观看| 亚洲一区二区三区免费视频| 97久久超碰国产精品| 国产精品盗摄一区二区三区| 国产成人免费av在线| 久久久久99精品一区| 国产精品一区在线观看乱码 | 欧美一级黄色片| 五月天中文字幕一区二区| 色屁屁一区二区| 亚洲精品国产品国语在线app| 91免费看`日韩一区二区| 国产精品黄色在线观看| 91影院在线免费观看| 18欧美亚洲精品| 91浏览器入口在线观看| 亚洲人成小说网站色在线 | 日日欢夜夜爽一区| 丝袜脚交一区二区| 91麻豆精品国产无毒不卡在线观看| 亚洲精品自拍动漫在线| 欧美亚洲日本国产| 蜜臀99久久精品久久久久久软件| 欧美一区二区在线视频| 91丨九色丨蝌蚪丨老版| 中文字幕日韩一区| 激情综合亚洲精品| 美女脱光内衣内裤视频久久网站| 麻豆freexxxx性91精品| 成人一区在线观看| 久久99精品网久久| www.日韩av| 欧美日韩亚洲综合一区| 欧美经典一区二区| 99久久精品费精品国产一区二区| 亚洲免费在线看| 欧美精品少妇一区二区三区| 免费高清不卡av| 欧美国产乱子伦| 欧美日韩久久一区| 激情偷乱视频一区二区三区| 国产色婷婷亚洲99精品小说| 色哟哟国产精品免费观看| 日韩av不卡在线观看| 国产视频一区在线播放| 欧洲精品一区二区三区在线观看| 日韩国产高清影视| 欧美国产精品v| 欧美日韩精品一区二区三区| 久久爱另类一区二区小说| 亚洲人精品一区| 日韩女优视频免费观看| 色欧美乱欧美15图片| 国产在线看一区| 亚洲蜜桃精久久久久久久| 日韩欧美高清在线| 不卡av免费在线观看| 美女在线一区二区| 亚洲成a人v欧美综合天堂| 久久久一区二区三区| 欧美三片在线视频观看| 国产精品综合在线视频| 亚洲高清中文字幕| 国产精品三级在线观看| 日韩欧美一区中文| 91久久精品国产91性色tv| 国产综合色在线视频区| proumb性欧美在线观看| 成人综合激情网| 日韩av不卡一区二区| 欧美精品一二三| 精品一区二区三区不卡| 亚洲午夜电影在线观看| 欧美国产激情一区二区三区蜜月 | 欧美色倩网站大全免费| 国产不卡视频在线观看| 美国三级日本三级久久99| 亚洲午夜久久久久中文字幕久| 国产精品美女一区二区三区| 久久久午夜精品理论片中文字幕| 在线播放91灌醉迷j高跟美女 | 中文字幕的久久| 精品国内片67194| 91精品一区二区三区久久久久久| 欧美日韩专区在线| 91黄色免费网站| 色婷婷国产精品久久包臀| www.亚洲激情.com| 99国产麻豆精品| 91亚洲精品久久久蜜桃| 91在线播放网址| 91视频国产资源| 欧美日韩一区成人| 欧美精三区欧美精三区| 欧美乱妇15p| 日韩欧美三级在线| 精品国产亚洲在线| 久久精品视频在线免费观看| 国产日韩精品一区二区三区在线| 精品成人在线观看| 久久精品日韩一区二区三区| 久久这里只有精品6| 国产精品污www在线观看| 国产精品国产三级国产普通话99 | 老司机精品视频导航| 韩国精品免费视频| 成人福利视频在线| 色综合久久综合| 日日夜夜精品视频天天综合网| 麻豆成人久久精品二区三区红 | 色综合久久久久综合99| 在线亚洲高清视频| 欧美日韩高清不卡| 亚洲精品在线网站| 亚洲人成网站在线| 六月丁香综合在线视频| 成人激情小说网站| 欧美日韩国产经典色站一区二区三区 |