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

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

?? isapnp.c

?? 話帶數據中傳真解調程序
?? C
?? 第 1 頁 / 共 4 頁
字號:
	unsigned long *value1, *value2;	struct isapnp_dma *dma;	if (!cfg || idx < 0 || idx > 1)		return -EINVAL;	if (!(cfg->result.dma_resource[idx].flags & IORESOURCE_AUTO))	/* don't touch */		return 0;      __again:      	dma = cfg->dma[idx];      	if (!dma)      		return -EINVAL;      	value1 = &cfg->result.dma_resource[idx].start;      	value2 = &cfg->result.dma_resource[idx].end;	if (cfg->result.dma_resource[idx].flags & IORESOURCE_AUTO) {		for (i = 0; i < 8 && !(dma->map & (1<<i)); i++);		if (i >= 8)			return -ENOENT;		cfg->result.dma_resource[idx].flags &= ~IORESOURCE_AUTO;		if (!isapnp_check_dma(cfg, *value1 = *value2 = i, idx))			return 0;	}	do {		for (i = *value1 + 1; i < 8 && !(dma->map & (1<<i)); i++);		if (i >= 8) {			if (dma->res && dma->res->alt) {				if ((err = isapnp_alternative_switch(cfg, dma->res, dma->res->alt))<0)					return err;				goto __again;			}			return -ENOENT;		} else {			*value1 = *value2 = i;		}	} while (isapnp_check_dma(cfg, *value1, idx));	return 0;}static int isapnp_check_mem(struct isapnp_cfgtmp *cfg, unsigned int addr, unsigned int size, int idx){	int i, tmp;	unsigned int raddr, rsize;	struct pnp_dev *dev;	struct isapnp_mem *xmem;	for (i = 0; i < 8; i++) {		raddr = (unsigned int)isapnp_reserve_mem[i << 1];		rsize = (unsigned int)isapnp_reserve_mem[(i << 1) + 1];		if (addr >= raddr && addr < raddr + rsize)			return 1;		if (addr + size > raddr && addr + size < (raddr + rsize) - 1)			return 1;//		if (__check_region(&iomem_resource, addr, size))		if (check_region(addr, size))			return 1;	}	for (dev = isapnp_devices; dev; dev = dev->next) {		if (dev->active) {			for (tmp = 0; tmp < 4; tmp++) {				if (dev->resource[tmp].flags) {					raddr = dev->resource[tmp + 8].start;					rsize = (dev->resource[tmp + 8].end - raddr) + 1;					if (addr >= raddr && addr < raddr + rsize)						return 1;					if (addr + size > raddr && addr + size < (raddr + rsize) - 1)						return 1;				}			}		}	}	for (i = 0; i < 4; i++) {		unsigned int flags = cfg->request->resource[i + 8].flags;		if (i == idx)			continue;		if (!flags)			continue;		tmp = cfg->result.resource[i + 8].start;		if (flags & IORESOURCE_AUTO) {		/* auto */			xmem = cfg->mem[i];			if (!xmem)				return 1;			if (cfg->result.resource[i + 8].flags & IORESOURCE_AUTO)				continue;			if (tmp + xmem->size >= addr && tmp <= addr + xmem->size)				return 1;			continue;		}		if (addr == tmp)			return 1;		xmem = isapnp_find_mem(cfg->request, i);		if (!xmem)			return 1;		if (tmp + xmem->size >= addr && tmp <= addr + xmem->size)			return 1;	}	return 0;}static int isapnp_valid_mem(struct isapnp_cfgtmp *cfg, int idx){	int err;	unsigned long *value1, *value2;	struct isapnp_mem *mem;	if (!cfg || idx < 0 || idx > 3)		return -EINVAL;	if (!(cfg->result.resource[idx + 8].flags & IORESOURCE_AUTO)) /* don't touch */		return 0;      __again:      	mem = cfg->mem[idx];      	if (!mem)      		return -EINVAL;      	value1 = &cfg->result.resource[idx].start;      	value2 = &cfg->result.resource[idx].end;	if (cfg->result.resource[idx + 8].flags & IORESOURCE_AUTO) {		cfg->result.resource[idx + 8].flags &= ~IORESOURCE_AUTO;		*value1 = mem->min;		*value2 = mem->min + mem->size - 1;		if (!isapnp_check_mem(cfg, *value1, mem->size, idx))			return 0;	}	do {		*value1 += mem->align;		*value2 = *value1 + mem->size - 1;		if (*value1 >= 8 || !mem->align) {			if (mem->res && mem->res->alt) {				if ((err = isapnp_alternative_switch(cfg, mem->res, mem->res->alt))<0)					return err;				goto __again;			}			return -ENOENT;		}	} while (isapnp_check_mem(cfg, *value1, mem->size, idx));	return 0;}static int isapnp_check_valid(struct isapnp_cfgtmp *cfg){	int tmp;		for (tmp = 0; tmp < 8; tmp++)		if (cfg->result.resource[tmp].flags & IORESOURCE_AUTO)			return -EAGAIN;	for (tmp = 0; tmp < 2; tmp++)		if (cfg->result.irq_resource[tmp].flags & IORESOURCE_AUTO)			return -EAGAIN;	for (tmp = 0; tmp < 2; tmp++)		if (cfg->result.dma_resource[tmp].flags & IORESOURCE_AUTO)			return -EAGAIN;	for (tmp = 0; tmp < 4; tmp++)		if (cfg->result.resource[tmp + 8].flags & IORESOURCE_AUTO)			return -EAGAIN;	return 0;}static int isapnp_config_activate(struct pnp_dev *dev){	struct isapnp_cfgtmp cfg;	int tmp, fauto, err;		if (!dev)		return -EINVAL;	if (dev->active)		return -EBUSY;	memset(&cfg, 0, sizeof(cfg));	cfg.request = dev;	memcpy(&cfg.result, dev, sizeof(struct pnp_dev));	/* check if all values are set, otherwise try auto-configuration */	for (tmp = fauto = 0; !fauto && tmp < 8; tmp++) {		if (dev->resource[tmp].flags & IORESOURCE_AUTO)			fauto++;	}	for (tmp = 0; !fauto && tmp < 2; tmp++) {		if (dev->irq_resource[tmp].flags & IORESOURCE_AUTO)			fauto++;	}	for (tmp = 0; !fauto && tmp < 2; tmp++) {		if (dev->dma_resource[tmp].flags & IORESOURCE_AUTO)			fauto++;	}	for (tmp = 0; !fauto && tmp < 4; tmp++) {		if (dev->resource[tmp + 8].flags & IORESOURCE_AUTO)			fauto++;	}	if (!fauto)		goto __skip_auto;	/* set variables to initial values */	if ((err = isapnp_alternative_switch(&cfg, NULL, NULL))<0)		return err;	/* find first valid configuration */	fauto = 0;	do {		for (tmp = 0; tmp < 8 && cfg.result.resource[tmp].flags; tmp++)			if ((err = isapnp_valid_port(&cfg, tmp))<0)				return err;		for (tmp = 0; tmp < 2 && cfg.result.irq_resource[tmp].flags; tmp++)			if ((err = isapnp_valid_irq(&cfg, tmp))<0)				return err;		for (tmp = 0; tmp < 2 && cfg.result.dma_resource[tmp].flags; tmp++)			if ((err = isapnp_valid_dma(&cfg, tmp))<0)				return err;		for (tmp = 0; tmp < 4 && cfg.result.resource[tmp + 8].flags; tmp++)			if ((err = isapnp_valid_mem(&cfg, tmp))<0)				return err;	} while (isapnp_check_valid(&cfg)<0 && fauto++ < 20);	if (fauto >= 20)		return -EAGAIN;      __skip_auto:      	/* we have valid configuration, try configure hardware */      	isapnp_cfg_begin(dev->bus->number, dev->devfn);	dev->active = 1;	dev->irq_resource[0] = cfg.result.irq_resource[0];	dev->irq_resource[1] = cfg.result.irq_resource[1];	dev->dma_resource[0] = cfg.result.dma_resource[0];	dev->dma_resource[1] = cfg.result.dma_resource[1];	for (tmp = 0; tmp < 12; tmp++) {		dev->resource[tmp] = cfg.result.resource[tmp];	}		for (tmp = 0; tmp < 8 && dev->resource[tmp].flags; tmp++)		isapnp_write_word(ISAPNP_CFG_PORT+(tmp<<1), dev->resource[tmp].start);	for (tmp = 0; tmp < 2 && dev->irq_resource[tmp].flags; tmp++) {		int irq = dev->irq_resource[tmp].start;		if (irq == 2)			irq = 9;		isapnp_write_byte(ISAPNP_CFG_IRQ+(tmp<<1), irq);	}	for (tmp = 0; tmp < 2 && dev->dma_resource[tmp].flags; tmp++)		isapnp_write_byte(ISAPNP_CFG_DMA+tmp, dev->dma_resource[tmp].start);	for (tmp = 0; tmp < 4 && dev->resource[tmp+8].flags; tmp++)		isapnp_write_word(ISAPNP_CFG_MEM+(tmp<<2), (dev->resource[tmp + 8].start >> 8) & 0xffff);	isapnp_activate(dev->devfn);	isapnp_cfg_end();	return 0;}static int isapnp_config_deactivate(struct pnp_dev *dev){	if (!dev || !dev->active)		return -EINVAL;      	isapnp_cfg_begin(dev->bus->number, dev->devfn);	isapnp_deactivate(dev->devfn);	dev->active = 0;	isapnp_cfg_end();	return 0;}void isapnp_resource_change(struct resource *resource,			    unsigned long start,			    unsigned long size){	if (resource == NULL)		return;	resource->flags &= ~IORESOURCE_AUTO;	resource->start = start;	resource->end = start + size - 1;}/* *  Inititialization. */#ifdef MODULEstatic void isapnp_free_port(struct isapnp_port *port){	struct isapnp_port *next;	while (port) {		next = port->next;		kfree(port);		port = next;	}}static void isapnp_free_irq(struct isapnp_irq *irq){	struct isapnp_irq *next;	while (irq) {		next = irq->next;		kfree(irq);		irq = next;	}}static void isapnp_free_dma(struct isapnp_dma *dma){	struct isapnp_dma *next;	while (dma) {		next = dma->next;		kfree(dma);		dma = next;	}}static void isapnp_free_mem(struct isapnp_mem *mem){	struct isapnp_mem *next;	while (mem) {		next = mem->next;		kfree(mem);		mem = next;	}}static void isapnp_free_mem32(struct isapnp_mem32 *mem32){	struct isapnp_mem32 *next;	while (mem32) {		next = mem32->next;		kfree(mem32);		mem32 = next;	}}static void isapnp_free_resources(struct isapnp_resources *resources, int alt){	struct isapnp_resources *next;	while (resources) {		next = alt ? resources->alt : resources->next;		isapnp_free_port(resources->port);		isapnp_free_irq(resources->irq);		isapnp_free_dma(resources->dma);		isapnp_free_mem(resources->mem);		isapnp_free_mem32(resources->mem32);		if (!alt && resources->alt)			isapnp_free_resources(resources->alt, 1);		kfree(resources);		resources = next;	}}static void isapnp_free_device(struct pnp_dev *dev){	struct pnp_dev *next;	while (dev) {		next = dev->sibling;		isapnp_free_resources((struct isapnp_resources *)dev->sysdata, 0);		kfree(dev);		dev = next;	}}#endif /* MODULE */static void isapnp_free_all_resources(void){#ifdef MODULE	struct pnp_bus *card, *cardnext;#endif#ifdef ISAPNP_REGION_OK//	release_resource(pidxr_res);        release_region(_PIDXR, 1);#endif//	release_resource(pnpwrp_res);        release_region(_PNPWRP, 1);	if (isapnp_rdp >= 0x203 && isapnp_rdp <= 0x3ff)//		release_resource(isapnp_rdp_res);		release_region(isapnp_rdp, 1);#ifdef MODULE	for (card = isapnp_cards; card; card = cardnext) {		cardnext = card->next;		isapnp_free_device(card->devices);		kfree(card);	}#ifdef CONFIG_PROC_FS	isapnp_proc_done();#endif#endif}static int __init isapnp_do_reserve_irq(int irq){	int i;		if (irq < 0 || irq > 15)		return -EINVAL;	for (i = 0; i < 16; i++) {		if (isapnp_reserve_irq[i] == irq)			return 0;	}	for (i = 0; i < 16; i++) {		if (isapnp_reserve_irq[i] < 0) {			isapnp_reserve_irq[i] = irq;#ifdef ISAPNP_DEBUG			printk("IRQ %i is reserved now.\n", irq);#endif			return 0;		}	}	return -ENOMEM;}#ifdef CONFIG_PCIstruct pnp_dev *pnp_find_slot(unsigned int bus, unsigned int devfn){        struct pnp_dev *dev;        for(dev=isapnp_devices; dev; dev=dev->next)                if (dev->bus->number == bus && dev->devfn == devfn)                        break;        return dev;}static void __init isapnp_pci_init(void){	int devfn;	struct pnp_dev *dev;		for (devfn = 0; devfn < 255; devfn++) {		dev = pnp_find_slot(0, devfn);		if (dev != NULL)			break;	}	if (dev == NULL)		return;	while (dev) {#ifdef ISAPNP_DEBUG		printk("PCI: reserved IRQ: %i\n", dev->irq);#endif		if (dev->irq > 0)			isapnp_do_reserve_irq(dev->irq);		dev = dev->next;	}}#endif /* CONFIG_PCI */EXPORT_SYMBOL(isapnp_present);EXPORT_SYMBOL(isapnp_cfg_begin);EXPORT_SYMBOL(isapnp_cfg_end);EXPORT_SYMBOL(isapnp_read_byte);EXPORT_SYMBOL(isapnp_read_word);EXPORT_SYMBOL(isapnp_read_dword);EXPORT_SYMBOL(isapnp_write_byte);EXPORT_SYMBOL(isapnp_write_word);EXPORT_SYMBOL(isapnp_write_dword);EXPORT_SYMBOL(isapnp_wake);EXPORT_SYMBOL(isapnp_device);EXPORT_SYMBOL(isapnp_activate);EXPORT_SYMBOL(isapnp_deactivate);EXPORT_SYMBOL(isapnp_find_card);EXPORT_SYMBOL(isapnp_find_dev);EXPORT_SYMBOL(isapnp_resource_change);int __init isapnp_init(void){	int cards;	struct pnp_bus *card;	struct pnp_dev *dev;	if (isapnp_disable) {		isapnp_detected = 0;		printk("isapnp: ISA Plug & Play support disabled\n");		return 0;	}#ifdef ISAPNP_REGION_OK	request_region(_PIDXR, 1, "isapnp index");//	pidxr_res=request_region(_PIDXR, 1, "isapnp index");//	if(!pidxr_res) {//		printk("isapnp: Index Register 0x%x already used\n", _PIDXR);//		return -EBUSY;//	}#endif	request_region(_PNPWRP, 1, "isapnp write");//	pnpwrp_res=request_region(_PNPWRP, 1, "isapnp write");//	if(!pnpwrp_res) {//		printk("isapnp: Write Data Register 0x%x already used\n", _PNPWRP);//		return -EBUSY;//	}		/*	 *	Print a message. The existing ISAPnP code is hanging machines	 *	so let the user know where.	 */	 	printk("isapnp: Scanning for Pnp cards...\n");	if (isapnp_rdp >= 0x203 && isapnp_rdp <= 0x3ff) {		isapnp_rdp |= 3;		request_region(isapnp_rdp, 1, "isapnp read");//		isapnp_rdp_res=request_region(isapnp_rdp, 1, "isapnp read");//		if(!isapnp_rdp_res) {//			printk("isapnp: Read Data Register 0x%x already used\n", isapnp_rdp);//			return -EBUSY;//		}		isapnp_set_rdp();	}	isapnp_detected = 1;	if (isapnp_rdp < 0x203 || isapnp_rdp > 0x3ff) {		cards = isapnp_isolate();		if (cards < 0 || 		    (isapnp_rdp < 0x203 || isapnp_rdp > 0x3ff)) {			isapnp_free_all_resources();			isapnp_detected = 0;			printk("isapnp: No Plug & Play device found\n");			return 0;		}		request_region(isapnp_rdp, 1, "isapnp read");//		isapnp_rdp_res=request_region(isapnp_rdp, 1, "isapnp read");	}	isapnp_build_device_list();	cards = 0;	for (card = isapnp_cards; card; card = card->next)		cards++;	if (isapnp_verbose) {		for (card = isapnp_cards; card; card = card->next) {			printk( "isapnp: Card '%s'\n", card->name[0]?card->name:"Unknown");			if (isapnp_verbose < 2)				continue;			for (dev = card->devices; dev; dev = dev->next)				printk("isapnp:   Device '%s'\n", dev->name[0]?card->name:"Unknown");		}	}	if (cards) {		printk("isapnp: %i Plug & Play card%s detected total\n", cards, cards>1?"s":"");	} else {		printk("isapnp: No Plug & Play card found\n");	}#ifdef CONFIG_PCI	if (!isapnp_skip_pci_scan)		isapnp_pci_init();#endif#ifdef CONFIG_PROC_FS	isapnp_proc_init();#endif	return 0;}#ifdef MODULEint init_module(void){	return isapnp_init();}void cleanup_module(void){	if (isapnp_detected)		isapnp_free_all_resources();}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人91在线观看| 婷婷综合另类小说色区| 天堂成人国产精品一区| 日韩欧美一二三四区| 欧美不卡视频一区| 亚洲va国产天堂va久久en| 日本精品一区二区三区四区的功能| 国产日韩一级二级三级| 加勒比av一区二区| 日韩欧美精品在线视频| 免费成人av在线| 日韩视频国产视频| 日韩激情视频在线观看| 欧美人妖巨大在线| 日韩激情视频在线观看| 精品久久人人做人人爱| 国产在线观看一区二区| 欧美国产成人精品| 91在线免费看| 亚洲6080在线| 色婷婷国产精品| 一区免费观看视频| 99久久免费精品高清特色大片| 国产精品久久久久久久久动漫| 99久精品国产| 视频在线观看国产精品| 精品奇米国产一区二区三区| 国产精品一区一区三区| 国产精品狼人久久影院观看方式| www.亚洲在线| 亚洲午夜电影在线观看| 日韩天堂在线观看| 丁香激情综合五月| 一个色综合网站| 欧美精品久久天天躁| 国产在线播放一区二区三区| 国产精品欧美经典| 欧美日韩国产一区二区三区地区| 亚洲免费av高清| 91视频你懂的| 日韩综合小视频| 亚洲国产激情av| 欧美老年两性高潮| 高清国产一区二区三区| 亚洲午夜免费视频| 久久精品欧美日韩| 欧美性猛片aaaaaaa做受| 麻豆精品视频在线观看免费| 国产精品国产精品国产专区不蜜| 欧美人妖巨大在线| 91性感美女视频| 亚洲线精品一区二区三区八戒| 精品电影一区二区| 91极品美女在线| 国产福利一区在线| 日韩和欧美一区二区三区| 久久久久久久久久久99999| 在线精品视频小说1| 国产99精品在线观看| 亚洲自拍偷拍欧美| 国产精品色噜噜| 日韩欧美一区电影| 欧美视频一区二区| 99re8在线精品视频免费播放| 日本少妇一区二区| 国产成人av福利| 久久久99精品久久| 欧美一区二区三区在线电影| www.在线成人| 国产黄色精品视频| 青青草国产成人99久久| 一区免费观看视频| 国产欧美日韩精品在线| 日韩三级在线观看| 日韩欧美的一区| 欧美videos大乳护士334| 欧美日韩国产中文| 在线看一区二区| 色又黄又爽网站www久久| 国产精品1区2区| 久久er精品视频| 日本欧美大码aⅴ在线播放| 亚洲一区在线观看视频| 国产精品盗摄一区二区三区| 久久久久国产精品麻豆ai换脸| 欧美一区二区在线免费观看| 欧美无乱码久久久免费午夜一区| 99精品国产91久久久久久| 成人免费视频视频| 成人在线视频一区| 成人理论电影网| 成人黄色国产精品网站大全在线免费观看| 国产综合久久久久久鬼色| 亚洲成人一二三| 亚洲一区二区不卡免费| 亚洲午夜免费福利视频| 亚洲美女屁股眼交| 欧美一卡二卡三卡四卡| 91精品麻豆日日躁夜夜躁| 884aa四虎影成人精品一区| 精品欧美久久久| 亚洲国产高清在线观看视频| 亚洲欧美一区二区在线观看| 国产精品每日更新| 一区二区三区在线观看网站| 亚洲一级二级三级| 日韩av成人高清| 九九九精品视频| 国产91清纯白嫩初高中在线观看| 国产精品乡下勾搭老头1| 精品综合久久久久久8888| 国产精品 日产精品 欧美精品| 豆国产96在线|亚洲| 色综合久久久久综合体| 欧美午夜电影网| 日韩精品一区二区三区在线| 久久综合久久综合九色| 国产精品久久久久久久第一福利| 亚洲精品乱码久久久久久日本蜜臀| 一区二区在线观看免费| 亚洲国产视频在线| 三级一区在线视频先锋 | 日本不卡一区二区三区高清视频| 日韩电影网1区2区| 国产综合色精品一区二区三区| av午夜精品一区二区三区| 欧美日韩国产一级二级| 久久综合999| 日韩一级完整毛片| 欧美一二三四区在线| 日韩一级二级三级精品视频| 国产欧美综合在线观看第十页| 亚洲三级小视频| 蜜桃久久久久久| 99久久亚洲一区二区三区青草| 欧美三级日韩在线| 国产午夜精品久久久久久免费视| 亚洲精品欧美综合四区| 久久av资源站| 欧美日韩中文字幕一区二区| 欧美va在线播放| 亚洲另类一区二区| 久久国产欧美日韩精品| 色综合天天视频在线观看| 欧美变态口味重另类| 亚洲综合免费观看高清完整版在线 | 狠狠色丁香婷婷综合| 91在线观看高清| 日韩三级电影网址| 一区二区三区在线视频免费 | 亚洲二区视频在线| 国产精品亚洲一区二区三区妖精| 欧美性生活影院| 国产精品不卡一区| 久久成人久久爱| 欧美日韩成人在线一区| 中文字幕一区二区三区四区不卡| 日韩福利视频导航| 欧美在线不卡一区| 国产精品久久久久久久久搜平片| 毛片av一区二区| 欧美日韩三级视频| 亚洲高清在线精品| 欧美午夜视频网站| 亚洲欧美一区二区久久| 国产**成人网毛片九色 | 欧洲精品一区二区| 欧美极品少妇xxxxⅹ高跟鞋 | 亚洲精品成人少妇| 不卡av在线网| 日韩一区二区不卡| 亚洲女厕所小便bbb| 成人av电影免费在线播放| 91精品国产综合久久精品性色| 亚洲精品乱码久久久久久黑人| 精品乱人伦一区二区三区| 精品国产a毛片| 国产激情一区二区三区| 日本韩国欧美一区二区三区| 欧美国产一区二区| 懂色av中文一区二区三区 | 久久女同精品一区二区| 琪琪久久久久日韩精品| 欧美日韩一区二区三区在线 | 欧美精彩视频一区二区三区| 国产成人精品亚洲午夜麻豆| 久久综合九色综合欧美就去吻| 久久黄色级2电影| 精品国产三级电影在线观看| 久久成人久久爱| 精品国产乱码久久久久久浪潮 | 午夜精品一区在线观看| 欧美日韩国产在线观看| 蜜臀久久久久久久| 中文字幕 久热精品 视频在线| 99麻豆久久久国产精品免费| 亚洲精品中文在线影院| 日韩三级视频中文字幕| 大美女一区二区三区| 亚洲444eee在线观看|