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

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

?? isapnp.c

?? mgcp協議源代碼。支持多種編碼:g711
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* *  ISA Plug & Play support *  Copyright (c) by Jaroslav Kysela <perex@suse.cz> * *  Modified by Ed Okerson <eokerson@quicknet.net> to work with the 2.2.x *  series of Linux kernels. 11/17/99 * *   This program is free software; you can redistribute it and/or modify *   it under the terms of the GNU General Public License as published by *   the Free Software Foundation; either version 2 of the License, or *   (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */#include <linux/autoconf.h>#if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS)#define MODVERSIONS#endif#ifdef MODVERSIONS#include <linux/modversions.h>#endif#include <linux/config.h>#include <linux/version.h>#define EXPORT_SYMTAB#include <linux/module.h>#include <linux/kernel.h>#include <linux/errno.h>#include <linux/ioport.h>#include <linux/string.h>#include <linux/malloc.h>#include <linux/proc_fs.h>#include <linux/delay.h>#include <asm/io.h>#include <asm/dma.h>#include <asm/irq.h>#include <linux/pci.h>#include <linux/vmalloc.h>#include <linux/poll.h>#include <linux/init.h>#include <asm/uaccess.h>#include "pnpio.h"#include "isapnp.h"#ifdef CONFIG_PROC_FS#include "isapnp_proc.c"#endif#if 0#define ISAPNP_REGION_OK#endif#if 0#define ISAPNP_DEBUG#endif//struct resource *pidxr_res = NULL;//struct resource *pnpwrp_res = NULL;//struct resource *isapnp_rdp_res = NULL;int isapnp_disable = 0;			/* Disable ISA PnP */int isapnp_rdp = 0;			/* Read Data Port */int isapnp_reset = 0;			/* reset all PnP cards (deactivate) */int isapnp_skip_pci_scan = 0;		/* skip PCI resource scanning */int isapnp_verbose = 1;			/* verbose mode */int isapnp_reserve_irq[16] = { [0 ... 15] = -1 };	/* reserve (don't use) some IRQ */int isapnp_reserve_dma[8] = { [0 ... 7] = -1 };		/* reserve (don't use) some DMA */int isapnp_reserve_io[16] = { [0 ... 15] = -1 };	/* reserve (don't use) some I/O region */int isapnp_reserve_mem[16] = { [0 ... 15] = -1 };	/* reserve (don't use) some memory region */int isapnp_debug = 0;MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");MODULE_DESCRIPTION("Generic ISA Plug & Play support");MODULE_PARM(isapnp_disable, "i");MODULE_PARM_DESC(isapnp_disable, "ISA Plug & Play disable");MODULE_PARM(isapnp_rdp, "i");MODULE_PARM_DESC(isapnp_rdp, "ISA Plug & Play read data port");MODULE_PARM(isapnp_reset, "i");MODULE_PARM_DESC(isapnp_reset, "ISA Plug & Play reset all cards");MODULE_PARM(isapnp_skip_pci_scan, "i");MODULE_PARM_DESC(isapnp_skip_pci_scan, "ISA Plug & Play skip PCI resource scanning");MODULE_PARM(isapnp_verbose, "i");MODULE_PARM_DESC(isapnp_verbose, "ISA Plug & Play verbose mode");MODULE_PARM(isapnp_reserve_irq, "1-16i");MODULE_PARM_DESC(isapnp_reserve_irq, "ISA Plug & Play - reserve IRQ line(s)");MODULE_PARM(isapnp_reserve_dma, "1-8i");MODULE_PARM_DESC(isapnp_reserve_dma, "ISA Plug & Play - reserve DMA channel(s)");MODULE_PARM(isapnp_reserve_io, "1-16i");MODULE_PARM_DESC(isapnp_reserve_io, "ISA Plug & Play - reserve I/O region(s) - port,size");MODULE_PARM(isapnp_reserve_mem, "1-16i");MODULE_PARM_DESC(isapnp_reserve_mem, "ISA Plug & Play - reserve memory region(s) - address,size");MODULE_PARM(isapnp_debug, "i");MODULE_PARM_DESC(isapnp_debug, "ISA Plug & Play - Turn on some debugging messages");#define _PIDXR		0x279#define _PNPWRP		0xa79/* short tags */#define _STAG_PNPVERNO		0x01#define _STAG_LOGDEVID		0x02#define _STAG_COMPATDEVID	0x03#define _STAG_IRQ		0x04#define _STAG_DMA		0x05#define _STAG_STARTDEP		0x06#define _STAG_ENDDEP		0x07#define _STAG_IOPORT		0x08#define _STAG_FIXEDIO		0x09#define _STAG_VENDOR		0x0e#define _STAG_END		0x0f/* long tags */#define _LTAG_MEMRANGE		0x81#define _LTAG_ANSISTR		0x82#define _LTAG_UNICODESTR	0x83#define _LTAG_VENDOR		0x84#define _LTAG_MEM32RANGE	0x85#define _LTAG_FIXEDMEM32RANGE	0x86struct pnp_bus *isapnp_cards = NULL;	/* ISA PnP cards */struct pnp_dev *isapnp_devices = NULL;	/* ISA PnP devices */static struct pnp_dev *isapnp_last_device = NULL;static unsigned char isapnp_checksum_value;static struct semaphore isapnp_cfg_mutex = MUTEX;static int isapnp_detected = 0;/* some prototypes */static int isapnp_config_prepare(struct pnp_dev *dev);static int isapnp_config_activate(struct pnp_dev *dev);static int isapnp_config_deactivate(struct pnp_dev *dev);static inline void write_data(unsigned char x){	outb(x, _PNPWRP);}static inline void write_address(unsigned char x){	outb(x, _PIDXR);	udelay(10);}static inline unsigned char read_data(void){	unsigned char val = inb(isapnp_rdp);	return val;}unsigned char isapnp_read_byte(unsigned char idx){	write_address(idx);	return read_data();}unsigned short isapnp_read_word(unsigned char idx){	unsigned short val;	val = isapnp_read_byte(idx);	val = (val << 8) + isapnp_read_byte(idx+1);	return val;}unsigned int isapnp_read_dword(unsigned char idx){	unsigned int val;	val = isapnp_read_byte(idx);	val = (val << 8) + isapnp_read_byte(idx+1);	val = (val << 8) + isapnp_read_byte(idx+2);	val = (val << 8) + isapnp_read_byte(idx+3);	return val;}void isapnp_write_byte(unsigned char idx, unsigned char val){	write_address(idx);	write_data(val);}void isapnp_write_word(unsigned char idx, unsigned short val){	isapnp_write_byte(idx, val >> 8);	isapnp_write_byte(idx+1, val);}void isapnp_write_dword(unsigned char idx, unsigned int val){	isapnp_write_byte(idx, val >> 24);	isapnp_write_byte(idx+1, val >> 16);	isapnp_write_byte(idx+2, val >> 8);	isapnp_write_byte(idx+3, val);}static void *isapnp_alloc(long size){	void *result;	result = kmalloc(size, GFP_KERNEL);	if (!result)		return NULL;	memset(result, 0, size);	return result;}static void isapnp_key(void){	unsigned char code = 0x6a, msb;	int i;	mdelay(1);	write_address(0x00);	write_address(0x00);	write_address(code);	for (i = 1; i < 32; i++) {		msb = ((code & 0x01) ^ ((code & 0x02) >> 1)) << 7;		code = (code >> 1) | msb;		write_address(code);	}}/* place all pnp cards in wait-for-key state */static void isapnp_wait(void){	isapnp_write_byte(0x02, 0x02);}void isapnp_wake(unsigned char csn){	isapnp_write_byte(0x03, csn);}void isapnp_device(unsigned char logdev){	isapnp_write_byte(0x07, logdev);}void isapnp_activate(unsigned char logdev){	isapnp_device(logdev);	isapnp_write_byte(ISAPNP_CFG_ACTIVATE, 1);	udelay(250);}void isapnp_deactivate(unsigned char logdev){	isapnp_device(logdev);	isapnp_write_byte(ISAPNP_CFG_ACTIVATE, 0);}static void __init isapnp_peek(unsigned char *data, int bytes){	int i, j;	unsigned char d;	for (i = 1; i <= bytes; i++) {		for (j = 0; j < 10; j++) {			d = isapnp_read_byte(0x05);			if (d & 1)				break;			udelay(10);		}		if (!(d & 1)) {			*data++ = 0xff;			continue;		}		d = isapnp_read_byte(0x04);	/* PRESDI */		isapnp_checksum_value += d;		if (data != NULL)			*data++ = d;	}}#define RDP_STEP	32	/* minimum is 4 */static int isapnp_next_rdp(void){	int rdp = isapnp_rdp;	while (rdp <= 0x3ff) {		if (!check_region(rdp, 1)) {			isapnp_rdp = rdp;			return 0;		}		rdp += RDP_STEP;	}	return -1;}/* Set read port address */static inline void isapnp_set_rdp(void){	isapnp_write_byte(0x00, isapnp_rdp >> 2);	udelay(100);}/* *	This code is badly broken. We cannot simply pick ports as the  *	ISAPnP specification implies. We should try 4 or 5 safe ports *	then bale by default. * *	This code touches NE2K cards or other devices and your box is *	history. */static int __init isapnp_isolate_rdp_select(void){	isapnp_wait();	isapnp_key();	/* Control: reset CSN and conditionally everything else too */	isapnp_write_byte(0x02, isapnp_reset ? 0x05 : 0x04);	mdelay(2);	isapnp_wait();	isapnp_key();	isapnp_wake(0x00);	if (isapnp_next_rdp() < 0) {		isapnp_wait();		return -1;	}	isapnp_set_rdp();	udelay(1000);	write_address(0x01);	udelay(1000);	return 0;}/* *  Isolate (assign uniqued CSN) to all ISA PnP devices. */static int __init isapnp_isolate(void){	unsigned char checksum = 0x6a;	unsigned char chksum = 0x00;	unsigned char bit = 0x00;	int data;	int csn = 0;	int i;	int iteration = 1;	isapnp_rdp = 0x213;	if (isapnp_isolate_rdp_select() < 0)		return -1;	while (1) {		for (i = 1; i <= 64; i++) {			data = read_data() << 8;			udelay(250);			data = data | read_data();			udelay(250);			if (data == 0x55aa)				bit = 0x01;			checksum = ((((checksum ^ (checksum >> 1)) & 0x01) ^ bit) << 7) | (checksum >> 1);			bit = 0x00;		}		for (i = 65; i <= 72; i++) {			data = read_data() << 8;			udelay(250);			data = data | read_data();			udelay(250);			if (data == 0x55aa)				chksum |= (1 << (i - 65));		}		if (checksum != 0x00 && checksum == chksum) {			csn++;			isapnp_write_byte(0x06, csn);			udelay(250);			iteration++;			isapnp_wake(0x00);			write_address(0x01);			goto __next;		}		if (iteration == 1) {			isapnp_rdp += RDP_STEP;			if (isapnp_isolate_rdp_select() < 0)				return -1;		} else if (iteration > 1) {			break;		}	      __next:		checksum = 0x6a;		chksum = 0x00;		bit = 0x00;	}	isapnp_wait();	return csn;}/* *  Read one tag from stream. */static int __init isapnp_read_tag(unsigned char *type, unsigned short *size){	unsigned char tag, tmp[2];	isapnp_peek(&tag, 1);	if (tag == 0)				/* invalid tag */		return -1;	if (tag & 0x80) {	/* large item */		*type = tag;		isapnp_peek(tmp, 2);		*size = (tmp[1] << 8) | tmp[0];	} else {		*type = (tag >> 3) & 0x0f;		*size = tag & 0x07;	}        if(isapnp_debug > 0)        {	  printk("tag = 0x%x, type = 0x%x, size = %i\n", tag, *type, *size);        }	if (type == 0)				/* wrong type */		return -1;	if (*type == 0xff && *size == 0xffff)	/* probably invalid data */		return -1;	return 0;}/* *  Skip specified number of bytes from stream. */ static void __init isapnp_skip_bytes(int count){	isapnp_peek(NULL, count);}/* *  Parse logical device tag. */static struct pnp_dev * __init isapnp_parse_device(struct pnp_bus *card,int size, int number){	unsigned char tmp[6];	struct pnp_dev *dev;	isapnp_peek(tmp, size);	dev = isapnp_alloc(sizeof(struct pnp_dev));	if (!dev)		return NULL;	dev->devfn = number;	dev->vendor = (tmp[1] << 8) | tmp[0];	dev->device = (tmp[3] << 8) | tmp[2];	dev->regs = tmp[4];	dev->bus = card;	if (size > 5)		dev->regs |= tmp[5] << 8;	dev->prepare = isapnp_config_prepare;	dev->activate = isapnp_config_activate;	dev->deactivate = isapnp_config_deactivate;	return dev;}/* *  Build new resources structure */static struct isapnp_resources * __init isapnp_build_resources(struct pnp_dev *dev, int dependent){	struct isapnp_resources *res, *ptr, *ptra;		res = isapnp_alloc(sizeof(struct isapnp_resources));	if (!res)		return NULL;	res->dev = dev;	ptr = (struct isapnp_resources *)dev->sysdata;	while (ptr && ptr->next)		ptr = ptr->next;	if (ptr && ptr->dependent && dependent) { /* add to another list */		ptra = ptr->alt;		while (ptra && ptra->alt)			ptra = ptra->alt;		if (!ptra)			ptr->alt = res;		else			ptra->alt = res;	} else {		if (!ptr)			dev->sysdata = res;		else			ptr->next = res;	}	if (dependent) {		res->priority = dependent & 0xff;		if (res->priority > ISAPNP_RES_PRIORITY_FUNCTIONAL)			res->priority = ISAPNP_RES_PRIORITY_INVALID;		res->dependent = 1;	} else {		res->priority = ISAPNP_RES_PRIORITY_PREFERRED;		res->dependent = 0;	}	return res;}/* *  Add IRQ resource to resources list. */static void __init isapnp_add_irq_resource(struct pnp_dev *dev,                                    	       struct isapnp_resources **res,                                               int dependent, int size){	unsigned char tmp[3];	struct isapnp_irq *irq, *ptr;	isapnp_peek(tmp, size);	irq = isapnp_alloc(sizeof(struct isapnp_irq));	if (!irq)		return;	if (*res == NULL) {		*res = isapnp_build_resources(dev, dependent);		if (*res == NULL) {			kfree(irq);			return;		}	}	irq->map = (tmp[1] << 8) | tmp[0];	if (size > 2)		irq->flags = tmp[2];	else		irq->flags = IORESOURCE_IRQ_HIGHEDGE;	irq->res = *res;	ptr = (*res)->irq;	while (ptr && ptr->next)		ptr = ptr->next;	if (ptr)		ptr->next = irq;	else		(*res)->irq = irq;}/* *  Add DMA resource to resources list. */static void __init isapnp_add_dma_resource(struct pnp_dev *dev,                                    	       struct isapnp_resources **res,                                    	       int dependent, int size){	unsigned char tmp[2];	struct isapnp_dma *dma, *ptr;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区国产| 精品在线观看免费| 日韩和欧美的一区| 国产麻豆欧美日韩一区| 欧洲精品在线观看| 欧美精品一区二区久久婷婷| 亚洲日本成人在线观看| 国产原创一区二区| 欧美日韩成人在线| 中文字幕一区二区三区四区| 老鸭窝一区二区久久精品| 色综合久久久久网| 久久亚洲精华国产精华液| 婷婷成人综合网| 99re热视频精品| 久久精品亚洲乱码伦伦中文| 日本欧美大码aⅴ在线播放| eeuss鲁片一区二区三区 | 午夜久久久影院| 99久久精品免费看| 国产日韩欧美不卡| 久久精品国产久精国产| 欧美美女直播网站| 一区二区三区中文字幕精品精品| 国产一区欧美一区| 日韩精品一区二区三区四区视频| 亚洲成人自拍一区| 色国产综合视频| 亚洲欧美自拍偷拍| 成人动漫精品一区二区| 欧美精品一区二区在线播放| 日本va欧美va精品发布| 欧美影院一区二区三区| 亚洲欧美视频一区| 99re视频精品| 综合中文字幕亚洲| 91丨九色丨蝌蚪富婆spa| 中文字幕在线不卡| 91网上在线视频| 亚洲精品成人在线| 在线精品视频一区二区三四| 亚洲精选免费视频| 欧洲av在线精品| 婷婷六月综合网| 日韩精品一区国产麻豆| 久久成人免费网站| 久久亚洲精华国产精华液| 国产麻豆精品视频| 国产欧美视频一区二区| av一区二区久久| 一区二区三区中文在线观看| 在线亚洲欧美专区二区| 视频在线观看一区二区三区| 欧美一区二区三区视频在线观看| 老司机午夜精品| 久久精品一二三| 日本精品一区二区三区四区的功能| 一区二区三区在线观看欧美| 欧美美女bb生活片| 久久成人羞羞网站| 国产精品毛片高清在线完整版| 91丨porny丨首页| 午夜精品久久久久久久99水蜜桃 | 欧美r级电影在线观看| 国产又黄又大久久| 亚洲天堂av一区| 欧美放荡的少妇| 丁香六月综合激情| 亚洲一卡二卡三卡四卡无卡久久| 欧美日韩国产成人在线免费| 极品少妇xxxx偷拍精品少妇| 国产精品热久久久久夜色精品三区 | 久久理论电影网| 91视视频在线观看入口直接观看www | www.一区二区| 亚洲1区2区3区视频| 精品国产网站在线观看| 不卡的av电影| 麻豆精品在线播放| 国产精品久久久久影院| 777欧美精品| 国产精品18久久久久久久久| 一区二区高清在线| 国产色一区二区| 欧美人动与zoxxxx乱| 国产91对白在线观看九色| 亚洲国产成人va在线观看天堂 | 91久久国产综合久久| 蜜臀久久久99精品久久久久久| 国产精品乱人伦| 91精品国产aⅴ一区二区| 成人国产精品免费观看视频| 日本大胆欧美人术艺术动态| 自拍偷拍国产精品| 久久久亚洲精品石原莉奈| 欧美日韩精品一区二区在线播放| www.欧美日韩| 国产精品中文字幕一区二区三区| 五月婷婷综合激情| 亚洲黄色尤物视频| 中文字幕一区二区三区四区| 国产丝袜在线精品| 精品国产髙清在线看国产毛片| 欧美三电影在线| 91麻豆精品在线观看| 粉嫩av亚洲一区二区图片| 老色鬼精品视频在线观看播放| 亚洲成人午夜影院| 一区二区三区在线视频观看58| 中文字幕在线观看一区| 国产偷国产偷精品高清尤物| 国产精品高潮久久久久无| 久久久久久久性| 久久久精品国产免费观看同学| 日韩欧美专区在线| 欧美一区二区三区在线电影| 欧美婷婷六月丁香综合色| 在线观看日韩一区| 在线一区二区三区四区| 日本韩国欧美三级| 色女孩综合影院| 色94色欧美sute亚洲13| 色综合久久99| 在线精品视频一区二区三四| 欧美三级在线视频| 欧美日韩一区二区电影| 7777精品久久久大香线蕉 | 欧洲精品中文字幕| 欧美日韩一区二区在线观看 | 国产欧美一区二区三区在线看蜜臀| 欧美videos大乳护士334| 精品福利在线导航| 国产午夜亚洲精品不卡| 国产精品护士白丝一区av| 最近日韩中文字幕| 亚洲国产成人va在线观看天堂| 午夜精品久久一牛影视| 蜜桃一区二区三区在线观看| 精品亚洲成a人在线观看| 国产精一区二区三区| 成人app软件下载大全免费| 97久久超碰精品国产| 在线这里只有精品| 欧美丰满高潮xxxx喷水动漫| 欧美v国产在线一区二区三区| 久久精品夜色噜噜亚洲a∨| 国产精品成人一区二区三区夜夜夜| 亚洲精品免费在线播放| 日韩中文字幕1| 国产电影精品久久禁18| 91福利精品视频| 亚洲最大成人综合| 五月天婷婷综合| 国产一区二区毛片| 在线观看国产一区二区| 精品理论电影在线观看| 一区在线播放视频| 美国欧美日韩国产在线播放| 国产·精品毛片| 在线电影国产精品| 亚洲精品一区二区三区福利 | 亚洲精品免费在线播放| 蜜桃av一区二区三区电影| 成人一级黄色片| 制服丝袜日韩国产| 国产精品你懂的在线欣赏| 日韩电影在线一区| www.亚洲人| 日韩色在线观看| 一区二区三区在线免费观看| 久久超碰97人人做人人爱| 色婷婷av一区二区三区之一色屋| 欧美r级在线观看| 亚洲午夜成aⅴ人片| 国产99久久久久久免费看农村| 欧美日韩高清一区二区三区| 国产精品盗摄一区二区三区| 久久99精品久久只有精品| 欧美午夜电影网| 中文字幕在线观看一区二区| 韩国成人精品a∨在线观看| 欧美性大战久久久久久久蜜臀| 中文无字幕一区二区三区| 久久99精品国产麻豆婷婷洗澡| 欧美日韩一区二区三区高清| 日韩理论电影院| 国产成人在线色| xnxx国产精品| 麻豆成人久久精品二区三区小说| 在线观看国产一区二区| 亚洲欧美另类在线| 成人一道本在线| 国产女人18水真多18精品一级做| 毛片av一区二区| 欧美一区二区福利在线| 亚洲线精品一区二区三区八戒| 91免费版pro下载短视频| 国产精品美女久久久久高潮| 国产成人av一区二区三区在线观看| 精品捆绑美女sm三区|