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

📄 rzdisk.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
📖 第 1 页 / 共 5 页
字号:
	/*	 * Inform the user what's going on.	 */	printf("\nCHANGING DISK DRIVE PARAMETERS TO DEFAULT VALUES!!!\n");	printstr("\nARE YOU SURE (y/n)? ");	if(!confirm())		return;	/*	 * Get the DEFAULT disk drive parameters.	 */	bzero((char *)&ms, sizeof(ms));	ms.ms_pgcode = 0x3f;	ms.ms_length = sizeof(ms) - 4;	ms.ms_pgctrl = DEFAULT_VALUES;	if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&ms) != SUCCESS) {		if(geterror() != NO_ERROR)			return;	}	bzero((char *)&msc, sizeof(msc));	msc.ms_pgcode = 0x3f;	msc.ms_length = sizeof(ms) - 4;	msc.ms_pgctrl = CHANGED_VALUES;	if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&msc) != SUCCESS) {		if(geterror() != NO_ERROR)			return;	}	/*	 * Cannot SAVE the parameters for the RRD40 disk.	 */	if(rrd40_disk)		setps = 0;	/*	 * Can SAVE the parameters for the RZ22,RZ23,RZ55 disks.	 */	else {		printstr("\nSAVE THE DEFAULT VALUES ON DISK (y/n)? ");		if(confirm())			setps = 1;		else			setps = 0;	}	ms.ms_hdr.sense_len = 0;	ms.ms_hdr.wp = 0;	ms.ms_page1.ps = 0;	ms.ms_page2.ps = 0;	ms.ms_page3.ps = 0;	ms.ms_page4.ps = 0;	ms.ms_page8.ps = 0;	ms.ms_page37.ps = 0;	ms.ms_setps = setps;	ms.ms_length = sizeof(ms) - 4;	fix_mode_select_params();	/* Adjust the length if no page 8 */	if(ms.ms_page8.pgcode != 8) {		ms.ms_length -= sizeof(ms.ms_page8);		byteptr = (u_char *)&ms.ms_page8;		ms_page37 = *((struct page_code_37 *)byteptr);	}	else		ms_page37 = ms.ms_page37;	/* Adjust the length if no DEC unique page 37 */	if(ms_page37.pgcode != 37)		ms.ms_length -= sizeof(ms_page37);	/* Adjust the length for the RZ22/RZ23 disks */	if(rz22_rz23_disk) {		ms.ms_length = ms.ms_length - sizeof(ms.ms_page2) -			       sizeof(ms.ms_page3) - sizeof(ms.ms_page4);		if(ms_page37.pgcode == 37) {			byteptr = (u_char *)&ms.ms_page2;			bcopy((char *)&ms_page37, byteptr, 						sizeof(ms_page37));		}	}	/* Adjust the length for the RRD40 disk */	if(rrd40_disk) {		ms.ms_length = ms.ms_length - sizeof(ms.ms_page2) -				sizeof(ms.ms_page3) - sizeof(ms.ms_page4);	}	/*	 * Change the disk drive parameters to their DEFAULT values.	 */	printf("\nChanging disk drive parameters for device (%s).\n",		rzdisk);	if(execute_rzcmd(SCSI_MODE_SELECT, (char *)&ms) != SUCCESS) {		if(geterror() != NO_ERROR)			return;	}	return;interactive:	/*	 * Inform the user what's going on.	 */	printf("\nCHANGING DISK DRIVE PARAMETERS INTERACTIVELY!!!\n");	printstr("\nARE YOU SURE (y/n)? ");	if(!confirm())		return;	/*	 * Get the CURRENT disk drive parameters.	 */	bzero((char *)&ms, sizeof(ms));	ms.ms_pgcode = 0x3f;	ms.ms_length = sizeof(ms) - 4;	ms.ms_pgctrl = CURRENT_VALUES;	if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&ms) != SUCCESS) {		if(geterror() != NO_ERROR)			return;	}	bzero((char *)&msc, sizeof(msc));	msc.ms_pgcode = 0x3f;	msc.ms_length = sizeof(ms) - 4;	msc.ms_pgctrl = CHANGED_VALUES;	if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&msc) != SUCCESS) {		if(geterror() != NO_ERROR)			return;	}	/* 	 * This section asks the user which parameters they want to	 * change. The utility displays one page at a time and asks	 * asks the user if they want to change any parameters in	 * that given page. This goes on until all pages have been 	 * displayed to the user.	 */	printf("\nBlock descriptor:\n");	printf("  Density code\t\t\t\t%d\n", ms.ms_desc.density_code);	printf("  Number of blocks\t\t\t%d\n", 			((ms.ms_desc.nblks2<<16) + 				(ms.ms_desc.nblks1<<8) + ms.ms_desc.nblks0));	printf("  Block length\t\t\t\t%d\n", 			((ms.ms_desc.blklen2<<16) + 				(ms.ms_desc.blklen1<<8) + ms.ms_desc.blklen0));	printstr("\nDo you want to change the block length (y/n)? ");	if(confirm()) {		printstr("Enter the new block length? ");		value = getinteger();		ms.ms_desc.blklen2 = ((value >> 16) & 0xff);		ms.ms_desc.blklen1 = ((value >> 8) & 0xff);		ms.ms_desc.blklen0 = ((value >> 0) & 0xff);	}page1_ask:	printf("\nPage 1 error recovery parameters:\n");	printf("  PS\t\t\t\t\t%d\n", ms.ms_page1.ps);	printf("  Page code\t\t\t\t%d\n", ms.ms_page1.pgcode);	printf("  Page length\t\t\t\t%d\n", ms.ms_page1.pglength);	printf("  Flags\t\t\t\t\t0x%02x\n", ms.ms_page1.flags);	printf("  Retry count\t\t\t\t%d\n", ms.ms_page1.retry_count);	printf("  Correction span\t\t\t%d\n", ms.ms_page1.correct_span);	printf("  Head offset count\t\t\t%d\n", ms.ms_page1.head_offset);	printf("  Data strobe offset count\t\t%d\n", ms.ms_page1.data_strobe);	printf("  Recovery time limit\t\t\t%d\n", ms.ms_page1.recovery_time);	printstr("\nDo you want to change any fields in this page (y/n)? ");	if(confirm()) {		if(msc.ms_page1.flags) {		    printstr("Enter the new flags in (HEX)? ");		    value = gethexnum();		    ms.ms_page1.flags = value;		}		if(msc.ms_page1.retry_count) {		    printstr("Enter the new retry count? ");		    value = getinteger();		    ms.ms_page1.retry_count = value;		}		if(msc.ms_page1.correct_span) {		    printstr("Enter the new correction span? ");		    value = getinteger();		    ms.ms_page1.correct_span = value;		}		if(msc.ms_page1.head_offset) {		    printstr("Enter the new head offset count? ");		    value = getinteger();		    ms.ms_page1.head_offset = value;		}		if(msc.ms_page1.data_strobe) {		    printstr("Enter the new data strobe offset count? ");		    value = getinteger();		    ms.ms_page1.data_strobe = value;		}		if(msc.ms_page1.recovery_time) {		    printstr("Enter the new recovery time limit? ");		    value = getinteger();		    ms.ms_page1.recovery_time = value;		}	}page2_ask:	if(rrd40_disk)		goto done_asking;	if(rz22_rz23_disk) {		byteptr = (u_char *)&ms.ms_page8;		ms_page37 = *((struct page_code_37 *)byteptr);		goto page37_ask;	}	printf("\nPage 2 disconnect/reconnect parameters:\n");	printf("  PS\t\t\t\t\t%d\n", ms.ms_page2.ps);	printf("  Page code\t\t\t\t%d\n", ms.ms_page2.pgcode);	printf("  Page length\t\t\t\t%d\n", ms.ms_page2.pglength);	printf("  Buffer full ratio\t\t\t%d\n", ms.ms_page2.bus_fratio);	printf("  Buffer empty ratio\t\t\t%d\n", ms.ms_page2.bus_eratio);	printf("  Bus inactivity limit\t\t\t%d\n", 			((ms.ms_page2.bus_inactive1<<8) +				ms.ms_page2.bus_inactive0));	printf("  Disconnect time limit\t\t\t%d\n",			((ms.ms_page2.disconn_time1<<8) +				ms.ms_page2.disconn_time0));	printf("  Connect time limit\t\t\t%d\n", 			((ms.ms_page2.conn_time1<<8) +				ms.ms_page2.conn_time0));	printstr("\nDo you want to change any fields in this page (y/n)? ");	if(confirm()) {		if(msc.ms_page2.bus_fratio) {		    printstr("Enter the new bus full ratio? ");		    value = getinteger();		    ms.ms_page2.bus_fratio = value;		}		if(msc.ms_page2.bus_eratio) {		    printstr("Enter the new bus empty ratio? ");		    value = getinteger();		    ms.ms_page2.bus_eratio = value;		}		if(msc.ms_page2.bus_inactive1 || msc.ms_page2.bus_inactive0) {		    printstr("Enter the new bus inactivity limit? ");		    value = getinteger();		    ms.ms_page2.bus_inactive1 = ((value >> 8) & 0xff);		    ms.ms_page2.bus_inactive0 = ((value >> 0) & 0xff);		}		if(msc.ms_page2.disconn_time1 || msc.ms_page2.disconn_time0) {		    printstr("Enter the new disconnect time limit? ");		    value = getinteger();		    ms.ms_page2.disconn_time1 = ((value >> 8) & 0xff);		    ms.ms_page2.disconn_time0 = ((value >> 0) & 0xff);		}		if(msc.ms_page2.conn_time1 || msc.ms_page2.conn_time0) {		    printstr("Enter the new connect time limit? ");		    value = getinteger();		    ms.ms_page2.conn_time1 = ((value >> 8) & 0xff);		    ms.ms_page2.conn_time0 = ((value >> 0) & 0xff);		}	}page3_ask:	printf("\nPage 3 direct-access device format parameters:\n");	printf("  PS\t\t\t\t\t%d\n", ms.ms_page3.ps);	printf("  Page code\t\t\t\t%d\n", ms.ms_page3.pgcode);	printf("  Page length\t\t\t\t%d\n", ms.ms_page3.pglength);	printf("  Tracks per zone\t\t\t%d\n", 			((ms.ms_page3.tpz1<<8) + ms.ms_page3.tpz0));	printf("  Alternate sectors per zone\t\t%d\n", 			((ms.ms_page3.aspz1<<8) + ms.ms_page3.aspz0));	printf("  Alternate tracks per zone\t\t%d\n", 			((ms.ms_page3.atpz1<<8) + ms.ms_page3.atpz0));	printf("  Alternate tracks per volume\t\t%d\n", 			((ms.ms_page3.atpv1<<8) + ms.ms_page3.atpv0));	printf("  Sectors per track\t\t\t%d\n", 			((ms.ms_page3.spt1<<8) + ms.ms_page3.spt0));	printf("  Data bytes per phy sector\t\t%d\n", 			((ms.ms_page3.bps1<<8) + ms.ms_page3.bps0));	printf("  Interleave\t\t\t\t%d\n", 			((ms.ms_page3.interleave1<<8) + 				ms.ms_page3.interleave0));	printf("  Track skew\t\t\t\t%d\n", 			((ms.ms_page3.track_skew1<<8) + 				ms.ms_page3.track_skew0));	printf("  Cylinder skew\t\t\t\t%d\n", 			((ms.ms_page3.cylinder_skew1<<8) + 				ms.ms_page3.cylinder_skew0));	printf("  Flags\t\t\t\t\t0x%02x\n", ms.ms_page1.flags);	printstr("\nDo you want to change any fields in this page (y/n)? ");	if(confirm()) {		if(msc.ms_page3.tpz1 || msc.ms_page3.tpz0) {		    printstr("Enter the new tracks per zone? ");		    value = getinteger();		    ms.ms_page3.tpz1 = ((value >> 8) & 0xff);		    ms.ms_page3.tpz0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.aspz1 || msc.ms_page3.aspz0) {		    printstr("Enter the new alternate sectors per zone? ");		    value = getinteger();		    ms.ms_page3.aspz1 = ((value >> 8) & 0xff);		    ms.ms_page3.aspz0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.atpz1 || msc.ms_page3.atpz0) {		    printstr("Enter the new alternate tracks per zone? ");		    value = getinteger();		    ms.ms_page3.atpz1 = ((value >> 8) & 0xff);		    ms.ms_page3.atpz0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.atpv1 || msc.ms_page3.atpv0) {		    printstr("Enter the new alternate tracks per volume? ");		    value = getinteger();		    ms.ms_page3.atpv1 = ((value >> 8) & 0xff);		    ms.ms_page3.atpv0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.spt1 || msc.ms_page3.spt0) {		    printstr("Enter the new sectors per track? ");		    value = getinteger();		    ms.ms_page3.spt1 = ((value >> 8) & 0xff);		    ms.ms_page3.spt0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.bps1 || msc.ms_page3.bps0) {		    printstr("Enter the new bytes per sector? ");		    value = getinteger();		    ms.ms_page3.bps1 = ((value >> 8) & 0xff);		    ms.ms_page3.bps0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.interleave1 || msc.ms_page3.interleave0) {		    printstr("Enter the new interleave factor? ");		    value = getinteger();		    ms.ms_page3.interleave1 = ((value >> 8) & 0xff);		    ms.ms_page3.interleave0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.track_skew1 || msc.ms_page3.track_skew0) {		    printstr("Enter the new track skew? ");		    value = getinteger();		    ms.ms_page3.track_skew1 = ((value >> 8) & 0xff);		    ms.ms_page3.track_skew0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.cylinder_skew1 || msc.ms_page3.cylinder_skew0) {		    printstr("Enter the new cylinder skew? ");		    value = getinteger();		    ms.ms_page3.cylinder_skew1 = ((value >> 8) & 0xff);		    ms.ms_page3.cylinder_skew0 = ((value >> 0) & 0xff);		}		if(msc.ms_page3.flags) {		    printstr("Enter the new flags in (HEX)? ");		    value = gethexnum();		    ms.ms_page3.flags = value;		}	}page4_ask:	printf("\nPage 4 rigid disk drive geometry parameters:\n");	printf("  PS\t\t\t\t\t%d\n", ms.ms_page4.ps);	printf("  Page code\t\t\t\t%d\n", ms.ms_page4.pgcode);	printf("  Page length\t\t\t\t%d\n", ms.ms_page4.pglength);	printf("  Maximum number of cylinders\t\t%d\n", 			((ms.ms_page4.ncyl2<<16) +				(ms.ms_page4.ncyl1<<8) +					ms.ms_page4.ncyl0));	printf("  Maximum number of heads\t\t%d\n", ms.ms_page4.nheads);	printf("  Write precompensation start\t\t%d\n", 			((ms.ms_page4.wprecomp2<<16) +				(ms.ms_page4.wprecomp1<<8) +					ms.ms_page4.wprecomp0));	printf("  Reduced write current start\t\t%d\n", 			((ms.ms_page4.rwc2<<16) +				(ms.ms_page4.rwc1<<8) +					ms.ms_page4.rwc0));	printf("  Drive step rate\t\t\t%d\n", 			((ms.ms_page4.dsr1<<8) + ms.ms_page4.dsr0));	printf("  Landing zone cylinder\t\t\t%d\n", 			((ms.ms_page4.lzc2<<16) +				(ms.ms_page4.lzc1<<8) +					ms.ms_page4.lzc0));	printstr("\nDo you want to change any fields in this page (y/n)? ");	if(confirm()) {		if(msc.ms_page4.ncyl2 || 			msc.ms_page4.ncyl1 || msc.ms_page4.ncyl0) {		    printstr("Enter the number of cylinders? ");		    value = getinteger();		    ms.ms_page4.ncyl2 = ((value >> 16) & 0xff);		    ms.ms_page4.ncyl1 = ((value >> 8) & 0xff);		    ms.ms_page4.ncyl0 = ((value >> 0) & 0xff);		}		if(msc.ms_page4.nheads) {		    printstr("Enter the number of heads? ");		    value = getinteger();		    ms.ms_page4.nheads = value;		}		if(msc.ms_page4.wprecomp2 || 			msc.ms_page4.wprecomp1 || msc.ms_page4.wprecomp0) {		    printstr("Enter the write precompensation start? ");		    value = getinteger();		    ms.ms_page4.wprecomp2 = ((value >> 16) & 0xff);		    ms.ms_page4.wprecomp1 = ((value >> 8) & 0xff);		    ms.ms_page4.wprecomp0 = ((value >> 0) & 0xff);		}		if(msc.ms_page4.rwc2 || 			msc.ms_page4.rwc1 || msc.ms_page4.rwc0) {		    printstr("Enter the reduced write current start? ");		    value = getinteger();		    ms.ms_page4.rwc2 = ((value >> 16) & 0xff);		    ms.ms_page4.rwc1 = ((value >> 8) & 0xff);		    ms.ms_page4.rwc0 = ((value >> 0) & 0xff);		}		if(msc.ms_page4.dsr1 || msc.ms_page4.dsr0) {		    printstr("Enter the drive step rate? ");		    value = getinteger();		    ms.ms_page4.dsr1 = ((value >> 8) & 0xff);		    ms.ms_page4.dsr0 = ((value >> 0) & 0xff);		}		if(msc.ms_page4.lzc1 || msc.ms_page4.lzc0) {		    printstr("Enter the landing zone cylinder? ");		    value = getinteger();		    ms.ms_page4.lzc1 = ((value >> 8) & 0xff);		    ms.ms_page4.lzc0 = ((value >> 0) & 0xff);		}	}page8_ask:	if(ms.ms_page8.pgcode != 8) {		byteptr = (u_char *)&ms.ms_page8;		ms_page37 = *((struct page_code_37 *)byteptr);		goto page37_ask;	}	else		ms_page37 = ms.ms_page37;    	printf("\nPage 8 caching parameters:\n");    	printf("  PS\t\t\t\t\t%d\n", ms.ms_page8.ps);    	printf("  Page code\t\t\t\t%d\n", ms.ms_page8.pgcode);    	printf("  Page length\t\t\t\t%d\n", ms.ms_page8.pglength);	printf("  Read cache disable bit\t\t0x%x\n",				ms.ms_page8.rc);	printf("  Multiple selection bit\t\t0x%x\n",				ms.ms_page8.ms);	printf("  Write cache enable bit\t\t0x%x\n",				ms.ms_page8.wce);	printf("  Write retention priority\t\t%d\n",				ms.ms_page8.wrp);	printf("  Demand read retention priority\t%d\n",				ms.ms_page8.drrp);	printf("  Disable prefetch transfer length\t%d\n",			((ms.ms_page8.dpftl1<<8) + ms.ms_page8.dpftl0));	printf("  Minimum prefetch\t\t\t%d\n",			((ms.ms_page8.minpf1<<8) + ms.ms_page8.minpf0));	printf("  Maximum prefetch\t\t\t%d\n",			((ms.ms_page8.maxpf1<<8) + ms.ms_page8.maxpf0));	printf("  Maximum prefetch ceiling\t\t%d\n",			((ms.ms_page8.maxpfc1<<8) + ms.ms_page8.maxpfc0));	printstr("\nDo you want to change any fields in this page (y/n)? ");	if(confirm()) {		if(msc.ms_page8.rc) {		    printstr("Set read cache disable (RC) bit (y/n)? ");		    if(confirm())			ms.ms_page8.rc = 1;		    else			ms.ms_page8.rc = 0;		}		if(msc.ms_page8.ms) {		    printstr("Set mutiple selection (MS) bit (y/n)? ");		    if(confirm())			ms.ms_page8.ms = 1;		    else			ms.ms_page8.ms = 0;		}		if(msc.ms_page8.wce) {

⌨️ 快捷键说明

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