⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mkioconf.c

📁 早期freebsd实现
💻 C
📖 第 1 页 / 共 3 页
字号:
		}		if (dp->d_addr == 0) {			printf("must specify csr address for %s%d\n",			    dp->d_name, dp->d_unit);			continue;		}		if (dp->d_drive != UNKNOWN || dp->d_slave != UNKNOWN) {			printf("drives need their own entries; dont ");			printf("specify drive or slave for %s%d\n",			    dp->d_name, dp->d_unit);			continue;		}		if (dp->d_flags) {			printf("controllers (e.g. %s%d) ",			    dp->d_name, dp->d_unit);			printf("don't have flags, only devices do\n");			continue;		}		fprintf(fp,		    "\t{ &%sdriver,\t%d,\t%s,\t0,\t%sint%d, C 0x%x },\n",		    dp->d_name, dp->d_unit, qu(mp->d_unit),		    dp->d_name, dp->d_unit, dp->d_addr);	}	fprintf(fp, "\t0\n};\n");/* versabus devices */	fprintf(fp, "\nstruct vba_device vbdinit[] = {\n");	fprintf(fp,"\t/* driver,  unit, ctlr,  vbanum, slave,   intr,    addr,    dk, flags*/\n");	for (dp = dtab; dp != 0; dp = dp->d_next) {		mp = dp->d_conn;		if (dp->d_unit == QUES || dp->d_type != DEVICE || mp == 0 ||		    mp == TO_NEXUS || mp->d_type == MASTER ||		    eq(mp->d_name, "mba"))			continue;		np = mp->d_conn;		if (np != 0 && np != TO_NEXUS && eq(np->d_name, "mba"))			continue;		np = 0;		if (eq(mp->d_name, "vba")) {			if (dp->d_vec == 0)				printf(		"Warning, no interrupt vector specified for device %s%d\n",				    dp->d_name, dp->d_unit);			if (dp->d_addr == 0) {				printf("must specify csr for device %s%d\n",				    dp->d_name, dp->d_unit);				continue;			}			if (dp->d_drive != UNKNOWN || dp->d_slave != UNKNOWN) {				printf("drives/slaves can be specified ");				printf("only for controllers, ");				printf("not for device %s%d\n",				    dp->d_name, dp->d_unit);				continue;			}			vba_n = mp->d_unit;			slave = QUES;		} else {			if ((np = mp->d_conn) == 0) {				printf("%s%d isn't connected to anything ",				    mp->d_name, mp->d_unit);				printf(", so %s%d is unattached\n",				    dp->d_name, dp->d_unit);				continue;			}			vba_n = np->d_unit;			if (dp->d_drive == UNKNOWN) {				printf("must specify ``drive number'' ");				printf("for %s%d\n", dp->d_name, dp->d_unit);				continue;			}			/* NOTE THAT ON THE UNIBUS ``drive'' IS STORED IN */			/* ``SLAVE'' AND WE DON'T WANT A SLAVE SPECIFIED */			if (dp->d_slave != UNKNOWN) {				printf("slave numbers should be given only ");				printf("for massbus tapes, not for %s%d\n",				    dp->d_name, dp->d_unit);				continue;			}			if (dp->d_vec != 0) {				printf("interrupt vectors should not be ");				printf("given for drive %s%d\n",				    dp->d_name, dp->d_unit);				continue;			}			if (dp->d_addr != 0) {				printf("csr addresses should be given only ");				printf("on controllers, not on %s%d\n",				    dp->d_name, dp->d_unit);				continue;			}			slave = dp->d_drive;		}		fprintf(fp, "\t{ &%sdriver,  %2d,   %s,",		    eq(mp->d_name, "vba") ? dp->d_name : mp->d_name, dp->d_unit,		    eq(mp->d_name, "vba") ? " -1" : qu(mp->d_unit));		fprintf(fp, "  %s,    %2d,   %s, C 0x%-6x,  %d,  0x%x },\n",		    qu(vba_n), slave, intv(dp), dp->d_addr, dp->d_dk,		    dp->d_flags);	}	fprintf(fp, "\t0\n};\n");	pseudo_ioconf(fp);	(void) fclose(fp);}#endif#if MACHINE_HP300 || MACHINE_LUNA68Khp300_ioconf(){	register struct device *dp, *mp;	register int hpib, slave;	FILE *fp;	fp = fopen(path("ioconf.c"), "w");	if (fp == 0) {		perror(path("ioconf.c"));		exit(1);	}	fprintf(fp, "#include \"sys/param.h\"\n");	fprintf(fp, "#include \"sys/buf.h\"\n");	fprintf(fp, "#include \"sys/map.h\"\n");	fprintf(fp, "\n");	if (machine == MACHINE_HP300)		fprintf(fp, "#include \"hp/dev/device.h\"\n\n");	else		fprintf(fp, "#include \"luna68k/dev/device.h\"\n\n");	fprintf(fp, "\n");	fprintf(fp, "#define C (caddr_t)\n");	fprintf(fp, "#define D (struct driver *)\n\n");	/*	 * First print the hpib controller initialization structures	 */	for (dp = dtab; dp != 0; dp = dp->d_next) {		mp = dp->d_conn;		if (dp->d_unit == QUES || mp == 0)			continue;		fprintf(fp, "extern struct driver %sdriver;\n", dp->d_name);	}	fprintf(fp, "\nstruct hp_ctlr hp_cinit[] = {\n");	fprintf(fp, "/*\tdriver,\t\tunit,\talive,\taddr,\tflags */\n");	for (dp = dtab; dp != 0; dp = dp->d_next) {		mp = dp->d_conn;		if (dp->d_unit == QUES ||			dp->d_type != MASTER && dp->d_type != CONTROLLER)			continue;		if (mp != TO_NEXUS) {			printf("%s%s must be attached to an sc (nexus)\n",				dp->d_name, wnum(dp->d_unit));			continue;		}		if (dp->d_drive != UNKNOWN || dp->d_slave != UNKNOWN) {			printf("can't specify drive/slave for %s%s\n",				dp->d_name, wnum(dp->d_unit));			continue;		}		fprintf(fp,			"\t{ &%sdriver,\t%d,\t0,\tC 0x%x,\t0x%x },\n",			dp->d_name, dp->d_unit, dp->d_addr, dp->d_flags);	}	fprintf(fp, "\t0\n};\n");/* devices */	fprintf(fp, "\nstruct hp_device hp_dinit[] = {\n");	fprintf(fp,	   "/*driver,\tcdriver,\tunit,\tctlr,\tslave,\taddr,\tdk,\tflags*/\n");	for (dp = dtab; dp != 0; dp = dp->d_next) {		mp = dp->d_conn;		if (mp == 0 || dp->d_type != DEVICE || hpbadslave(mp, dp))			continue;		if (mp == TO_NEXUS) {			if (dp->d_drive != UNKNOWN || dp->d_slave != UNKNOWN) {				printf("can't specify drive/slave for %s%s\n",					dp->d_name, wnum(dp->d_unit));				continue;			}			slave = QUES;			hpib = QUES;		} else {			if (dp->d_addr != 0) {				printf("can't specify sc for device %s%s\n",					dp->d_name, wnum(dp->d_unit));				continue;			}			if (mp->d_type == CONTROLLER) {				if (dp->d_drive == UNKNOWN) {					printf("must specify drive for %s%s\n",						dp->d_name, wnum(dp->d_unit));					continue;				}				slave = dp->d_drive;			} else {				if (dp->d_slave == UNKNOWN) {					printf("must specify slave for %s%s\n",						dp->d_name, wnum(dp->d_unit));					continue;				}				slave = dp->d_slave;			}			hpib = mp->d_unit;		}		fprintf(fp, "{ &%sdriver,\t", dp->d_name);		if (mp == TO_NEXUS)			fprintf(fp, "D 0x0,\t");		else			fprintf(fp, "&%sdriver,", mp->d_name);		fprintf(fp, "\t%d,\t%d,\t%d,\tC 0x%x,\t%d,\t0x%x },\n",			dp->d_unit, hpib, slave,			dp->d_addr, dp->d_dk, dp->d_flags);	}	fprintf(fp, "0\n};\n");	pseudo_ioconf(fp);	(void) fclose(fp);}#define ishpibdev(n) (eq(n,"rd") || eq(n,"ct") || eq(n,"mt") || eq(n,"ppi"))#define isscsidev(n) (eq(n,"sd") || eq(n,"st") || eq(n,"ac"))hpbadslave(mp, dp)	register struct device *dp, *mp;{	if (mp == TO_NEXUS && ishpibdev(dp->d_name) ||	    mp != TO_NEXUS && eq(mp->d_name, "hpib") &&	    !ishpibdev(dp->d_name)) {		printf("%s%s must be attached to an hpib\n",		       dp->d_name, wnum(dp->d_unit));		return (1);	}	if (mp == TO_NEXUS && isscsidev(dp->d_name) ||	    mp != TO_NEXUS && eq(mp->d_name, "scsi") &&	    !isscsidev(dp->d_name)) {		printf("%s%s must be attached to a scsi\n",		       dp->d_name, wnum(dp->d_unit));		return (1);	}	return (0);}#endif#if MACHINE_I386char *sirq();i386_ioconf(){	register struct device *dp, *mp, *np;	register int uba_n, slave;	FILE *fp;	fp = fopen(path("ioconf.c"), "w");	if (fp == 0) {		perror(path("ioconf.c"));		exit(1);	}	fprintf(fp, "/*\n");	fprintf(fp, " * ioconf.c \n");	fprintf(fp, " * Generated by config program\n");	fprintf(fp, " */\n\n");	fprintf(fp, "#include \"machine/pte.h\"\n");	fprintf(fp, "#include \"sys/param.h\"\n");	fprintf(fp, "#include \"sys/buf.h\"\n");	fprintf(fp, "#include \"sys/map.h\"\n");	fprintf(fp, "\n");	fprintf(fp, "#define V(s)	__CONCAT(V,s)\n");	fprintf(fp, "#define C (caddr_t)\n\n");	/*	 * First print the isa initialization structures	 */	if (seen_isa) {		fprintf(fp, "/*\n");		fprintf(fp, " * ISA devices\n");		fprintf(fp, " */\n\n");		fprintf(fp, "#include \"i386/isa/isa_device.h\"\n");		fprintf(fp, "#include \"i386/isa/isa.h\"\n");		fprintf(fp, "#include \"i386/isa/icu.h\"\n\n");		for (dp = dtab; dp != 0; dp = dp->d_next) {			mp = dp->d_conn;			if (mp == 0 || mp == TO_NEXUS ||			    !eq(mp->d_name, "isa"))				continue;			fprintf(fp,"extern struct isa_driver %sdriver; extern V(%s%d)();\n",			    dp->d_name, dp->d_name, dp->d_unit);		}		fprintf(fp, "\nstruct isa_device isa_devtab_bio[] = {\n");		fprintf(fp, "\/* driver 	iobase	irq   drq     maddr    msiz    intr   unit */\n");		for (dp = dtab; dp != 0; dp = dp->d_next) {			mp = dp->d_conn;			if (dp->d_unit == QUES || mp == 0 ||			    mp == TO_NEXUS || !eq(mp->d_name, "isa"))				continue;			if (!eq(dp->d_mask, "bio")) continue;			if (dp->d_port)		 fprintf(fp, "{ &%sdriver,  %8.8s,", dp->d_name, dp->d_port);			else	 fprintf(fp, "{ &%sdriver,     0x%03x,", dp->d_name, dp->d_portn);		fprintf(fp, " %5.5s, %2d,  C 0x%05X, %5d, V(%s%d),  %2d },\n",			 	sirq(dp->d_irq), dp->d_drq, dp->d_maddr,			 dp->d_msize, dp->d_name, dp->d_unit, dp->d_unit);		}		fprintf(fp, "0\n};\n");		fprintf(fp, "struct isa_device isa_devtab_tty[] = {\n");		fprintf(fp, "\/* driver 	iobase	irq   drq     maddr    msiz    intr   unit */\n");		for (dp = dtab; dp != 0; dp = dp->d_next) {			mp = dp->d_conn;			if (dp->d_unit == QUES || mp == 0 ||			    mp == TO_NEXUS || !eq(mp->d_name, "isa"))				continue;			if (!eq(dp->d_mask, "tty")) continue;			if (dp->d_port)		 fprintf(fp, "{ &%sdriver,  %8.8s,", dp->d_name, dp->d_port);			else	 fprintf(fp, "{ &%sdriver,     0x%03x,", dp->d_name, dp->d_portn);		fprintf(fp, " %5.5s, %2d,  C 0x%05X, %5d, V(%s%d),  %2d },\n",			 	sirq(dp->d_irq), dp->d_drq, dp->d_maddr,			 dp->d_msize, dp->d_name, dp->d_unit, dp->d_unit);		}		fprintf(fp, "0\n};\n\n");		fprintf(fp, "struct isa_device isa_devtab_net[] = {\n");		fprintf(fp, "\/* driver 	iobase	irq   drq     maddr    msiz    intr   unit */\n");		for (dp = dtab; dp != 0; dp = dp->d_next) {			mp = dp->d_conn;			if (dp->d_unit == QUES || mp == 0 ||			    mp == TO_NEXUS || !eq(mp->d_name, "isa"))				continue;			if (!eq(dp->d_mask, "net")) continue;			if (dp->d_port)		 fprintf(fp, "{ &%sdriver,  %8.8s,", dp->d_name, dp->d_port);			else	 fprintf(fp, "{ &%sdriver,     0x%03x,", dp->d_name, dp->d_portn);		fprintf(fp, " %5.5s, %2d,  C 0x%05X, %5d, V(%s%d),  %2d },\n",			 	sirq(dp->d_irq), dp->d_drq, dp->d_maddr,			 dp->d_msize, dp->d_name, dp->d_unit, dp->d_unit);		}		fprintf(fp, "0\n};\n\n");		fprintf(fp, "struct isa_device isa_devtab_null[] = {\n");		fprintf(fp, "\/* driver 	iobase	irq   drq     maddr    msiz    intr   unit */\n");		for (dp = dtab; dp != 0; dp = dp->d_next) {			mp = dp->d_conn;			if (dp->d_unit == QUES || mp == 0 ||			    mp == TO_NEXUS || !eq(mp->d_name, "isa"))				continue;			if (!eq(dp->d_mask, "null")) continue;			if (dp->d_port)		 fprintf(fp, "{ &%sdriver,  %8.8s,", dp->d_name, dp->d_port);			else	 fprintf(fp, "{ &%sdriver,     0x%03x,", dp->d_name, dp->d_portn);		fprintf(fp, " %5.5s, %2d,  C 0x%05X, %5d, V(%s%d),  %2d },\n",			 	sirq(dp->d_irq), dp->d_drq, dp->d_maddr,			 dp->d_msize, dp->d_name, dp->d_unit, dp->d_unit);		}		fprintf(fp, "0\n};\n\n");	}	pseudo_ioconf(fp);	(void) fclose(fp);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -