|
|
1.1 ! root 1: typedef unsigned char uchar; ! 2: ! 3: struct scsi_cmd ! 4: { ! 5: unsigned long id; ! 6: uchar bus_id; /* SCSI id of destination device */ ! 7: uchar flags; ! 8: uchar cmd[10]; /* SCSI command */ ! 9: uchar data[4096]; /* optional data */ ! 10: }; ! 11: ! 12: struct scsi_return ! 13: { ! 14: unsigned long id; ! 15: uchar scsi_stat; /* scsi status byte */ ! 16: uchar scsi_msg; /* scsi message byte */ ! 17: uchar flags; ! 18: uchar type; /* 1=td 2=us */ ! 19: unsigned short reg1; /* td=sa, us=per */ ! 20: unsigned short reg2; /* td=mscp, us=per */ ! 21: unsigned char sense[22]; ! 22: char pad[2]; ! 23: uchar data[4096]; /* any data */ ! 24: uchar nread; /* chars read(-8) if ret count was -ve */ ! 25: }; ! 26: ! 27: #define set6(x,a,b,c,d,e,f) (x).flags=0,(x).cmd[0]=(a),(x).cmd[1]=(b),(x).cmd[2]=(c),\ ! 28: (x).cmd[3]=(d),(x).cmd[4]=(e),(x).cmd[5]=(f) ! 29: #define set10(x,a,b,c,d,e,f,g,h,i,j) (x).flags=0,(x).cmd[0]=(a),(x).cmd[1]=(b),(x).cmd[2]=(c),\ ! 30: (x).cmd[3]=(d),(x).cmd[4]=(e),(x).cmd[5]=(f),(x).cmd[6]=(g),(x).cmd[7]=(h),\ ! 31: (x).cmd[8]=(i),(x).cmd[9]=(j) ! 32: #define setdiag(x,lun,n) (x).flags=0,(x).cmd[0]=0x1C,(x).cmd[1]=(lun)<<5,(x).cmd[2] = 0,\ ! 33: (x).cmd[3]=(n)>>8,(x).cmd[4]=(n),(x).cmd[5]=0 ! 34: ! 35: extern s_io(int, struct scsi_cmd *, int, struct scsi_return *, int, char *);/* return 0 on no error, does sense on error */ ! 36: extern ss_io(int, struct scsi_cmd *, int, struct scsi_return *, int, char *);/* return 0 on no error */ ! 37: extern int s_ignua; /* should s_io ignore unit attentions? */ ! 38: extern void (*ss_extsense)(uchar *, char *, int); ! 39: extern int s_start(int, char *); ! 40: extern int s_stop(int, char *); ! 41: extern int s_eject(int, char *); ! 42: extern int s_id; ! 43: extern unsigned long longat(uchar *);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.