📄 rzdisk.c
字号:
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; } } 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; if(rz22_rz23_disk) goto dec_unique_page; if(rrd40_disk) goto dec_unique_page; 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); } } 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; 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; } } 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; 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); } } 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;dec_unique_page: if(ms.ms_page37.pgcode != 37) goto skip_dec_page; printf("\nPage 37 DEC unique parameters:\n"); printf(" PS\t\t\t\t\t%d\n", ms.ms_page37.ps); printf(" Page code\t\t\t\t%d\n", ms.ms_page37.pgcode); printf(" Page length\t\t\t\t%d\n", ms.ms_page37.pglength); printf(" Spinup on power up\t\t\t%d\n", ms.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.ms_page37.spinup = 0; else ms.ms_page37.spinup = 1; }skip_dec_page: if(rrd40_disk) setps = 0; 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_page37.ps = 0; ms.ms_setps = setps; if(ms.ms_page37.pgcode == 37) ms.ms_length = sizeof(ms) - 4; else ms.ms_length = sizeof(ms) - sizeof(ms.ms_page37) - 4; /* 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.ms_page37.pgcode == 37) { ptr = (char *)&ms.ms_page2; bcopy((char *)&ms.ms_page37, ptr, sizeof(ms.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); ptr = (char *)&ms.ms_page2; bcopy((char *)&ms.ms_page3, ptr, sizeof(ms.ms_page3)); } printf("\nChanging disk drive parameters for device (%s).\n", rzdisk); if(execute_rzcmd(SCSI_MODE_SELECT, (char *)&ms) != SUCCESS) { geterror(); return; }}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) { geterror(); 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_37 ms_page37; u_char *byteptr; bzero((char *)&ms, sizeof(ms)); ms.ms_pgcode = 0x3f; ms.ms_length = sizeof(ms) - 4; ms.ms_pgctrl = page_control; 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) { geterror(); return; } 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)); } byteptr = (u_char *)&ms.ms_page1; ms_page1 = *((struct page_code_1 *)byteptr); if(ms_page1.pgcode == 1) { 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",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -