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

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

?? diva.c

?? linux-2.4.29操作系統的源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* $Id: diva.c,v 1.1.4.2 2002/08/30 11:21:00 keil Exp $ * * low level stuff for Eicon.Diehl Diva Family ISDN cards * * Author       Karsten Keil * Copyright    by Karsten Keil      <keil@isdn4linux.de> *  * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. * * For changes and modifications please read * ../../../Documentation/isdn/HiSax.cert * * Thanks to Eicon Technology for documents and information * */#define __NO_VERSION__#include <linux/init.h>#include <linux/config.h>#include "hisax.h"#include "isac.h"#include "hscx.h"#include "ipac.h"#include "ipacx.h"#include "isdnl1.h"#include <linux/pci.h>#include <linux/isapnp.h>extern const char *CardType[];const char *Diva_revision = "$Revision: 1.1.4.2 $";#define byteout(addr,val) outb(val,addr)#define bytein(addr) inb(addr)#define DIVA_HSCX_DATA		0#define DIVA_HSCX_ADR		4#define DIVA_ISA_ISAC_DATA	2#define DIVA_ISA_ISAC_ADR	6#define DIVA_ISA_CTRL		7#define DIVA_IPAC_ADR		0#define DIVA_IPAC_DATA		1#define DIVA_PCI_ISAC_DATA	8#define DIVA_PCI_ISAC_ADR	0xc#define DIVA_PCI_CTRL		0x10/* SUB Types */#define DIVA_ISA	1#define DIVA_PCI	2#define DIVA_IPAC_ISA	3#define DIVA_IPAC_PCI	4#define DIVA_IPACX_PCI	5/* CTRL (Read) */#define DIVA_IRQ_STAT	0x01#define DIVA_EEPROM_SDA	0x02/* CTRL (Write) */#define DIVA_IRQ_REQ	0x01#define DIVA_RESET	0x08#define DIVA_EEPROM_CLK	0x40#define DIVA_PCI_LED_A	0x10#define DIVA_PCI_LED_B	0x20#define DIVA_ISA_LED_A	0x20#define DIVA_ISA_LED_B	0x40#define DIVA_IRQ_CLR	0x80/* Siemens PITA */#define PITA_MISC_REG		0x1c#ifdef __BIG_ENDIAN#define PITA_PARA_SOFTRESET	0x00000001#define PITA_SER_SOFTRESET	0x00000002#define PITA_PARA_MPX_MODE	0x00000004#define PITA_INT0_ENABLE	0x00000200#else#define PITA_PARA_SOFTRESET	0x01000000#define PITA_SER_SOFTRESET	0x02000000#define PITA_PARA_MPX_MODE	0x04000000#define PITA_INT0_ENABLE	0x00020000#endif#define PITA_INT0_STATUS	0x02static inline u_charreadreg(unsigned int ale, unsigned int adr, u_char off){	register u_char ret;	long flags;	save_flags(flags);	cli();	byteout(ale, off);	ret = bytein(adr);	restore_flags(flags);	return (ret);}static inline voidreadfifo(unsigned int ale, unsigned int adr, u_char off, u_char * data, int size){	/* fifo read without cli because it's allready done  */	byteout(ale, off);	insb(adr, data, size);}static inline voidwritereg(unsigned int ale, unsigned int adr, u_char off, u_char data){	long flags;	save_flags(flags);	cli();	byteout(ale, off);	byteout(adr, data);	restore_flags(flags);}static inline voidwritefifo(unsigned int ale, unsigned int adr, u_char off, u_char *data, int size){	/* fifo write without cli because it's allready done  */	byteout(ale, off);	outsb(adr, data, size);}static inline u_charmemreadreg(unsigned long adr, u_char off){	return(*((unsigned char *)		(((unsigned int *)adr) + off)));}static inline voidmemwritereg(unsigned long adr, u_char off, u_char data){	register u_char *p;		p = (unsigned char *)(((unsigned int *)adr) + off);	*p = data;}/* Interface functions */static u_charReadISAC(struct IsdnCardState *cs, u_char offset){	return(readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, offset));}static voidWriteISAC(struct IsdnCardState *cs, u_char offset, u_char value){	writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, offset, value);}static voidReadISACfifo(struct IsdnCardState *cs, u_char *data, int size){	readfifo(cs->hw.diva.isac_adr, cs->hw.diva.isac, 0, data, size);}static voidWriteISACfifo(struct IsdnCardState *cs, u_char *data, int size){	writefifo(cs->hw.diva.isac_adr, cs->hw.diva.isac, 0, data, size);}static u_charReadISAC_IPAC(struct IsdnCardState *cs, u_char offset){	return (readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, offset+0x80));}static voidWriteISAC_IPAC(struct IsdnCardState *cs, u_char offset, u_char value){	writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, offset|0x80, value);}static voidReadISACfifo_IPAC(struct IsdnCardState *cs, u_char * data, int size){	readfifo(cs->hw.diva.isac_adr, cs->hw.diva.isac, 0x80, data, size);}static voidWriteISACfifo_IPAC(struct IsdnCardState *cs, u_char * data, int size){	writefifo(cs->hw.diva.isac_adr, cs->hw.diva.isac, 0x80, data, size);}static u_charReadHSCX(struct IsdnCardState *cs, int hscx, u_char offset){	return(readreg(cs->hw.diva.hscx_adr,		cs->hw.diva.hscx, offset + (hscx ? 0x40 : 0)));}static voidWriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value){	writereg(cs->hw.diva.hscx_adr,		cs->hw.diva.hscx, offset + (hscx ? 0x40 : 0), value);}static u_charMemReadISAC_IPAC(struct IsdnCardState *cs, u_char offset){	return (memreadreg(cs->hw.diva.cfg_reg, offset+0x80));}static voidMemWriteISAC_IPAC(struct IsdnCardState *cs, u_char offset, u_char value){	memwritereg(cs->hw.diva.cfg_reg, offset|0x80, value);}static voidMemReadISACfifo_IPAC(struct IsdnCardState *cs, u_char * data, int size){	while(size--)		*data++ = memreadreg(cs->hw.diva.cfg_reg, 0x80);}static voidMemWriteISACfifo_IPAC(struct IsdnCardState *cs, u_char * data, int size){	while(size--)		memwritereg(cs->hw.diva.cfg_reg, 0x80, *data++);}static u_charMemReadHSCX(struct IsdnCardState *cs, int hscx, u_char offset){	return(memreadreg(cs->hw.diva.cfg_reg, offset + (hscx ? 0x40 : 0)));}static voidMemWriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value){	memwritereg(cs->hw.diva.cfg_reg, offset + (hscx ? 0x40 : 0), value);}/* IO-Functions for IPACX type cards */static u_charMemReadISAC_IPACX(struct IsdnCardState *cs, u_char offset){	return (memreadreg(cs->hw.diva.cfg_reg, offset));}static voidMemWriteISAC_IPACX(struct IsdnCardState *cs, u_char offset, u_char value){	memwritereg(cs->hw.diva.cfg_reg, offset, value);}static voidMemReadISACfifo_IPACX(struct IsdnCardState *cs, u_char * data, int size){	while(size--)		*data++ = memreadreg(cs->hw.diva.cfg_reg, 0);}static voidMemWriteISACfifo_IPACX(struct IsdnCardState *cs, u_char * data, int size){	while(size--)		memwritereg(cs->hw.diva.cfg_reg, 0, *data++);}static u_charMemReadHSCX_IPACX(struct IsdnCardState *cs, int hscx, u_char offset){	return(memreadreg(cs->hw.diva.cfg_reg, offset +                     (hscx ? IPACX_OFF_B2 : IPACX_OFF_B1)));}static voidMemWriteHSCX_IPACX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value){	memwritereg(cs->hw.diva.cfg_reg, offset +               (hscx ? IPACX_OFF_B2 : IPACX_OFF_B1), value);}/* * fast interrupt HSCX stuff goes here */#define READHSCX(cs, nr, reg) readreg(cs->hw.diva.hscx_adr, \		cs->hw.diva.hscx, reg + (nr ? 0x40 : 0))#define WRITEHSCX(cs, nr, reg, data) writereg(cs->hw.diva.hscx_adr, \                cs->hw.diva.hscx, reg + (nr ? 0x40 : 0), data)#define READHSCXFIFO(cs, nr, ptr, cnt) readfifo(cs->hw.diva.hscx_adr, \		cs->hw.diva.hscx, (nr ? 0x40 : 0), ptr, cnt)#define WRITEHSCXFIFO(cs, nr, ptr, cnt) writefifo(cs->hw.diva.hscx_adr, \		cs->hw.diva.hscx, (nr ? 0x40 : 0), ptr, cnt)#include "hscx_irq.c"static voiddiva_interrupt(int intno, void *dev_id, struct pt_regs *regs){	struct IsdnCardState *cs = dev_id;	u_char val, sval;	int cnt=5;	if (!cs) {		printk(KERN_WARNING "Diva: Spurious interrupt!\n");		return;	}	while (((sval = bytein(cs->hw.diva.ctrl)) & DIVA_IRQ_REQ) && cnt) {		val = readreg(cs->hw.diva.hscx_adr, cs->hw.diva.hscx, HSCX_ISTA + 0x40);		if (val)			hscx_int_main(cs, val);		val = readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, ISAC_ISTA);		if (val)			isac_interrupt(cs, val);		cnt--;	}	if (!cnt)		printk(KERN_WARNING "Diva: IRQ LOOP\n");	writereg(cs->hw.diva.hscx_adr, cs->hw.diva.hscx, HSCX_MASK, 0xFF);	writereg(cs->hw.diva.hscx_adr, cs->hw.diva.hscx, HSCX_MASK + 0x40, 0xFF);	writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, ISAC_MASK, 0xFF);	writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, ISAC_MASK, 0x0);	writereg(cs->hw.diva.hscx_adr, cs->hw.diva.hscx, HSCX_MASK, 0x0);	writereg(cs->hw.diva.hscx_adr, cs->hw.diva.hscx, HSCX_MASK + 0x40, 0x0);}static voiddiva_irq_ipac_isa(int intno, void *dev_id, struct pt_regs *regs){	struct IsdnCardState *cs = dev_id;	u_char ista,val;	int icnt=5;	if (!cs) {		printk(KERN_WARNING "Diva: Spurious interrupt!\n");		return;	}	ista = readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, IPAC_ISTA);Start_IPACISA:	if (cs->debug & L1_DEB_IPAC)		debugl1(cs, "IPAC ISTA %02X", ista);	if (ista & 0x0f) {		val = readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, HSCX_ISTA + 0x40);		if (ista & 0x01)			val |= 0x01;		if (ista & 0x04)			val |= 0x02;		if (ista & 0x08)			val |= 0x04;		if (val)			hscx_int_main(cs, val);	}	if (ista & 0x20) {		val = 0xfe & readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, ISAC_ISTA + 0x80);		if (val) {			isac_interrupt(cs, val);		}	}	if (ista & 0x10) {		val = 0x01;		isac_interrupt(cs, val);	}	ista  = readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, IPAC_ISTA);	if ((ista & 0x3f) && icnt) {		icnt--;		goto Start_IPACISA;	}	if (!icnt)		printk(KERN_WARNING "DIVA IPAC IRQ LOOP\n");	writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, IPAC_MASK, 0xFF);	writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, IPAC_MASK, 0xC0);}static inline voidMemwaitforCEC(struct IsdnCardState *cs, int hscx){	int to = 50;	while ((MemReadHSCX(cs, hscx, HSCX_STAR) & 0x04) && to) {		udelay(1);		to--;	}	if (!to)		printk(KERN_WARNING "HiSax: waitforCEC timeout\n");}static inline voidMemwaitforXFW(struct IsdnCardState *cs, int hscx){	int to = 50;	while ((!(MemReadHSCX(cs, hscx, HSCX_STAR) & 0x44) == 0x40) && to) {		udelay(1);		to--;	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人video| 日本女优在线视频一区二区| 午夜精品久久一牛影视| 国产一区二区精品在线观看| 欧美在线制服丝袜| 国产精品乱子久久久久| 日韩av成人高清| 91福利区一区二区三区| 国产欧美日韩在线看| 青青草国产成人av片免费 | 日韩美女啊v在线免费观看| 美女精品自拍一二三四| 在线不卡中文字幕| 欧美日韩国产bt| 亚洲啪啪综合av一区二区三区| 久久精工是国产品牌吗| 欧美日韩精品一区二区在线播放| 中文字幕在线不卡一区 | 性做久久久久久久免费看| 本田岬高潮一区二区三区| 久久综合色婷婷| 免费在线观看一区| 欧美一区二区三区日韩| 日韩av不卡一区二区| 欧美精品xxxxbbbb| 亚洲成人自拍网| 欧美群妇大交群中文字幕| 亚洲一区二区三区爽爽爽爽爽 | 亚洲视频在线一区观看| 丁香另类激情小说| 国产精品拍天天在线| 成人永久aaa| 国产精品久久三| 91丨porny丨国产入口| 亚洲视频你懂的| 在线免费不卡视频| 首页国产丝袜综合| 3751色影院一区二区三区| 日本中文字幕一区二区有限公司| 91精品国产综合久久久蜜臀粉嫩| 美日韩一区二区三区| 日韩美女一区二区三区四区| 精品一区二区三区的国产在线播放| 欧美电影免费观看完整版| 国产曰批免费观看久久久| 中文字幕精品—区二区四季| 99re热视频这里只精品| 亚洲bt欧美bt精品| 精品国产网站在线观看| 国产成人亚洲综合色影视| 国产亚洲短视频| 日本黄色一区二区| 天天色天天爱天天射综合| 日韩丝袜美女视频| 国产精品99精品久久免费| 亚洲欧洲三级电影| 欧美日本在线一区| 国产一区二区久久| 亚洲综合在线免费观看| 日韩丝袜美女视频| 成人不卡免费av| 亚洲国产cao| 久久久久久久久久久久久夜| 99精品国产91久久久久久| 视频一区二区三区在线| 国产欧美日韩不卡| 欧美日韩国产综合一区二区三区 | 91精品国产91综合久久蜜臀| 国产精品一区二区视频| 亚洲一级不卡视频| 2023国产精品自拍| 欧美伊人久久久久久午夜久久久久| 男人的j进女人的j一区| 国产精品视频线看| 91精品国产入口| av不卡免费电影| 免费人成黄页网站在线一区二区| 国产精品第13页| 日韩美女主播在线视频一区二区三区 | 欧美日韩国产成人在线91| 国产精品91一区二区| 三级成人在线视频| 中文字幕一区二区三区蜜月| 欧美丰满一区二区免费视频| 99riav久久精品riav| 麻豆视频观看网址久久| 亚洲一区二区三区激情| 亚洲丝袜美腿综合| 欧美一区二区三区播放老司机| 丁香啪啪综合成人亚洲小说| 日韩在线a电影| 综合久久给合久久狠狠狠97色| 91精品国产入口| 91激情五月电影| 岛国一区二区三区| 精品一区二区精品| 日一区二区三区| 亚洲主播在线播放| 亚洲另类在线一区| 国产精品欧美一区喷水| 久久久精品蜜桃| 日韩欧美成人激情| 日韩一区二区三区在线观看| 欧美巨大另类极品videosbest | 亚洲视频在线一区| 国产欧美日韩激情| 国产午夜精品久久久久久免费视| 欧美一区二区视频免费观看| 欧美日韩亚洲国产综合| 色综合视频一区二区三区高清| 成人禁用看黄a在线| 大陆成人av片| 成人动漫一区二区三区| 成人精品视频一区二区三区| 风间由美中文字幕在线看视频国产欧美| 日韩精品一区二区三区老鸭窝| 欧美一区二区不卡视频| 日韩一区二区免费在线观看| 在线播放国产精品二区一二区四区| 在线观看成人小视频| 欧美午夜不卡在线观看免费| 色婷婷av一区二区三区大白胸 | 国产白丝网站精品污在线入口| 国产一区二区日韩精品| 国产成人亚洲综合色影视| 国产91丝袜在线播放| 粉嫩aⅴ一区二区三区四区五区 | 欧美一区二区三区日韩| 日韩精品一区二区三区在线观看| 欧美一级在线免费| 26uuu亚洲综合色| 亚洲国产成人午夜在线一区| 亚洲日本在线天堂| 亚洲成人精品一区| 久久99精品国产| 成人v精品蜜桃久久一区| 91小视频免费观看| 欧美精品少妇一区二区三区 | 欧美一级片在线观看| 337p粉嫩大胆色噜噜噜噜亚洲 | 精品国产免费人成在线观看| 久久综合色8888| 中文字幕亚洲综合久久菠萝蜜| 亚洲一区二区三区免费视频| 麻豆精品久久精品色综合| 成人亚洲一区二区一| 欧美性一二三区| 26uuu亚洲综合色| 一区二区三区欧美视频| 蜜桃视频第一区免费观看| 中文字幕av一区二区三区高 | 欧美日韩黄视频| 日韩精品专区在线影院重磅| 欧美高清一级片在线观看| 亚洲午夜电影网| 国产精品羞羞答答xxdd| 欧美日韩在线播放一区| 国产丝袜美腿一区二区三区| 亚洲超碰精品一区二区| 国产成人精品免费| 欧美丰满少妇xxxxx高潮对白| 国产精品全国免费观看高清| 天堂久久一区二区三区| av网站一区二区三区| 日韩视频在线永久播放| 中文字幕一区二区在线播放| 国内欧美视频一区二区| 欧美综合在线视频| 国产精品天干天干在线综合| 日韩不卡手机在线v区| 欧美在线一二三四区| 国产精品色噜噜| 精品一区二区三区的国产在线播放| 色成人在线视频| 亚洲国产高清不卡| 国产麻豆一精品一av一免费| 7777女厕盗摄久久久| 亚洲一区二区视频| 91色porny在线视频| 国产精品久久久久久福利一牛影视| 美女视频一区在线观看| 欧美色欧美亚洲另类二区| 日韩理论在线观看| 99视频一区二区| 国产精品免费看片| 国产精品一级黄| 久久综合成人精品亚洲另类欧美 | 欧美日韩一区二区电影| 亚洲伦理在线免费看| 99国产精品一区| 日韩一区在线免费观看| k8久久久一区二区三区| 国产精品免费视频一区| 成人av资源网站| 综合激情成人伊人| 99精品国产91久久久久久 | 91污片在线观看| 亚洲视频一二区| 欧美优质美女网站| 午夜一区二区三区视频|