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

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

?? tor2ee.c

?? This a SOFTWARE pbx DRIVER
?? C
?? 第 1 頁 / 共 2 頁
字號:
	word a,r;	int tries;	int retry=0;attempt_retry:	if (retry > 10) {		fprintf(stderr, "Maximum retries exceeded reading position %04x\n", addr);		exit(1);	}	/* Load the value to be written */	pci_write_long(dev, PLX_PCI_VPD_DATA, val);	/* Be sure we only execute a write */	a = addr | 0x8000;	pci_write_word(dev, PLX_PCI_VPD_ADDR, a);	tries = 0;	/* Wait for write to be validated */	for(;;) {		r = pci_read_word(dev, PLX_PCI_VPD_ADDR);		/* Wait a bit if it's not yet written */		if (r & 0x8000) {			tries++;			if (tries > 10) {				retry++;				goto attempt_retry;			}			usleep(1);		} else 			break;	} 	return 0;}static int read_pci_eeprom(struct pci_dev *dev, struct pci_eeprom *ee){	int x;	u_int32_t v, *tmp;	printf("Reading from EEPROM..");	fflush(stdout);	tmp = (u_int32_t *)(ee->data);	if (manual) {		for (x=0;x<sizeof(ee->data)/2;x++) {			ee->data[x] = plx_read_reg(x);			printf(".");			fflush(stdout);		}	} else {		for (x=0;x<sizeof(ee->data)/4;x++) {			v = read_eeprom_value(dev, x << 2);			ee->data[x * 2] = (v & 0xFFFF0000) >> 16;			ee->data[x * 2 + 1] = v & 0xFFFF;			printf(".");			fflush(stdout);		}	}	printf("Done\n");	return 0;}static int write_pci_eeprom(struct pci_dev *dev, struct pci_eeprom *ee){	int x;	u_int32_t v, *tmp;	int writeboundary;	writeboundary = ((word *)memw)[PLX_LOC_WP_BOUNDARY/2];	printf("Original Writeprotect boundary: %04x\n", writeboundary);	/* Turn off write protect */	((word *)memw)[PLX_LOC_WP_BOUNDARY/2] = 0;	printf("Writing to EEPROM..");	fflush(stdout);	if (manual) {		/* Enable writing */		plx_write_en();		/* Write values */		for (x=sizeof(ee->data)/2-1;x>=0;x--) {			plx_write_reg(x, (int)ee->data[x]);			printf(".");			fflush(stdout);		}	} else {		tmp = (u_int32_t *)(ee->data);		for (x=sizeof(ee->data)/4-1;x>=0;x--) {			v = (ee->data[x * 2] << 16) | ee->data[x * 2 + 1];			write_eeprom_value(dev, x << 2, v);			printf(".");			fflush(stdout);		}	}	printf("Done\n");	/* Restore write protect */	((word *)memw)[PLX_LOC_WP_BOUNDARY/2] = writeboundary;	return 0;}static int reset_pci_eeprom(struct pci_dev *dev){	int writeboundary;	writeboundary = ((word *)memw)[PLX_LOC_WP_BOUNDARY/2];	printf("Original Writeprotect boundary: %04x\n", writeboundary);	/* Turn off write protect */	((word *)memw)[PLX_LOC_WP_BOUNDARY/2] = 0;	printf("Resetting EEPROM..");	fflush(stdout);	/* Enable writing */	plx_write_en();	plx_write_all(0xffff);	printf("Done\n");	/* Restore write protect */	((word *)memw)[PLX_LOC_WP_BOUNDARY/2] = writeboundary;	return 0;}#if 0static void plx_reset(void){	unsigned short tmp;	tmp = ((word *)memw)[0x50/2];	printf("CNTRL: %04x\n", tmp);	tmp |= 0x4000;	printf("Writing: %04x\n", tmp);	tmp = ((word *)memw)[0x50/2];	printf("Readback: %04x\n", tmp);	sleep(1);	tmp = ((word *)memw)[0x50/2];	printf("CNTRL: %04x\n", tmp);	tmp &= ~0x4000;	((word *)memw)[0x50/2] = tmp;	tmp = ((word *)memw)[0x50/2];	printf("CNTRL: %04x\n", tmp);}#endifstatic void plx_manread(void){	int x;	unsigned short reg;#if 0	read_cntrl();	printf("Cntrl is %02x\n", cntrl);	cntrl &= ~0xf0ff;	printf("Clearing all signals\n");	write_cntrl();	fgetc(stdin);	printf("Setting CS\n");	cntrl |= BIT_EE_CS;	write_cntrl();	read_cntrl();	printf("New read: %04x\n", cntrl);	fgetc(stdin);	printf("Setting CLK\n");	cntrl &= ~BIT_EE_CS;	cntrl |= BIT_EE_CLK;	write_cntrl();	fgetc(stdin);	printf("Setting WR\n");	cntrl &= ~BIT_EE_CLK;	cntrl |= BIT_EE_WR;	write_cntrl();	fgetc(stdin);	cntrl &= ~BIT_EE_WR;	write_cntrl();#endif	for (x=0;x<NUM_REGS;x++) {		reg = plx_read_reg(x);		printf("0x%02x: %04x\n", x, reg);	}}static void dump_pci_eeprom(struct pci_eeprom *ee){	int x;	for (x=0;x<NUM_EEREGS;x++) 		printf("%60s(%04x): 0x%04x\n", eeregs[x].name, eeregs[x].pos, ee->data[eeregs[x].pos/2]);}static int read_eeprom_file(char *filename, struct pci_eeprom *ee){	int res,len;	int fd;	len = sizeof(*ee);	fd = open(filename, O_RDONLY);	if (fd < 0) {		fprintf(stderr, "Unable to open %s for input\n", filename);		return -1;	}	printf("Reading from file '%s'....", filename);	fflush(stdout);	res = read(fd, (char *)ee, len);	close(fd);	if (res != len) {		printf("Failed!\n");		if (res < 0) {			fprintf(stderr, "Failed to read from file: %s\n", strerror(errno));		} else {			fprintf(stderr, "Only read %d of %d bytes: %s\n", res, len, strerror(errno));		}		return -1;	}	if (ee->magic != htonl(EEPROM_MAGIC)) {		printf("Failed!\n");		fprintf(stderr, "File '%s' does not appear to be a Tormenta2 EEPROM file\n",			filename);		return -1;	}	if (ee->crc16 != htons(calc_crc16((char *)ee, sizeof(*ee) - 2))) {		printf("Failed!\n");		fprintf(stderr, "File '%s' has improper checksum\n", filename);		return -1;	}	printf("Done.\n");	printf("Read Revision '%s' from file '%s'\n", ee->revision, filename);	return 0;}static int write_eeprom_file(char *filename, char *revision, struct pci_eeprom *ee){	int res;	int len;	int fd;	fd = open(filename, O_CREAT | O_TRUNC | O_WRONLY, 0666);	if (fd < 0) {		fprintf(stderr, "Unable to open %s for output\n", filename);		return -1;	}	/* Record magic */	ee->magic = htonl(EEPROM_MAGIC);	/* Store revision number */	memset(ee->revision, 0, sizeof(ee->revision));	strncpy(ee->revision, revision, sizeof(ee->revision));	/* Calculate FCS on revision and data */	ee->crc16 = htons(calc_crc16((char *)ee, sizeof(*ee) - 2));	len = sizeof(*ee);	printf("Writing Revision '%s' to file '%s'....",	       ee->revision, filename);	fflush(stdout);	res = write(fd, (char *)ee, len);	close(fd);	if (res != len) {		printf("Failed!\n");		if (res < 0) {			fprintf(stderr, "Failed to write to file: %s\n", strerror(errno));		} else {			fprintf(stderr, "Only wrote %d of %d bytes: %s\n", res, len, strerror(errno));		}		return -1;	}	printf("Done.\n");	return 0;}static int openmem(off_t offset, size_t len, int inport){	if (iopl(3)) {		fprintf(stderr, "Unable to set I/O Permissions: %s\n", strerror(errno));		return -1;	}	if (memfd > -1) {		fprintf(stderr, "Huh?  Memory already exists?\n");		return 0;	}	memfd = open("/dev/mem", O_RDWR);	if (memfd < 0) {		fprintf(stderr, "Unable to open /dev/mem: %s\n", strerror(errno));		return -1;	}	memw = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, memfd, offset);	if (memw == MAP_FAILED) {		fprintf(stderr, "Memory map failed: %s\n", strerror(errno));		close(memfd);		memfd = -1;		return -1;	}	memlen = len;	port = inport & PCI_ADDR_IO_MASK;	return 0;}static char *makerev(void){	static char rev[32];	time_t t;	struct tm *tm;	t = time(NULL);	tm = localtime(&t);	strftime(rev, sizeof(rev), "Rev[%d/%m/%Y][%T]", tm);	return rev;}static void closemem(void){	if (memfd > -1) {		munmap(memw, memlen);		close(memfd);	}	memfd = -1;	if (pci)		pci_cleanup(pci);}int detect_tormenta2(int index){	/* Detect presense of Tormenta 2 card or return -1. 	   Sets up base addresses, etc as necessary as well. */	int which=0;	char *variant;	pci = pci_alloc();	pci_init(pci);	pci_scan_bus(pci);	dev = pci->devices;	while(dev) {#if 0		printf("[%d:%d:%d] VendorID: %04x DeviceID: %04x\n", 		       dev->bus, dev->dev, dev->func, dev->vendor_id, 		       dev->device_id);#endif		if (tor2_pci_match(dev->vendor_id, dev->device_id, &variant)) 			if (index == which++)				break;		dev = dev->next;	}	if (!dev) {		if (which) 			fprintf(stderr, "Only %d Tormenta2 card(s) found\n", which);		else			fprintf(stderr, "No Tormenta2 card found in system\n");		return -1;	}	printf("Tormenta2 Card (%s) Found!\n"	       "Vendor ID: %04x Device ID: %04x\n"	       "PLX Control Base Address: 0x%08lx [0x%04lx window]\n"	       "PLX Control I/O Space: 0x%lx\n",	       variant,		dev->vendor_id, dev->device_id,	        dev->base_addr[0], dev->size[0], 	        dev->base_addr[1]);	if (!dev->base_addr[0] || !dev->size[0]) {		fprintf(stderr, "Invalid base address info\n");		return -1;	}	if (openmem(dev->base_addr[0], dev->size[0], dev->base_addr[1])) {		fprintf(stderr, "Unable to open memory\n");		return -1;	}	printf("Mapped registers at %p\n", memw);	return 0;}void usage(int exitstatus){	fprintf(stderr, "tor2ee -- Tormenta 2 EEPROM controller\n""Usage: tor2ee command [args...]\n""       tor2ee detect\n""              -- Detect presense of Tormenta 2 card\n""       tor2ee [man]save <filename> [revision]\n""              -- Read contents of eeprom and write to file\n""	tor2ee reset\n""              -- Reset the PLX EEPROM\n""	tor2ee manread\n""	       -- Manually read registers\n""       tor2ee [man]load <filename>\n""              -- Write EEPROM from contents of file\n""       tor2ee modify <filename> [hex offset] [hex value]\n""              -- Change a specific offset and value in a given filename\n""       tor2ee verify <filename>\n""              -- Verify integrity of EEPROM file\n""       tor2ee compare <filename>\n""              -- Compare EEPROM file to current contents\n""       tor2ee dump [filename]\n""              -- Dump current EEPROM contents or filename if specified\n");	exit(exitstatus);}#define MODE_DETECT	0#define MODE_DUMP	1#define MODE_SAVE	2#define MODE_MODIFY	3#define MODE_LOAD	4#define MODE_RESET	5#define MODE_MANREAD	6static void modify(struct pci_eeprom *ee, int reg, int val){	int x;	char *regn = "<Unknown>";	for (x=0;x<NUM_EEREGS;x++) 		if (eeregs[x].pos == reg)			regn = eeregs[x].name;	ee->data[reg/2] = val;	printf("Setting %s to %04x\n", regn, val);}int main(int argc, char *argv[]){	struct pci_eeprom ee;	int mode;	int reg;	int val;	char tmp[32];	char *readfile = NULL;	char *writefile = NULL;	char *revision = NULL;	if (argc < 2) {		usage(1);	}	if (!strcasecmp(argv[1], "dump")) {		mode = MODE_DUMP;		if (argc > 2)			readfile = argv[2];	} else if (!strcasecmp(argv[1], "save") ||		   !strcasecmp(argv[1], "mansave")) {		if (argc < 3)			usage(1);		writefile = argv[2];		if (argc > 3)			revision = argv[3];		else			revision = makerev();		mode = MODE_SAVE;		if (!strcasecmp(argv[1], "mansave"))			manual = 1;	} else if (!strcasecmp(argv[1], "detect")) {		mode = MODE_DETECT;	} else if (!strcasecmp(argv[1], "load") ||		   !strcasecmp(argv[1], "manload")) {		if (argc < 3)			usage(1);		readfile = argv[2];		if (!strcasecmp(argv[1], "manload"))			manual = 1;		mode = MODE_LOAD;	} else if (!strcasecmp(argv[1], "reset"))  {		mode = MODE_RESET;	} else if (!strcasecmp(argv[1], "manread")) {		mode = MODE_MANREAD;	} else if (!strcasecmp(argv[1], "modify")) {		if (argc < 5)			usage(1);		readfile = writefile = argv[2];		if ((sscanf(argv[3], "%x", &reg) != 1) ||		    (reg >= (NUM_REGS) * 2) || (reg < 0)) {			fprintf(stderr, "Invalid register number: %s\n", argv[3]);			usage(1);		}		if (sscanf(argv[4], "%x", &val) != 1) {			fprintf(stderr, "Invalid value number: %s\n", argv[3]);			usage(1);		}		mode = MODE_MODIFY;	} else {		usage(1);	}	if (detect_tormenta2(0)) {		fprintf(stderr, "Tormenta 2 Not found in System\n");		closemem();		exit(1);	}	if (mode == MODE_RESET) {		reset_pci_eeprom(dev);	}	if (mode == MODE_MANREAD) {		plx_manread();	}	if ((mode == MODE_DUMP)) {		if (readfile) {			if (read_eeprom_file(readfile, &ee)) {				fprintf(stderr, "Unable to read EEPROM file\n");				closemem();				exit(1);			}		} else {			if (read_pci_eeprom(dev, &ee)) {				fprintf(stderr, "Unable to read existing EEPROM\n");				closemem();				exit(1);			}		}		dump_pci_eeprom(&ee);	}	if (mode == MODE_SAVE) {		if (read_pci_eeprom(dev, &ee)) {			fprintf(stderr, "Unable to read existiing EEPROM\n");			closemem();			exit(1);		}		if (write_eeprom_file(writefile, revision, &ee)) {			fprintf(stderr, "Unable to save EEPROM contents\n");			closemem();			exit(1);		}	}	if (mode == MODE_MODIFY) {		if (read_eeprom_file(readfile, &ee)) {			fprintf(stderr, "Unable to read EEPROM file\n");			closemem();			exit(1);		}		modify(&ee, reg, val);		strncpy(tmp, ee.revision, sizeof(tmp));		if (write_eeprom_file(writefile, tmp, &ee)) {			fprintf(stderr, "Unable to write EEPROM file\n");			closemem();			exit(1);		}	}	if (mode == MODE_LOAD) {		if (read_eeprom_file(readfile, &ee)) {			fprintf(stderr, "Unable to read EEPROM file\n");			closemem();			exit(1);		}		if (write_pci_eeprom(dev, &ee)) {			fprintf(stderr, "Unable to write to EEPROM\n");			closemem();			exit(1);		}		printf("EEPROM successfully written.  Please reboot to make changes\n");		printf("take effect.\n");	}	closemem();	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品自拍动漫在线| 欧美日韩国产美| 精品在线你懂的| 午夜激情综合网| 天天操天天综合网| 亚洲成人一区在线| 蜜臀久久99精品久久久久久9| 日韩精品高清不卡| 久久99热99| 成人少妇影院yyyy| 99re66热这里只有精品3直播| 99re热视频精品| 欧美男同性恋视频网站| 日韩免费看网站| 欧美国产成人在线| 亚洲日穴在线视频| 午夜国产精品一区| 国产一区999| 成人国产精品视频| 在线观看亚洲成人| 精品视频色一区| 久久嫩草精品久久久久| 亚洲特黄一级片| 午夜成人在线视频| 国产成a人无v码亚洲福利| 色综合久久久久综合99| 欧美夫妻性生活| 国产亚洲成aⅴ人片在线观看| 亚洲美女一区二区三区| 天天影视涩香欲综合网| 国产丶欧美丶日本不卡视频| 欧美体内she精视频| 久久五月婷婷丁香社区| 一区二区三区欧美视频| 国产综合色在线| 欧美中文字幕一区| 国产亚洲精品久| 亚洲成人黄色小说| 不卡的av中国片| 国产欧美视频一区二区| 伊人性伊人情综合网| 韩国v欧美v日本v亚洲v| 欧美午夜一区二区三区| 亚洲国产精华液网站w| 日韩精品一二三四| 在线免费观看不卡av| 国产欧美精品一区aⅴ影院 | 久久综合色天天久久综合图片| 国产精品区一区二区三区| 日本亚洲免费观看| 91福利在线观看| 国产精品久久久久天堂| 美美哒免费高清在线观看视频一区二区 | 91国内精品野花午夜精品| 久久婷婷一区二区三区| 日韩高清中文字幕一区| 91福利国产成人精品照片| 久久久久9999亚洲精品| 蜜乳av一区二区三区| 欧美日韩中文字幕精品| 亚洲日本在线a| 成人国产精品免费| 久久久久国产精品人| 久久国产尿小便嘘嘘| 9191国产精品| 爽爽淫人综合网网站| 欧美亚洲自拍偷拍| 亚洲精品久久久蜜桃| 99精品一区二区| 亚洲图片激情小说| 色系网站成人免费| 一区二区三区日韩欧美精品| 91亚洲精品乱码久久久久久蜜桃| 国产女人aaa级久久久级| 国产乱码精品1区2区3区| 久久先锋影音av| 国产成人在线免费| 中国色在线观看另类| www.欧美.com| 亚洲另类在线制服丝袜| 在线一区二区三区四区| 亚洲午夜国产一区99re久久| 欧美伦理视频网站| 美女被吸乳得到大胸91| 久久久国产一区二区三区四区小说 | 亚洲欧洲日韩一区二区三区| 99久久精品免费| 亚洲综合在线电影| 正在播放一区二区| 国产在线精品一区二区| 久久精品在线免费观看| 成人爱爱电影网址| 玉足女爽爽91| 欧美一级片在线观看| 国产伦精品一区二区三区视频青涩| 精品av综合导航| 成人开心网精品视频| 亚洲自拍都市欧美小说| 欧美一区二区三区视频| 国产乱子伦一区二区三区国色天香| 国产视频视频一区| 欧美亚洲一区二区在线观看| 成人激情校园春色| 一区二区三区精品视频在线| 在线播放国产精品二区一二区四区| 精品一区二区日韩| 亚洲三级电影网站| www国产成人| 色天天综合久久久久综合片| 久久国产综合精品| 亚洲精品日韩专区silk| 精品美女一区二区三区| 91美女片黄在线观看| 九九视频精品免费| 亚洲国产日韩在线一区模特| 久久免费偷拍视频| 欧美人与性动xxxx| 成人一区二区三区| 另类调教123区 | 石原莉奈在线亚洲二区| 国产精品私人自拍| 欧美刺激午夜性久久久久久久| 色诱视频网站一区| 岛国av在线一区| 捆绑变态av一区二区三区| 悠悠色在线精品| 国产精品色哟哟网站| 精品久久久久一区| 制服丝袜中文字幕亚洲| 色呦呦国产精品| youjizz国产精品| 国产一区二区三区四| 丝袜美腿一区二区三区| 亚洲国产wwwccc36天堂| 亚洲精品一卡二卡| 国产精品免费网站在线观看| 精品久久久久一区| 日韩欧美一区二区免费| 欧美日韩一卡二卡三卡| 在线中文字幕不卡| 色狠狠色噜噜噜综合网| 暴力调教一区二区三区| 成人综合在线观看| 国产91富婆露脸刺激对白| 久久国产尿小便嘘嘘尿| 久久国产精品99久久人人澡| 日本视频中文字幕一区二区三区| 亚洲国产日韩a在线播放| 亚洲在线视频一区| 亚洲综合免费观看高清完整版| 亚洲欧美激情视频在线观看一区二区三区| 国产区在线观看成人精品| 国产情人综合久久777777| 中文字幕高清一区| 国产精品成人一区二区艾草 | 精品福利在线导航| 精品免费国产一区二区三区四区| 日韩欧美一区二区视频| 日韩精品中文字幕一区| 2021国产精品久久精品| 国产亚洲精久久久久久| 亚洲视频在线一区观看| 亚洲永久精品国产| 日韩精品福利网| 国产一区二区三区高清播放| 国产成人免费在线观看不卡| 国产不卡在线一区| 日本丰满少妇一区二区三区| 欧美视频一区在线| 日韩视频在线永久播放| 国产日韩影视精品| 亚洲女同ⅹxx女同tv| 午夜成人免费视频| 国产成人亚洲综合a∨婷婷图片| 成人av电影观看| 欧美性三三影院| 精品国产伦一区二区三区观看方式 | 亚洲国产精品自拍| 亚洲mv在线观看| 国产激情一区二区三区四区| 色综合久久中文字幕综合网| 91精品国产aⅴ一区二区| 久久精品人人做| 一区二区在线观看视频 | 久久电影国产免费久久电影| 国产91精品入口| 欧美绝品在线观看成人午夜影视| 欧美日本一道本| 欧美大白屁股肥臀xxxxxx| 国产精品久久久久一区二区三区| 石原莉奈在线亚洲二区| 99久久99久久久精品齐齐| 欧美日韩国产综合久久| 亚洲国产精品成人综合色在线婷婷| 一区二区在线观看免费| 国产成人免费视频一区| 91精品国产入口在线| 亚洲欧美aⅴ...| 国产成人av福利| 日韩欧美久久久|