|
|
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 *);
44: extern void setlongtimeout(struct scsi_cmd *);
45: extern void soft_reset(void);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.