|
|
1.1 root 1: /*
2: * Written by Julian Elischer ([email protected])
3: * for TRW Financial Systems for use under the MACH(2.5) operating system.
1.1.1.2 ! root 4: * Hacked by Theo de Raadt <[email protected]>
1.1 root 5: *
6: * TRW Financial Systems, in accordance with their agreement with Carnegie
7: * Mellon University, makes this software available to CMU to distribute
8: * or use in any manner that they see fit as long as this message is kept with
9: * the software. For this reason TFS also grants any other persons or
10: * organisations permission to use or modify this software.
11: *
12: * TFS supplies this software to be publicly redistributed
13: * on the understanding that TFS is not responsible for the correct
14: * functioning of this software in any circumstances.
15: *
1.1.1.2 ! root 16: * scsiconf.h,v 1.4 1993/05/20 03:46:39 cgd Exp
1.1 root 17: */
18:
19: /*
1.1.1.2 ! root 20: * these calls are called by the high-end
! 21: * drivers to get services from whatever low-end
! 22: * drivers they are attached to
1.1 root 23: */
1.1.1.2 ! root 24: struct scsi_switch {
! 25: char *name;
! 26: int (*scsi_cmd)();
! 27: void (*scsi_minphys)();
! 28: int (*open_target_lu)();
! 29: int (*close_target_lu)();
! 30: long int (*adapter_info)(); /* see definitions below */
1.1 root 31: u_long spare[3];
1.1.1.2 ! root 32: u_char empty[8], used[8], printed[8];
1.1 root 33: };
34: #define AD_INF_MAX_CMDS 0x000000FF /* maximum number of entries
35: queuable to a device by
36: the adapter */
37: /* 24 bits of other adapter charcteristics go here */
38:
39: /***********************************************\
40: * The scsi debug control bits *
41: \***********************************************/
42: extern int scsi_debug;
43: #define PRINTROUTINES 0x01
44: #define TRACEOPENS 0x02
45: #define TRACEINTERRUPTS 0x04
46: #define SHOWREQUESTS 0x08
47: #define SHOWSCATGATH 0x10
48: #define SHOWINQUIRY 0x20
49: #define SHOWCOMMANDS 0x40
50:
51:
52: /********************************/
53: /* return values for scsi_cmd() */
54: /********************************/
55: #define SUCCESSFULLY_QUEUED 0
56: #define TRY_AGAIN_LATER 1
57: #define COMPLETE 2
58: #define HAD_ERROR 3
59:
60: struct scsi_xfer
61: {
62: struct scsi_xfer *next; /* when free */
63: int flags;
64: u_char adapter;
65: u_char targ;
66: u_char lu;
67: u_char retries; /* the number of times to retry */
68: long int timeout; /* in miliseconds */
69: struct scsi_generic *cmd;
70: int cmdlen;
71: u_char *data; /* either the dma address OR a uio address */
72: int datalen; /* data len (blank if uio) */
73: int resid;
74: int (*when_done)();
75: int done_arg;
76: int done_arg2;
77: int error;
78: struct buf *bp;
79: struct scsi_sense_data sense;
80: };
81: /********************************/
82: /* Flag values */
83: /********************************/
84: #define SCSI_NOSLEEP 0x01 /* Not a user... don't sleep */
85: #define SCSI_NOMASK 0x02 /* dont allow interrupts.. booting */
86: #define SCSI_NOSTART 0x04 /* left over from ancient history */
87: #define ITSDONE 0x10 /* the transfer is as done as it gets */
88: #define INUSE 0x20 /* The scsi_xfer block is in use */
89: #define SCSI_SILENT 0x40 /* Don't report errors to console */
90: #define SCSI_ERR_OK 0x80 /* An error on this operation is OK. */
91: #define SCSI_RESET 0x100 /* Reset the device in question */
92: #define SCSI_DATA_UIO 0x200 /* The data address refers to a UIO */
93: #define SCSI_DATA_IN 0x400 /* expect data to come INTO memory */
94: #define SCSI_DATA_OUT 0x800 /* expect data to flow OUT of memory */
95: #define SCSI_TARGET 0x1000 /* This defines a TARGET mode op. */
96: /********************************/
97: /* Error values */
98: /********************************/
99: #define XS_NOERROR 0x0 /* there is no error, (sense is invalid) */
100: #define XS_SENSE 0x1 /* Check the returned sense for the error */
101: #define XS_DRIVER_STUFFUP 0x2 /* Driver failed to perform operation */
102: #define XS_TIMEOUT 0x03 /* The device timed out.. turned off? */
103: #define XS_SWTIMEOUT 0x04 /* The Timeout reported was caught by SW */
104: #define XS_BUSY 0x08 /* The device busy, try again later? */
105:
1.1.1.2 ! root 106: /*
! 107: * The structure of known drivers for autoconfiguration
! 108: */
! 109: #define SC_TSD 0
! 110: #define SC_TST 1
! 111: #define SC_TCD 2
! 112:
! 113: #define SC_SHOWME 0x01
! 114: #define SC_ONE_LU 0x00
! 115: #define SC_MORE_LUS 0x02
! 116: struct scsidevs {
! 117: int type, dtype, removable;
! 118: char *manufacturer, *model, *version;
! 119: int (*attach_rtn)();
! 120: char *devname, flags;
! 121: };
! 122:
! 123: int scsi_inquire(int, int, int, struct scsi_switch *, u_char *, int);
! 124: int scsi_ready(int, int, int, struct scsi_switch *, int);
! 125: int scsi_attach(int, int, struct scsi_switch *, int *, int *, int);
! 126: void scsi_warn(int, int, struct scsi_switch *);
! 127: struct scsidevs *scsi_probe(int, struct scsi_switch *, int, int, int);
! 128: struct scsidevs *selectdev(int, int, int, struct scsi_switch *,
! 129: int, int, int, char *, char *, char *, int);
! 130: u_long _3btol(u_char *);
! 131: void lto3b(u_long, u_char *);
! 132:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.