📄 scsi.c
字号:
{ SZ_ASC_RERROR, "SZ_ASC_RERROR" },#endif vax { NULL, NULL }};struct scsi_dcode scsi_device_class[] = { { SZ_TAPE, "TAPE device" }, { SZ_DISK, "DISK device" }, { SZ_CDROM, "CDROM device" }, { SZ_UNKNOWN, "UNKNOWN/UNSUPPORTED device" }, { TZ30, "TZ30 cartridge tape" }, { TZK50, "TZK50 cartridge tape" }, { TZxx, "TZxx non-DEC tape (may[not] work)" }, { TZ05, "CSS TZ05 tape" }, { TZ07, "CSS TZ07 tape" }, { TZ9TRK, "Generic non-DEC 9trk tape" }, { TLZ04, "TLZ04 (RDAT) tape" }, { TZRDAT, "Generic RDAT tape" }, { TZK10, "TZK10 (QIC) tape" }, { TZQIC, "Generic non-DEC QIC tape" }, { TZK08, "Exabyte TZK08 8mm tape" }, { TZ8MM, "Generic non-DEC 8mm tape" }, { RZ22, "RZ22 40 MB winchester disk" }, { RZ23, "RZ23 100 MB winchester disk" }, { RZ55, "RZ55 300+ MB winchester disk" },#ifdef vax { RZ56, "RZ56 600+ MB winchester disk" },#endif vax { RX23, "RX23 3.5 1.4MB SCSI floppy disk" }, { RX33, "RX33 5.25 1.2MB SCSI floppy disk" }, { RZxx, "RZxx non-DEC disk (may[not] work)" }, { RZ24, "RZ24 winchester disk" }, { RZ57, "RZ57 winchester disk" }, { RZ23L, "RZ23L 116Mb winchester disk" }, { RX26, "RX26 3.5 2.8MB SCSI floppy disk" }, { RZ25, "RZ25 winchester disk" }, { RRD40, "RRD40 CDROM (optical disk)" },#ifdef vax { CDxx, "CDxx non-DEC CDROM (may[not] work)" },#endif vax { RRD42, "RRD42 CDROM (optical disk)" }, { NULL, NULL }};char *token();c_scsibus(c) char *c;{ char *arg; int index; unsigned int addr; arg = token(); if (scsi_read_softc() < 0) return; /* * If arg is NULL, print everything. */ if (arg == NULL) { printscsi(do_scsiprint_cntlr); return; } if ((strncmp(arg, "-ta", 3) == 0) || (strncmp(arg, "ta", 2) == 0)) { printscsi(do_scsiprint_targ); return; } if ((strncmp(arg, "-de", 3) == 0) || (strncmp(arg, "de", 2) == 0)) { printscsi(do_scsiprint_devtab); return; } if ((strncmp(arg, "-tr", 3) == 0) || (strncmp(arg, "tr", 2) == 0)) { printscsi(do_scsiprint_trans); return; } if ((strncmp(arg, "-cm", 3) == 0) || (strncmp(arg, "cm", 2) == 0)) { printscsi(do_scsiprint_cmd); return; } if ((strncmp(arg, "-bb", 3) == 0) || (strncmp(arg, "bb", 2) == 0)) { printscsi(do_scsiprint_bbr); return; } if ((strncmp(arg, "-er", 3) == 0) || (strncmp(arg, "er", 2) == 0)) { printscsi(do_scsiprint_err); return; } if ((strncmp(arg, "-si", 3) == 0) || (strncmp(arg, "si", 2) == 0)) { printscsi(do_scsiprint_sii); return; } if ((strncmp(arg, "-dc", 3) == 0) || (strncmp(arg, "dc", 2) == 0)) { printscsi(do_scsiprint_dctstats); return; } if ((strncmp(arg, "-sp", 3) == 0) || (strncmp(arg, "sp", 2) == 0)) { printscsi(do_scsiprint_spinstats); return; } if ((strncmp(arg, "-a", 2) == 0) || (strncmp(arg, "a", 1) == 0)) { printscsi(do_scsiprint_cntlr); printscsi(do_scsiprint_targ); printscsi(do_scsiprint_devtab); printscsi(do_scsiprint_trans); printscsi(do_scsiprint_cmd); printscsi(do_scsiprint_bbr); printscsi(do_scsiprint_err); printscsi(do_scsiprint_sii); printscsi(do_scsiprint_dctstats); printscsi(do_scsiprint_spinstats); return; } printf("SCSI help, try:\n"); printf("\t-target\t"); printf("\t-devtab\t"); printf("\t-transfer\n"); printf("\t-cmd\t"); printf("\t-bbr\t"); printf("\t-error\n"); printf("\t-sii\t"); printf("\t-dctstats\t"); printf("-spinstats\n"); printf("\t-all\n"); }int nNSCSIBUS;struct sz_softc *sz_softc;/* * scsi_read_softc will read in the sz_softc structure for all * the scsi controllers. */intscsi_read_softc(){ static int already_called = 0; int s_value; if (already_called) return(0); if (Nscsibus.s_value == 0) { printf("\tNULL nNSCSIBUS value\n"); return(-1); } if (readmem((char *) &nNSCSIBUS, Nscsibus.s_value, sizeof(int)) != sizeof(int)) { printf("Could not read nNSCSIBUS at 0x%x.\n",Nscsibus.s_value); return(-1); } if (Sz_softc.s_value == 0) { printf("\tNULL sz_softc pointer\n"); return(-1); } s_value = Sz_softc.s_value; sz_softc = (struct sz_softc *) malloc(sizeof(struct sz_softc)*nNSCSIBUS); if (readmem(sz_softc, s_value, sizeof(struct sz_softc) * nNSCSIBUS) != sizeof(struct sz_softc) * nNSCSIBUS) { printf("Could not read sz_softc at 0x%x.\n",s_value); return(-1); } already_called = 1; return(0);}/* * Call the passed function for each controller that exists */printscsi(fn)void (*fn)();{ int cntlr; for (cntlr=0; cntlr < nNSCSIBUS; cntlr++) fn(cntlr);}/* * Print SCSI controller related information. */void do_scsiprint_cntlr(cntrl)int cntrl;{ struct sz_softc *sc = &sz_softc[cntrl]; printf("\nSCSI controller information:\n"); printf("SCSI controller #%d:\n",cntrl); printf("\tsc_sysid:\t0x%x\n",sc->sc_sysid); printf("\tsc_cntlr_alive:\t%d\n",sc->sc_cntlr_alive); printf("\tsc_aipfts:\t%d\n",sc->sc_aipfts); printf("\tsc_lostarg:\t%d\n",sc->sc_lostarb); printf("\tsc_lastid:\t%d\n",sc->sc_lastid); printf("\tsc_sc_active:\t%d\n",sc->sc_active); printf("\tsc_prevpha:\t%s\n", scsi_decode((long)sc->sc_prevpha, scsi_phase_states, EQUAL_MATCH)); printf("\tsc_fstate:\t%s\n", scsi_decode((long)sc->sc_fstate, scsi_phase_states, EQUAL_MATCH)); printf("\tport_start:\t"); praddr(sc->port_start); printf("\n"); printf("\tport_reset:\t"); praddr(sc->port_reset); printf("\n");#ifdef vax printf("\tsc_swcount:\t%d\n",sc->sc_swcount); printf("\tsc_rip:\t\t%d\n",sc->sc_rip); printf("\tsc_scs_selena:\t0x%x\n",sc->sc_scs_selena);#endif vax printf("\tsc_progress:\t0x%x\n",sc->sc_progress);}/* * Print SCSI target related information */voiddo_scsiprint_targ(cntrl)int cntrl;{ struct sz_softc *sc = &sz_softc[cntrl]; char temp[132]; int i; for (i=0; i < NDPS; i++) { if (sc->sc_devtyp[i] == 0) continue; printf("\nSCSI target informaiton:\n"); printf("Controller #%d Targid #%d:\n", cntrl, i); printf("\tsc_alive:\t%d\n",sc->sc_alive[i]); printf("\tdevice_comp:\t"); praddr(sc->device_comp[i]); printf("\n"); printf("\tsc_flags:\t%s\n", scsi_decode(sc->sc_flags[i], scsi_stat_devio, OR_MATCH)); printf("\tsc_cat_flags:\t%s\n", scsi_decode(sc->sc_category_flags[i], scsi_category_stat_devio, OR_MATCH)); printf("\tsc_devtype:\t%s\n", scsi_decode((long)sc->sc_devtyp[i], scsi_device_class, OR_MATCH)); printf("\tsc_unit:\t%d\n", sc->sc_unit[i]); bzero(temp, sizeof(temp)); strncpy(temp, sc->sc_device[i], DEV_SIZE); printf("\tsc_device:\t%s\n", temp); printf("\tsc_szflags:\t%s\n", scsi_decode(sc->sc_szflags[i], scsi_sc_szflags, OR_MATCH)); printf("\tsc_curcmd:\t%s\n", scsi_decode((long)sc->sc_curcmd[i], scsi_command_opcodes, EQUAL_MATCH)); printf("\tsc_actcmd:\t%s\n", scsi_decode((long)sc->sc_actcmd[i], scsi_command_opcodes, EQUAL_MATCH)); printf("\tsc_selstat:\t%s\n", scsi_decode((long)sc->sc_selstat[i], scsi_sc_selstat, EQUAL_MATCH)); printf("\tsc_xstate:\t%s\n", scsi_decode((long)sc->sc_xstate[i], scsi_statpos_states, EQUAL_MATCH)); printf("\tsc_xevent:\t%s\n", scsi_decode((long)sc->sc_xevent[i], scsi_statpos_states, EQUAL_MATCH)); printf("\tsc_pxstate:\t%s\n", scsi_decode((long)sc->sc_pxstate[i], scsi_statpos_states, EQUAL_MATCH)); printf("\tsc_c_status:\t%s\n", scsi_decode((long)sc->sc_c_status[i], scsi_status_byte, EQUAL_MATCH)); printf("\tsc_c_snskey:\t%s\n", scsi_decode((long)sc->sc_c_snskey[i], scsi_request_sense_key, EQUAL_MATCH)); printf("\tsc_status:\t%s\n", scsi_decode((long)sc->sc_status[i], scsi_status_byte, EQUAL_MATCH)); printf("\tsc_message:\t%s\n", scsi_decode((long)sc->sc_message[i], scsi_mesg_protocols, EQUAL_MATCH)); bzero(temp, sizeof(temp)); strncpy(temp, sc->sc_devnam[i], SZ_DNSIZE); printf("\tsc_devnam:\t%s\n", temp); bzero(temp, sizeof(temp)); strncpy(temp, sc->sc_revlvl[i], SZ_REV_LEN); printf("\tsc_revlvl:\t%s\n", temp); }}/* * Print SCSI devtab information */voiddo_scsiprint_devtab(cntlr)int cntlr;{ struct sz_softc *sc = &sz_softc[cntlr]; struct scsi_devtab devtab; char name[132]; int i; for (i=0; i < NDPS; i++) { if (sc->sc_devtyp[i] == 0) continue; bzero(name, sizeof(name)); bzero(&devtab, sizeof(devtab)); printf("\nSCSI device tab information:\n"); printf("Controller #%d Targid #%d:\n", cntlr, i); if (readmem((char *)&devtab, (int) sc->sc_devtab[i], sizeof(devtab)) != sizeof(devtab)) { printf("Unable to read in the devtab.\n"); continue; } if (readmem(name, (int) devtab.name, devtab.namelen) != devtab.namelen)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -