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

📄 rzdisk.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
📖 第 1 页 / 共 5 页
字号:
		    printstr("Set write cache enable (WCE) bit (y/n)? ");		    if(confirm())			ms.ms_page8.wce = 1;		    else			ms.ms_page8.wce = 0;		}		if(msc.ms_page8.wrp) {		    printstr("Enter the write retention priority? ");		    value = getinteger();		    ms.ms_page8.wrp = value;		}		if(msc.ms_page8.drrp) {		    printstr("Enter the demand read retention priority? ");		    value = getinteger();		    ms.ms_page8.drrp = value;		}		if(msc.ms_page8.dpftl1 || msc.ms_page8.dpftl0) {		    printstr("Enter disable pre-fetch transfer length? ");		    value = getinteger();		    ms.ms_page8.dpftl1 = ((value >> 8) & 0xff);		    ms.ms_page8.dpftl0 = ((value >> 0) & 0xff);		}		if(msc.ms_page8.minpf1 || msc.ms_page8.minpf0) {		    printstr("Enter minimum pre-fetch value? ");		    value = getinteger();		    ms.ms_page8.minpf1 = ((value >> 8) & 0xff);		    ms.ms_page8.minpf0 = ((value >> 0) & 0xff);		}		if(msc.ms_page8.maxpf1 || msc.ms_page8.maxpf0) {		    printstr("Enter maximum pre-fetch value? ");		    value = getinteger();		    ms.ms_page8.maxpf1 = ((value >> 8) & 0xff);		    ms.ms_page8.maxpf0 = ((value >> 0) & 0xff);		}		if(msc.ms_page8.maxpfc1 || msc.ms_page8.maxpfc0) {		    printstr("Enter maximum pre-fetch ceiling value? ");		    value = getinteger();		    ms.ms_page8.maxpfc1 = ((value >> 8) & 0xff);		    ms.ms_page8.maxpfc0 = ((value >> 0) & 0xff);		}	}page37_ask:	if(ms_page37.pgcode != 37)		goto done_asking;	printf("\nPage 37 DEC unique parameters:\n");	printf("  PS\t\t\t\t\t%d\n", ms_page37.ps);	printf("  Page code\t\t\t\t%d\n", ms_page37.pgcode);	printf("  Page length\t\t\t\t%d\n", ms_page37.pglength);	printf("  Spinup on power up\t\t\t%d\n", ms_page37.spinup);	printstr("\nDo you want to change any fields in this page (y/n)? ");	if(confirm()) {		printstr("Have drive spinup on power on (y/n)? ");		if(confirm())		   	ms_page37.spinup = 0;		else		   	ms_page37.spinup = 1;	}done_asking:	/*	 * 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 CHANGED 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_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;		bcopy((u_char *)&ms_page37, byteptr, sizeof(ms_page37));	}	else {		ms.ms_page37 = 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 CHANGED 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;	}}fix_mode_select_params(){	ms.ms_desc.density_code &= msc.ms_desc.density_code;	ms.ms_desc.nblks2 &= msc.ms_desc.nblks2;	ms.ms_desc.nblks1 &= msc.ms_desc.nblks1;	ms.ms_desc.nblks0 &= msc.ms_desc.nblks0;	ms.ms_page1.flags &= msc.ms_page1.flags;	ms.ms_page1.retry_count &= msc.ms_page1.retry_count;	ms.ms_page1.correct_span &= msc.ms_page1.correct_span;	ms.ms_page1.head_offset &= msc.ms_page1.head_offset;	ms.ms_page1.data_strobe &= msc.ms_page1.data_strobe;	ms.ms_page1.recovery_time &= msc.ms_page1.recovery_time;	ms.ms_page2.bus_fratio &= msc.ms_page2.bus_fratio;	ms.ms_page2.bus_eratio &= msc.ms_page2.bus_eratio;	ms.ms_page2.bus_inactive1 &= msc.ms_page2.bus_inactive1;	ms.ms_page2.bus_inactive0 &= msc.ms_page2.bus_inactive0;	ms.ms_page2.disconn_time1 &= msc.ms_page2.disconn_time1;	ms.ms_page2.disconn_time0 &= msc.ms_page2.disconn_time0;	ms.ms_page2.conn_time1 &= msc.ms_page2.conn_time1;	ms.ms_page2.conn_time0 &= msc.ms_page2.conn_time0;	ms.ms_page3.tpz1 &= msc.ms_page3.tpz1;	ms.ms_page3.tpz0 &= msc.ms_page3.tpz0;	ms.ms_page3.aspz1 &= msc.ms_page3.aspz1;	ms.ms_page3.aspz0 &= msc.ms_page3.aspz0;	ms.ms_page3.atpz1 &= msc.ms_page3.atpz1;	ms.ms_page3.atpz0 &= msc.ms_page3.atpz0;	ms.ms_page3.atpv1 &= msc.ms_page3.atpv1;	ms.ms_page3.atpv0 &= msc.ms_page3.atpv0;	ms.ms_page3.spt1 &= msc.ms_page3.spt1;	ms.ms_page3.spt0 &= msc.ms_page3.spt0;	ms.ms_page3.bps1 &= msc.ms_page3.bps1;	ms.ms_page3.bps0 &= msc.ms_page3.bps0;	ms.ms_page3.interleave1 &= msc.ms_page3.interleave1;	ms.ms_page3.interleave0 &= msc.ms_page3.interleave0;	ms.ms_page3.track_skew1 &= msc.ms_page3.track_skew1;	ms.ms_page3.track_skew0 &= msc.ms_page3.track_skew0;	ms.ms_page3.cylinder_skew1 &= msc.ms_page3.cylinder_skew1;	ms.ms_page3.cylinder_skew0 &= msc.ms_page3.cylinder_skew0;	ms.ms_page3.flags &= msc.ms_page3.flags;	ms.ms_page4.ncyl2 &= msc.ms_page4.ncyl2;	ms.ms_page4.ncyl1 &= msc.ms_page4.ncyl1;	ms.ms_page4.ncyl0 &= msc.ms_page4.ncyl0;	ms.ms_page4.nheads &= msc.ms_page4.nheads;	ms.ms_page4.wprecomp2 &= msc.ms_page4.wprecomp2;	ms.ms_page4.wprecomp1 &= msc.ms_page4.wprecomp1;	ms.ms_page4.wprecomp0 &= msc.ms_page4.wprecomp0;	ms.ms_page4.rwc2 &= msc.ms_page4.rwc2;	ms.ms_page4.rwc1 &= msc.ms_page4.rwc1;	ms.ms_page4.rwc0 &= msc.ms_page4.rwc0;	ms.ms_page4.dsr1 &= msc.ms_page4.dsr1;	ms.ms_page4.dsr0 &= msc.ms_page4.dsr0;	ms.ms_page4.lzc1 &= msc.ms_page4.lzc1;	ms.ms_page4.lzc0 &= msc.ms_page4.lzc0;	ms.ms_page8.rc &= msc.ms_page8.rc;	ms.ms_page8.ms &= msc.ms_page8.ms;	ms.ms_page8.wce &= msc.ms_page8.wce;	ms.ms_page8.wrp &= msc.ms_page8.wrp;	ms.ms_page8.drrp &= msc.ms_page8.drrp;	ms.ms_page8.dpftl1 &= msc.ms_page8.dpftl1;	ms.ms_page8.dpftl0 &= msc.ms_page8.dpftl0;	ms.ms_page8.minpf1 &= msc.ms_page8.minpf1;	ms.ms_page8.minpf0 &= msc.ms_page8.minpf0;	ms.ms_page8.maxpf1 &= msc.ms_page8.maxpf1;	ms.ms_page8.maxpf0 &= msc.ms_page8.maxpf0;	ms.ms_page8.maxpfc1 &= msc.ms_page8.maxpfc1;	ms.ms_page8.maxpfc0 &= msc.ms_page8.maxpfc0;}get_inquiry_info(){        char hold[20];    int i;	printf("\nGetting inquiry data info from device (%s).\n", rzdisk);	bzero((char *)&inq, sizeof(inq));	if(execute_rzcmd(SCSI_GET_INQUIRY_DATA, (char *)&inq) != SUCCESS) {		if(geterror() != NO_ERROR)			return;	}    	printf("\nDump of Inquiry Data:\n");    	printf("  Peripheral Device Type\t\t0x%x\n",inq.perfdt);    	printf("  Device Type Qualifier\t\t\t0x%x\n",inq.devtq);    	printf("  Removable Medium\t\t\t0x%x\n",inq.rmb);    	printf("  Version\t\t\t\t0x%x\n",inq.version);    	for(i=0; i<8; i++)		hold[i] = inq.vndrid[i];    	hold[i] = '\0';    	printf("  Vendor Identificaton\t\t\t%s\n", hold);    	for(i=0; i<16; i++)		hold[i] = inq.prodid[i];    	hold[i] = '\0';    	printf("  Product Identification\t\t%s\n", hold);    	for(i=0; i<4; i++)		hold[i] = inq.revlvl[i];    	hold[i] = '\0';    	printf("  Revision Level\t\t\t%s\n", hold);}get_drive_parameters(page_control){	char strtype[20];	struct page_code_1 ms_page1;	struct page_code_2 ms_page2;	struct page_code_3 ms_page3;	struct page_code_4 ms_page4;	struct page_code_8 ms_page8;	struct page_code_37 ms_page37;	u_char *byteptr;	int i;	bzero((char *)&ms, sizeof(ms));	ms.ms_pgcode = 0x3f;	ms.ms_length = sizeof(ms) - 4;	ms.ms_pgctrl = page_control;	/*	 * Get the CURRENT, DEFAULT, SAVED, or CHANGEABLE disk drive	 * parameters based on the page control value.	 */	if(page_control == CURRENT_VALUES)	    strcpy(strtype,"CURRENT");	else if(page_control == DEFAULT_VALUES)	    strcpy(strtype,"DEFAULT");	else if(page_control == SAVED_VALUES)	    strcpy(strtype,"SAVED");	else if(page_control == CHANGED_VALUES)	    strcpy(strtype,"CHANGEABLE");	printf("\nGetting %s disk drive parameters from device (%s).\n",			strtype,rzdisk);	if(execute_rzcmd(SCSI_MODE_SENSE, (char *)&ms) != SUCCESS) {		if(geterror() != NO_ERROR)			return;	}	/*	 * Display the parameters to the user. All parameters are	 * displayed in (Decimal), all flags in (Hex). If the page	 * code is CHANGEABLE then all fields are displayed in (Hex)	 * to show the bit pattern of all the bits that can be changed.	 */	printf("\nMode sense header:\n");	printf("  Sense data length\t\t\t%d\n", ms.ms_hdr.sense_len);	printf("  Medium type\t\t\t\t%d\n", ms.ms_hdr.medium_type);	printf("  WP\t\t\t\t\t0x%02x\n", ms.ms_hdr.wp);	printf("  Block descriptor length\t\t%d\n", ms.ms_hdr.blk_des_len);	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));	if(page_control == CHANGED_VALUES && ms.ms_desc.blklen2 == 0xff &&		ms.ms_desc.blklen1 == 0xff && ms.ms_desc.blklen0 == 0xff) {		printf("  Block length\t\t\t\t0x%x\n", 			((ms.ms_desc.blklen2<<16) + 				(ms.ms_desc.blklen1<<8) + ms.ms_desc.blklen0));	}	else {		printf("  Block length\t\t\t\t%d\n", 			((ms.ms_desc.blklen2<<16) + 				(ms.ms_desc.blklen1<<8) + ms.ms_desc.blklen0));	}page1_display:	byteptr = (u_char *)&ms.ms_page1;	ms_page1 = *((struct page_code_1 *)byteptr);	if(ms_page1.pgcode == 1) {		if(ms_page1.pglength == 0) {			byteptr += 2;			goto page2_display;		}		if(!moreoutput())			return;	    	printf("\nPage 1 error recovery parameters:\n");	    	printf("  PS\t\t\t\t\t%d\n", ms_page1.ps);	    	printf("  Page code\t\t\t\t%d\n", ms_page1.pgcode);	    	printf("  Page length\t\t\t\t%d\n", ms_page1.pglength);		if(page_control == CHANGED_VALUES) {	    		printf("  Flags\t\t\t\t\t0x%x\n", ms_page1.flags);	    		printf("  Retry count\t\t\t\t0x%x\n", 					ms_page1.retry_count);	    		printf("  Correction span\t\t\t0x%x\n", 					ms_page1.correct_span);	    		printf("  Head offset count\t\t\t0x%x\n", 					ms_page1.head_offset);	    		printf("  Data strobe offset count\t\t0x%x\n", 					ms_page1.data_strobe);	    		printf("  Recovery time limit\t\t\t0x%x\n", 					ms_page1.recovery_time);		}		else {	    		printf("  Flags\t\t\t\t\t0x%02x\n", ms_page1.flags);	    		printf("  Retry count\t\t\t\t%d\n", 					ms_page1.retry_count);	    		printf("  Correction span\t\t\t%d\n", 					ms_page1.correct_span);	    		printf("  Head offset count\t\t\t%d\n", 					ms_page1.head_offset);	    		printf("  Data strobe offset count\t\t%d\n", 					ms_page1.data_strobe);	    		printf("  Recovery time limit\t\t\t%d\n", 					ms_page1.recovery_time);		}		byteptr += sizeof(ms_page1);	}	page2_display:	ms_page2 = *((struct page_code_2 *)byteptr);	if(ms_page2.pgcode == 2) {		if(ms_page2.pglength == 0) {			byteptr += 2;			goto page3_display;		}		if(!moreoutput())			return;		printf("\nPage 2 disconnect/reconnect parameters:\n");		printf("  PS\t\t\t\t\t%d\n", ms_page2.ps);		printf("  Page code\t\t\t\t%d\n", ms_page2.pgcode);		printf("  Page length\t\t\t\t%d\n", ms_page2.pglength);		if(page_control == CHANGED_VALUES) {			printf("  Buffer full ratio\t\t\t0x%x\n", 				ms_page2.bus_fratio);			printf("  Buffer empty ratio\t\t\t0x%x\n", 				ms_page2.bus_eratio);			printf("  Bus inactivity limit\t\t\t0x%x\n", 				((ms_page2.bus_inactive1<<8) +					ms_page2.bus_inactive0));			printf("  Disconnect time limit\t\t\t0x%x\n",				((ms_page2.disconn_time1<<8) +					ms_page2.disconn_time0));			printf("  Connect time limit\t\t\t0x%x\n", 				((ms_page2.conn_time1<<8) +					ms_page2.conn_time0));		}		else {			printf("  Buffer full ratio\t\t\t%d\n", 				ms_page2.bus_fratio);			printf("  Buffer empty ratio\t\t\t%d\n", 				ms_page2.bus_eratio);			printf("  Bus inactivity limit\t\t\t%d\n", 				((ms_page2.bus_inactive1<<8) +					ms_page2.bus_inactive0));			printf("  Disconnect time limit\t\t\t%d\n",				((ms_page2.disconn_time1<<8) +					ms_page2.disconn_time0));			printf("  Connect time limit\t\t\t%d\n", 				((ms_page2.conn_time1<<8) +					ms_page2.conn_time0));		}		byteptr += sizeof(ms_page2);	}	page3_display:	ms_page3 = *((struct page_code_3 *)byteptr);	if(ms_page3.pgcode == 3) {		if(ms_page3.pglength == 0) {			byteptr += 2;			goto page4_display;		}		if(!moreoutput())			return;		printf("\nPage 3 direct-access device format parameters:\n");		printf("  PS\t\t\t\t\t%d\n", ms_page3.ps);		printf("  Page code\t\t\t\t%d\n", ms_page3.pgcode);		printf("  Page length\t\t\t\t%d\n", ms_page3.pglength);		if(page_control == CHANGED_VALUES) {			printf("  Tracks per zone\t\t\t0x%x\n", 				((ms_page3.tpz1<<8) + ms_page3.tpz0));			printf("  Alternate sectors per zone\t\t0x%x\n", 				((ms_page3.aspz1<<8) + ms_page3.aspz0));			printf("  Alternate tracks per zone\t\t0x%x\n", 				((ms_page3.atpz1<<8) + ms_page3.atpz0));			printf("  Alternate tracks per volume\t\t0x%x\n", 				((ms_page3.atpv1<<8) + ms_page3.atpv0));			printf("  Sectors per track\t\t\t0x%x\n", 				((ms_page3.spt1<<8) + ms_page3.spt0));			printf("  Data bytes per phy sector\t\t0x%x\n", 				((ms_page3.bps1<<8) + ms_page3.bps0));			printf("  Interleave\t\t\t\t0x%x\n", 				((ms_page3.interleave1<<8) + 					ms_page3.interleave0));			printf("  Track skew\t\t\t\t0x%x\n", 				((ms_page3.track_skew1<<8) + 					ms_page3.track_skew0));			printf("  Cylinder skew\t\t\t\t0x%x\n", 				((ms_page3.cylinder_skew1<<8) + 					ms_page3.cylinder_skew0));			printf("  Flags\t\t\t\t\t0x%x\n", ms_page3.flags);		}		else {			printf("  Tracks per zone\t\t\t%d\n", 				((ms_page3.tpz1<<8) + ms_page3.tpz0));			printf("  Alternate sectors per zone\t\t%d\n", 				((ms_page3.aspz1<<8) + ms_page3.aspz0));			printf("  Alternate tracks per zone\t\t%d\n", 				((ms_page3.atpz1<<8) + ms_page3.atpz0));			printf("  Alternate tracks per volume\t\t%d\n", 				((ms_page3.atpv1<<8) + ms_page3.atpv0));			printf("  Sectors per track\t\t\t%d\n", 				((ms_page3.spt1<<8) + ms_page3.spt0));			printf("  Data bytes per phy sector\t\t%d\n", 				((ms_page3.bps1<<8) + ms_page3.bps0));			printf("  Interleave\t\t\t\t%d\n", 				((ms_page3.interleave1<<8) + 					ms_page3.interleave0));			printf("  Track skew\t\t\t\t%d\n", 				((ms_page3.track_skew1<<8) + 					ms_page3.track_skew0));			printf("  Cylinder skew\t\t\t\t%d\n", 				((ms_page3.cylinder_skew1<<8) + 					ms_page3.cylinder_skew0));			printf("  Flags\t\t\t\t\t0x%02x\n", ms_page3.flags);		}		byteptr += sizeof(ms_page3);	}	page4_display:

⌨️ 快捷键说明

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