Annotation of researchv10dc/cmd/oworm/scsi/status.c, revision 1.1.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%c (%d)",( d[1]&0x80)? "drive":"shelf", d[1]&0x7f, (d[1]&1)+'a', 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:                i = *d&0x7F;
                     37:                if(*d&0x80)
                     38:                        Fprint(1, "disk shelf=%d%c (%d)\n", i/2, 'a'+(i&1), i);
                     39:                else
                     40:                        Fprint(1, "no disk\n");
                     41:                d++;
                     42:                if(*d&0x80)
                     43:                        Fprint(1, "upper drive: disk, LUN=%d\n", *d&7);
                     44:                else
                     45:                        Fprint(1, "upper drive: no disk\n");
                     46:                d++;
                     47:                if(*d&0x80)
                     48:                        Fprint(1, "lower drive: disk, LUN=%d\n", *d&7);
                     49:                else
                     50:                        Fprint(1, "lower drive: no disk\n");
                     51:        }
                     52:        return(0);
                     53: }
                     54: 
                     55: s_istatus(drive, o)
                     56:        struct scsi_o *o;
                     57: {
                     58:        struct scsi_i input;
                     59: 
                     60:        input.bus_id = scsi_id;
                     61:        input.cmd[0] = 0x1D;
                     62:        input.cmd[1] = drive<<5;
                     63:        input.cmd[2] = 0;
                     64:        input.cmd[3] = 0;
                     65:        input.cmd[4] = 10;
                     66:        input.cmd[5] = 0;
                     67:        input.data[0] = 0xE2;   /* internal status */
                     68:        input.data[1] = 0;
                     69:        input.data[2] = 0;
                     70:        input.data[3] = 0;
                     71:        input.data[4] = 0;
                     72:        input.data[5] = 0;
                     73:        input.data[6] = 0;
                     74:        input.data[7] = 0;
                     75:        input.data[8] = 0;
                     76:        input.data[9] = 0;
                     77:        if(scsiio(&input, 10, o, 0, "status") < 0)
                     78:                return(1);
                     79:        if(s_diag(drive, 128, o))
                     80:                return(1);
                     81:        if(CHECK(*o)){
                     82:                prcheck(1, o);
                     83:                return(1);
                     84:        }
                     85:        return(0);
                     86: }
                     87: 
                     88: static
                     89: shelf(i)
                     90: {
                     91:        Fprint(1, ": ", i&0xFF);
                     92:        if(i&0x80){
                     93:                Fprint(1, "%s,", (i&0x40)? "disk":"temporary");
                     94:                if(i&0x10) Fprint(1, "wait loading,");
                     95:                if(i&0x08) Fprint(1, "wait ejection,");
                     96:                if(i&0x20) Fprint(1, "use shelf instead of drive for LUN %d", i&7);
                     97:        } else
                     98:                Fprint(1, "no disk");
                     99:        Fprint(1, "\n");
                    100: }

unix.superglobalmegacorp.com

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