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

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

?? isapnp.c

?? 話帶數據中傳真解調程序
?? C
?? 第 1 頁 / 共 4 頁
字號:
		for (dma = res->dma; dma; dma = dma->next) {			if (!index)				return dma;			index--;		}	}	return NULL;}struct isapnp_mem *isapnp_find_mem(struct pnp_dev *dev, int index){	struct isapnp_resources *res;	struct isapnp_mem *mem;		if (!dev || index < 0 || index > 7)		return NULL;	for (res = (struct isapnp_resources *)dev->sysdata; res; res = res->next) {		for (mem = res->mem; mem; mem = mem->next) {			if (!index)				return mem;			index--;		}	}	return NULL;}struct isapnp_mem32 *isapnp_find_mem32(struct pnp_dev *dev, int index){	struct isapnp_resources *res;	struct isapnp_mem32 *mem32;		if (!dev || index < 0 || index > 7)		return NULL;	for (res = (struct isapnp_resources *)dev->sysdata; res; res = res->next) {		for (mem32 = res->mem32; mem32; mem32 = mem32->next) {			if (!index)				return mem32;			index--;		}	}	return NULL;}/* *  Device manager. */struct pnp_bus *isapnp_find_card(unsigned short vendor,				 unsigned short device,				 struct pnp_bus *from){	struct pnp_bus *card;	if (from == NULL) {		from = isapnp_cards;	} else {		from = from->next;	}	for (card = from; card; card = card->next) {		if (card->vendor == vendor && card->device == device)			return card;	}	return NULL;}struct pnp_dev *isapnp_find_dev(struct pnp_bus *card,				unsigned short vendor,				unsigned short function,				struct pnp_dev *from){	struct pnp_dev *dev;	int idx;		if (card == NULL) {	/* look for a logical device from all cards */		if (from == NULL) {			from = isapnp_devices;		} else {			from = from->next;		}		for (dev = from; dev; dev = dev->next) {			if (dev->vendor == vendor && dev->device == function)				return dev;			for (idx = 0; idx < DEVICE_COUNT_COMPATIBLE; idx++)				if (dev->vendor_compatible[idx] == vendor &&				    dev->device_compatible[idx] == function)					return dev;		}	} else {		if (from == NULL) {			from = card->devices;		} else {			from = from->next;		}		if (from->bus != card)	/* something is wrong */			return NULL;		for (dev = from; dev; dev = dev->sibling) {			if (dev->vendor == vendor && dev->device == function)				return dev;			for (idx = 0; idx < DEVICE_COUNT_COMPATIBLE; idx++)				if (dev->vendor_compatible[idx] == vendor &&				    dev->device_compatible[idx] == function)					return dev;		}			}	return NULL;}static unsigned int isapnp_dma_resource_flags(struct isapnp_dma *dma){	return dma->flags | IORESOURCE_DMA | IORESOURCE_AUTO;}static unsigned int isapnp_mem_resource_flags(struct isapnp_mem *mem){	unsigned int result;	result = mem->flags | IORESOURCE_MEM | IORESOURCE_AUTO;	if (!(mem->flags & IORESOURCE_MEM_WRITEABLE))		result |= IORESOURCE_READONLY;	if (mem->flags & IORESOURCE_MEM_CACHEABLE)		result |= IORESOURCE_CACHEABLE;	if (mem->flags & IORESOURCE_MEM_RANGELENGTH)		result |= IORESOURCE_RANGELENGTH;	if (mem->flags & IORESOURCE_MEM_SHADOWABLE)		result |= IORESOURCE_SHADOWABLE;	return result;}static unsigned int isapnp_irq_resource_flags(struct isapnp_irq *irq){	return irq->flags | IORESOURCE_IRQ | IORESOURCE_AUTO;}static unsigned int isapnp_port_resource_flags(struct isapnp_port *port){	return port->flags | IORESOURCE_IO | IORESOURCE_AUTO;}static int isapnp_config_prepare(struct pnp_dev *dev){	struct isapnp_resources *res, *resa;	struct isapnp_port *port;	struct isapnp_irq *irq;	struct isapnp_dma *dma;	struct isapnp_mem *mem;	int port_count, port_count1;	int irq_count, irq_count1;	int dma_count, dma_count1;	int mem_count, mem_count1;	int idx;	if (dev == NULL)		return -EINVAL;	if (dev->active || dev->ro)		return -EBUSY;	for (idx = 0; idx < DEVICE_COUNT_IRQ; idx++) {		dev->irq_resource[idx].name = NULL;		dev->irq_resource[idx].start = 0;		dev->irq_resource[idx].end = 0;		dev->irq_resource[idx].flags = 0;	}	for (idx = 0; idx < DEVICE_COUNT_DMA; idx++) {		dev->dma_resource[idx].name = NULL;		dev->dma_resource[idx].start = 0;		dev->dma_resource[idx].end = 0;		dev->dma_resource[idx].flags = 0;	}	for (idx = 0; idx < DEVICE_COUNT_RESOURCE; idx++) {		dev->resource[idx].name = NULL;		dev->resource[idx].start = 0;		dev->resource[idx].end = 0;		dev->resource[idx].flags = 0;	}	port_count = irq_count = dma_count = mem_count = 0;	for (res = (struct isapnp_resources *)dev->sysdata; res; res = res->next) {		port_count1 = irq_count1 = dma_count1 = mem_count1 = 0;		for (resa = res; resa; resa = resa->alt) {			for (port = resa->port, idx = 0; port; port = port->next, idx++) {				if (dev->resource[port_count + idx].flags == 0) {					dev->resource[port_count + idx].flags = isapnp_port_resource_flags(port);					dev->resource[port_count + idx].end = port->size;				}			}			if (port_count1 < idx)				port_count1 = idx;			for (irq = resa->irq, idx = 0; irq; irq = irq->next, idx++) {				int count = irq_count + idx;				if (count < DEVICE_COUNT_IRQ) {					if (dev->irq_resource[count].flags == 0) {						dev->irq_resource[count].flags = isapnp_irq_resource_flags(irq);					}				}							}			if (irq_count1 < idx)				irq_count1 = idx;			for (dma = resa->dma, idx = 0; dma; dma = dma->next, idx++)				if (dev->dma_resource[idx].flags == 0) {					dev->dma_resource[idx].flags = isapnp_dma_resource_flags(dma);				}			if (dma_count1 < idx)				dma_count1 = idx;			for (mem = resa->mem, idx = 0; mem; mem = mem->next, idx++)				if (dev->resource[mem_count + idx + 8].flags == 0) {					dev->resource[mem_count + idx + 8].flags = isapnp_mem_resource_flags(mem);				}			if (mem_count1 < idx)				mem_count1 = idx;		}		port_count += port_count1;		irq_count += irq_count1;		dma_count += dma_count1;		mem_count += mem_count1;	}	return 0;}struct isapnp_cfgtmp {	struct isapnp_port *port[8];	struct isapnp_irq *irq[2];	struct isapnp_dma *dma[2];	struct isapnp_mem *mem[4];	struct pnp_dev *request;	struct pnp_dev result;};static int isapnp_alternative_switch(struct isapnp_cfgtmp *cfg,				     struct isapnp_resources *from,				     struct isapnp_resources *to){	int tmp, tmp1;	struct isapnp_port *port;	struct isapnp_irq *irq;	struct isapnp_dma *dma;	struct isapnp_mem *mem;	if (!cfg)		return -EINVAL;	/* process port settings */	for (tmp = 0; tmp < 8; tmp++) {		if (!(cfg->request->resource[tmp].flags & IORESOURCE_AUTO))			continue;		/* don't touch */		port = cfg->port[tmp];		if (!port) {			cfg->port[tmp] = port = isapnp_find_port(cfg->request, tmp);			if (!port)				return -EINVAL;		}		if (from && port->res == from) {			while (port->res != to) {				if (!port->res->alt)					return -EINVAL;				port = port->res->alt->port;				for (tmp1 = tmp; tmp1 > 0 && port; tmp1--)					port = port->next;				cfg->port[tmp] = port;				if (!port)					return -ENOENT;				cfg->result.resource[tmp].flags = isapnp_port_resource_flags(port);			}		}	}	/* process irq settings */	for (tmp = 0; tmp < 2; tmp++) {		if (!(cfg->request->irq_resource[tmp].flags & IORESOURCE_AUTO))			continue;		/* don't touch */		irq = cfg->irq[tmp];		if (!irq) {			cfg->irq[tmp] = irq = isapnp_find_irq(cfg->request, tmp);			if (!irq)				return -EINVAL;		}		if (from && irq->res == from) {			while (irq->res != to) {				if (!irq->res->alt)					return -EINVAL;				irq = irq->res->alt->irq;				for (tmp1 = tmp; tmp1 > 0 && irq; tmp1--)					irq = irq->next;				cfg->irq[tmp] = irq;				if (!irq)					return -ENOENT;				cfg->result.irq_resource[tmp].flags = isapnp_irq_resource_flags(irq);			}		}	}	/* process dma settings */	for (tmp = 0; tmp < 2; tmp++) {		if (!(cfg->request->dma_resource[tmp].flags & IORESOURCE_AUTO))			continue;		/* don't touch */		dma = cfg->dma[tmp];		if (!dma) {			cfg->dma[tmp] = dma = isapnp_find_dma(cfg->request, tmp);			if (!dma)				return -EINVAL;		}		if (from && dma->res == from) {			while (dma->res != to) {				if (!dma->res->alt)					return -EINVAL;				dma = dma->res->alt->dma;				for (tmp1 = tmp; tmp1 > 0 && dma; tmp1--)					dma = dma->next;				cfg->dma[tmp] = dma;				if (!dma)					return -ENOENT;				cfg->result.dma_resource[tmp].flags = isapnp_dma_resource_flags(dma);			}		}	}	/* process memory settings */	for (tmp = 0; tmp < 4; tmp++) {		if (!(cfg->request->resource[tmp + 8].flags & IORESOURCE_AUTO))			continue;		/* don't touch */		mem = cfg->mem[tmp];		if (!mem) {			cfg->mem[tmp] = mem = isapnp_find_mem(cfg->request, tmp);			if (!mem)				return -EINVAL;		}		if (from && mem->res == from) {			while (mem->res != to) {				if (!mem->res->alt)					return -EINVAL;				mem = mem->res->alt->mem;				for (tmp1 = tmp; tmp1 > 0 && mem; tmp1--)					mem = mem->next;				cfg->mem[tmp] = mem;				if (!mem)					return -ENOENT;				cfg->result.resource[tmp + 8].flags = isapnp_mem_resource_flags(mem);			}		}	}	return 0;}static int isapnp_check_port(struct isapnp_cfgtmp *cfg, int port, int size, int idx){	int i, tmp, rport, rsize;	struct isapnp_port *xport;	struct pnp_dev *dev;	if (check_region(port, size))		return 1;	for (i = 0; i < 8; i++) {		rport = isapnp_reserve_io[i << 1];		rsize = isapnp_reserve_io[(i << 1) + 1];		if (port >= rport && port < rport + rsize)			return 1;		if (port + size > rport && port + size < (rport + rsize) - 1)			return 1;	}	for (dev = isapnp_devices; dev; dev = dev->next) {		if (dev->active) {			for (tmp = 0; tmp < 8; tmp++) {				if (dev->resource[tmp].flags) {					rport = dev->resource[tmp].start;					rsize = (dev->resource[tmp].end - rport) + 1;					if (port >= rport && port < rport + rsize)						return 1;					if (port + size > rport && port + size < (rport + rsize) - 1)						return 1;				}			}		}	}	for (i = 0; i < 8; i++) {		unsigned int flags;		if (i == idx)			continue;		flags = cfg->request->resource[i].flags;		if (!flags)			continue;		tmp = cfg->request->resource[i].start;		if (flags & IORESOURCE_AUTO) {		/* auto */			xport = cfg->port[i];			if (!xport)				return 1;			if (cfg->result.resource[i].flags & IORESOURCE_AUTO)				continue;			tmp = cfg->result.resource[i].start;			if (tmp + xport->size >= port && tmp <= port + xport->size)				return 1;			continue;		}		if (port == tmp)			return 1;		xport = isapnp_find_port(cfg->request, i);		if (!xport)			return 1;		if (tmp + xport->size >= port && tmp <= port + xport->size)			return 1;	}	return 0;}static int isapnp_valid_port(struct isapnp_cfgtmp *cfg, int idx){	int err;	unsigned long *value1, *value2;	struct isapnp_port *port;	if (!cfg || idx < 0 || idx > 7)		return -EINVAL;	if (!(cfg->result.resource[idx].flags & IORESOURCE_AUTO)) /* don't touch */		return 0;      __again:      	port = cfg->port[idx];      	if (!port)      		return -EINVAL;      	value1 = &cfg->result.resource[idx].start;      	value2 = &cfg->result.resource[idx].end;	if (cfg->result.resource[idx].flags & IORESOURCE_AUTO) {		cfg->result.resource[idx].flags &= ~IORESOURCE_AUTO;		*value1 = port->min;		*value2 = port->min + port->size - 1;		if (!isapnp_check_port(cfg, *value1, port->size, idx))			return 0;	}	do {		*value1 += port->align;		*value2 = *value1 + port->size - 1;		if (*value1 > port->max || !port->align) {			if (port->res && port->res->alt) {				if ((err = isapnp_alternative_switch(cfg, port->res, port->res->alt))<0)					return err;				goto __again;			}			return -ENOENT;		}	} while (isapnp_check_port(cfg, *value1, port->size, idx));	return 0;}static void isapnp_test_handler(int irq, void *dev_id, struct pt_regs *regs){}static int isapnp_check_interrupt(struct isapnp_cfgtmp *cfg, int irq, int idx){	int i;	struct pnp_dev *dev;	if (irq < 0 || irq > 15)		return 1;	for (i = 0; i < 16; i++) {		if (isapnp_reserve_irq[i] == irq)			return 1;	}	for (dev = isapnp_devices; dev; dev = dev->next) {		if (dev->active) {			if (dev->irq_resource[0].start == irq ||			    dev->irq_resource[1].start == irq)				return 1;		}	}	if (request_irq(irq, isapnp_test_handler, SA_INTERRUPT, "isapnp", NULL))		return 1;	free_irq(irq, NULL);	for (i = 0; i < DEVICE_COUNT_IRQ; i++) {		if (i == idx)			continue;		if (!cfg->result.irq_resource[i].flags)			continue;		if (cfg->result.irq_resource[i].flags & IORESOURCE_AUTO)			continue;		if (cfg->result.irq_resource[i].start == irq)			return 1;	}	return 0;}static int isapnp_valid_irq(struct isapnp_cfgtmp *cfg, int idx){	/* IRQ priority: this table is good for i386 */	static unsigned short xtab[16] = {		5, 10, 11, 12, 9, 14, 15, 7, 3, 4, 13, 0, 1, 6, 8, 2	};	int err, i;	unsigned long *value1, *value2;	struct isapnp_irq *irq;	if (!cfg || idx < 0 || idx > 1)		return -EINVAL;	if (!(cfg->result.irq_resource[idx].flags & IORESOURCE_AUTO))		return 0;      __again:      	irq = cfg->irq[idx];      	if (!irq)      		return -EINVAL;      	value1 = &cfg->result.irq_resource[idx].start;      	value2 = &cfg->result.irq_resource[idx].end;	if (cfg->result.irq_resource[idx].flags & IORESOURCE_AUTO) {		for (i = 0; i < 16 && !(irq->map & (1<<xtab[i])); i++);		if (i >= 16)			return -ENOENT;		cfg->result.irq_resource[idx].flags &= ~IORESOURCE_AUTO;		if (!isapnp_check_interrupt(cfg, *value1 = *value2 = xtab[i], idx))			return 0;	}	do {		for (i = 0; i < 16 && xtab[i] != *value1; i++);		for (i++; i < 16 && !(irq->map & (1<<xtab[i])); i++);		if (i >= 16) {			if (irq->res && irq->res->alt) {				if ((err = isapnp_alternative_switch(cfg, irq->res, irq->res->alt))<0)					return err;				goto __again;			}			return -ENOENT;		} else {			*value1 = *value2 = xtab[i];		}	} while (isapnp_check_interrupt(cfg, *value1, idx));	return 0;}static int isapnp_check_dma(struct isapnp_cfgtmp *cfg, int dma, int idx){	int i;	struct pnp_dev *dev;	if (dma < 0 || dma == 4 || dma > 7)		return 1;	for (i = 0; i < 8; i++) {		if (isapnp_reserve_dma[i] == dma)			return 1;	}	for (dev = isapnp_devices; dev; dev = dev->next) {		if (dev->active) {			if (dev->dma_resource[0].start == dma || dev->dma_resource[1].start == dma)				return 1;		}	}	if (request_dma(dma, "isapnp"))		return 1;	free_dma(dma);	for (i = 0; i < 2; i++) {		if (i == idx)			continue;		if (!cfg->result.dma_resource[i].flags ||		    (cfg->result.dma_resource[i].flags & IORESOURCE_AUTO))			continue;		if (cfg->result.dma_resource[i].start == dma)			return 1;	}	return 0;}static int isapnp_valid_dma(struct isapnp_cfgtmp *cfg, int idx){	int err, i;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品视频在线观看免费| 亚洲国产精品久久一线不卡| 亚洲视频一二三| 欧美国产精品v| 春色校园综合激情亚洲| 国产欧美一区二区精品久导航 | 欧美日韩一区二区电影| 久草这里只有精品视频| 国产欧美精品一区aⅴ影院| 欧美调教femdomvk| 国产福利精品一区| 免费成人性网站| 国产精品传媒入口麻豆| 精品噜噜噜噜久久久久久久久试看| 国产suv一区二区三区88区| 日韩在线a电影| 亚洲精品国产成人久久av盗摄| 欧美成人性福生活免费看| 日本道精品一区二区三区| 成人动漫中文字幕| 国产精品一区久久久久| 免费在线观看精品| 青娱乐精品在线视频| 亚洲制服丝袜在线| 亚洲国产美国国产综合一区二区| 亚洲免费资源在线播放| 欧美国产日韩a欧美在线观看| 欧美精品一区二区三区很污很色的| 在线播放中文一区| 欧美四级电影在线观看| 在线观看欧美精品| 欧洲在线/亚洲| 欧美一级免费观看| www国产精品av| 国产精品免费av| 亚洲一区中文日韩| 日韩国产欧美在线视频| 秋霞影院一区二区| 国产成人在线视频网站| 91色婷婷久久久久合中文| 欧美日韩国产片| 久久久国产午夜精品| 亚洲六月丁香色婷婷综合久久| 亚洲日韩欧美一区二区在线| 一区二区三区久久| 久久aⅴ国产欧美74aaa| 国产白丝精品91爽爽久久| 99精品视频一区二区三区| 精品污污网站免费看| 精品国产乱码久久久久久影片| 国产片一区二区三区| 五月天激情综合| www.综合网.com| 欧美va在线播放| 亚洲国产一区在线观看| 国产成人综合网| 91精品国产福利在线观看| 亚洲欧美精品午睡沙发| 九九在线精品视频| 欧美美女直播网站| 精品一区二区三区久久| 91精品国产综合久久久久久漫画 | 一本大道久久精品懂色aⅴ| 日本高清免费不卡视频| 久久久亚洲精品石原莉奈| 国产一区二区三区免费| 日韩欧美国产高清| 国产精品久久久久久亚洲伦 | 日韩亚洲欧美中文三级| 国产精品私人自拍| 国产高清精品久久久久| 91精品国产91热久久久做人人| 一区二区三区日韩在线观看| 国产麻豆日韩欧美久久| 精品久久一区二区三区| 一区二区三区四区不卡视频| 91丨九色porny丨蝌蚪| 日韩欧美123| 麻豆一区二区99久久久久| 色欧美乱欧美15图片| 一区二区三区四区av| 福利一区二区在线观看| 国产女主播视频一区二区| 国内精品第一页| 国产精品久久久久一区二区三区| 激情欧美一区二区三区在线观看| 久久久久青草大香线综合精品| 麻豆一区二区99久久久久| 国产目拍亚洲精品99久久精品| 狂野欧美性猛交blacked| 国产欧美精品区一区二区三区 | 精品在线播放午夜| 欧美变态tickle挠乳网站| 国产一区二区三区香蕉| 久久综合色综合88| 91福利精品第一导航| 精品一区二区影视| 亚洲欧洲精品一区二区三区 | 亚洲欧美国产高清| 91精品国产日韩91久久久久久| 国产一区二区福利| 综合久久一区二区三区| 欧美一区二区三区喷汁尤物| 国产九色sp调教91| 免费国产亚洲视频| ...中文天堂在线一区| 欧美va亚洲va| 日本丰满少妇一区二区三区| 激情综合一区二区三区| 亚洲欧美二区三区| 中文字幕不卡三区| 久久人人爽人人爽| 欧美日韩国产另类不卡| 一本一本大道香蕉久在线精品| 日本亚洲欧美天堂免费| 亚洲福中文字幕伊人影院| 中文字幕一区日韩精品欧美| 在线播放欧美女士性生活| 粉嫩av一区二区三区粉嫩 | 成人天堂资源www在线| 看电影不卡的网站| 香蕉av福利精品导航| 亚洲色欲色欲www在线观看| 国产偷v国产偷v亚洲高清| 欧美一区二区三区视频| 91精品国产高清一区二区三区蜜臀 | 久久精品日产第一区二区三区高清版 | 天使萌一区二区三区免费观看| 夜夜精品浪潮av一区二区三区| 国产精品欧美一级免费| 欧美国产精品一区二区| 欧美国产97人人爽人人喊| 国产三级精品视频| 亚洲国产高清在线| 国产精品国模大尺度视频| 亚洲欧洲美洲综合色网| 中文字幕第一区第二区| 亚洲人吸女人奶水| 亚洲精品视频在线观看免费| 香蕉久久一区二区不卡无毒影院 | 欧美性一区二区| 欧美一区二区三区系列电影| 欧美肥大bbwbbw高潮| 日韩一区二区三区视频在线| 日韩午夜av一区| 2020国产精品自拍| 一区二区三区中文免费| 美日韩一级片在线观看| 国产成人精品亚洲日本在线桃色| 成人精品一区二区三区四区| 欧美亚洲国产一区在线观看网站| 欧美一区二区三区在线电影| 国产校园另类小说区| 一区二区三区日韩| 狠狠色狠狠色综合| 91久久国产综合久久| 久久这里只有精品首页| 亚洲欧美偷拍卡通变态| 免费不卡在线视频| 91浏览器打开| 国产网站一区二区| 日韩极品在线观看| 色一区在线观看| 久久久综合激的五月天| 午夜一区二区三区视频| 成人91在线观看| 欧美精品一区二区久久婷婷| 亚洲一区av在线| 91在线精品一区二区三区| 久久久久久免费网| 免费观看在线综合| 欧美日韩亚洲综合在线| 亚洲午夜三级在线| 成人高清伦理免费影院在线观看| 日韩欧美一级在线播放| 亚洲成av人影院在线观看网| 91丝袜高跟美女视频| 国产精品无码永久免费888| 国产成人综合亚洲网站| 国产网站一区二区| 国产精品亚洲一区二区三区在线 | 91精品国产入口| 日韩精品一卡二卡三卡四卡无卡| 色欧美乱欧美15图片| 亚洲成av人片一区二区三区| 一本色道久久加勒比精品| 亚洲综合一二区| 在线不卡一区二区| 蜜桃一区二区三区在线观看| 日韩欧美一区在线观看| 久久 天天综合| 久久久777精品电影网影网| 国产成人亚洲综合a∨婷婷| 亚洲欧洲精品一区二区三区| 色综合久久久久久久久久久| 一区二区三区免费| 欧美精品aⅴ在线视频| 麻豆一区二区三| 综合欧美一区二区三区| 欧洲亚洲国产日韩|