Annotation of researchv10dc/cmd/oworm/oscsi/status.c, revision 1.1

1.1     ! root        1: #include       "scsi.h"
        !             2: 
        !             3: static shelf();
        !             4: 
        !             5: s_status(drive, o)
        !             6:        struct scsi_o *o;
        !             7: {
        !             8:        struct scsi_o output;
        !             9:        register unsigned char *d;
        !            10:        int i;
        !            11: 
        !            12:        if(o == 0)
        !            13:                o = &output;
        !            14:        if(s_istatus(drive, o))
        !            15:                return(1);
        !            16:        if(V){
        !            17:                d = &o->data[16];
        !            18:                for(i = 0; i < 8; i++, d += 4){
        !            19:                        Fprint(1, "drive %d: %sready,%sdisk in LUN,power %s,", i,
        !            20:                                (d[0]&1)?"":"not ", (d[0]&0x40)?"":"no ",
        !            21:                                (d[0]&0x80)?"off":"on");
        !            22:                        Fprint(1, "disk in %s %d",( d[1]&0x80)? "drive":"shelf", d[1]&0x7f);
        !            23:                        if(d[2]&0x80)
        !            24:                                Fprint(1, ", return shelf %d", d[2]&0x7F);
        !            25:                        Fprint(1, "\n");
        !            26:                }
        !            27:                for(i = 0; i < 50; i++, d++)
        !            28:                        if(*d){
        !            29:                                Fprint(1, "%d", i);
        !            30:                                shelf(*d);
        !            31:                        }
        !            32:                Fprint(1, "I/O shelf");
        !            33:                shelf(*d);
        !            34:                d++;
        !            35:                Fprint(1, "carrier: ");
        !            36:                if(*d&0x80)
        !            37:                        Fprint(1, "disk shelf=%d\n", *d&0x7F);
        !            38:                else
        !            39:                        Fprint(1, "no disk\n");
        !            40:                d++;
        !            41:                if(*d&0x80)
        !            42:                        Fprint(1, "upper drive: disk, LUN=%d\n", *d&7);
        !            43:                else
        !            44:                        Fprint(1, "upper drive: no disk\n");
        !            45:                d++;
        !            46:                if(*d&0x80)
        !            47:                        Fprint(1, "lower drive: disk, LUN=%d\n", *d&7);
        !            48:                else
        !            49:                        Fprint(1, "lower drive: no disk\n");
        !            50:        }
        !            51:        return(0);
        !            52: }
        !            53: 
        !            54: s_istatus(drive, o)
        !            55:        struct scsi_o *o;
        !            56: {
        !            57:        struct scsi_i input;
        !            58: 
        !            59:        input.bus_id = 1<<scsi_id;
        !            60:        input.cmd[0] = 0x1D;
        !            61:        input.cmd[1] = drive<<5;
        !            62:        input.cmd[2] = 0;
        !            63:        input.cmd[3] = 0;
        !            64:        input.cmd[4] = 10;
        !            65:        input.cmd[5] = 0;
        !            66:        input.data[0] = 0xE2;   /* internal status */
        !            67:        input.data[1] = 0;
        !            68:        input.data[2] = 0;
        !            69:        input.data[3] = 0;
        !            70:        input.data[4] = 0;
        !            71:        input.data[5] = 0;
        !            72:        input.data[6] = 0;
        !            73:        input.data[7] = 0;
        !            74:        input.data[8] = 0;
        !            75:        input.data[9] = 0;
        !            76:        if(scsiio(&input, o, 10, "status") < 0)
        !            77:                return(1);
        !            78:        s_diag(drive, 128, o);
        !            79:        if(CHECK(*o)){
        !            80:                scsidump(o);
        !            81:                return(1);
        !            82:        }
        !            83:        return(0);
        !            84: }
        !            85: 
        !            86: static
        !            87: shelf(i)
        !            88: {
        !            89:        Fprint(1, ": ", i&0xFF);
        !            90:        if(i&0x80){
        !            91:                Fprint(1, "%s,", (i&0x40)? "disk":"temporary");
        !            92:                if(i&0x10) Fprint(1, "wait loading,");
        !            93:                if(i&0x08) Fprint(1, "wait ejection,");
        !            94:                if(i&0x20) Fprint(1, "use shelf instead of drive for LUN %d", i&7);
        !            95:        } else
        !            96:                Fprint(1, "no disk");
        !            97:        Fprint(1, "\n");
        !            98: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.