blob: 004787e6d4bd8f18e6c04f6e49317c83a7682a5e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
/*
* Written by Julian Elischer (julian@tfs.com)
* for TRW Financial Systems for use under the MACH(2.5) operating system.
*
* TRW Financial Systems, in accordance with their agreement with Carnegie
* Mellon University, makes this software available to CMU to distribute
* or use in any manner that they see fit as long as this message is kept with
* the software. For this reason TFS also grants any other persons or
* organisations permission to use or modify this software.
*
* TFS supplies this software to be publicly redistributed
* on the understanding that TFS is not responsible for the correct
* functioning of this software in any circumstances.
*
* Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992
*
* $Id$
*/
/***********************************************\
* these calls are called by the high-end *
* drivers to get services from whatever low-end *
* drivers they are attached to *
\***********************************************/
struct scsi_switch
{
char *name; /* name of scsi bus controller */
int (*scsi_cmd)();
void (*scsi_minphys)();
int (*open_target_lu)();
int (*close_target_lu)();
long int (*adapter_info)(); /* see definitions below */
u_long spare[3];
};
#define AD_INF_MAX_CMDS 0x000000FF /* maximum number of entries
queuable to a device by
the adapter */
/* 24 bits of other adapter charcteristics go here */
/***********************************************\
* The scsi debug control bits *
\***********************************************/
extern int scsi_debug;
#define PRINTROUTINES 0x01
#define TRACEOPENS 0x02
#define TRACEINTERRUPTS 0x04
#define SHOWREQUESTS 0x08
#define SHOWSCATGATH 0x10
#define SHOWINQUIRY 0x20
#define SHOWCOMMANDS 0x40
/********************************/
/* return values for scsi_cmd() */
/********************************/
#define SUCCESSFULLY_QUEUED 0
#define TRY_AGAIN_LATER 1
#define COMPLETE 2
#define HAD_ERROR 3
struct scsi_xfer
{
struct scsi_xfer *next; /* when free */
int flags;
u_char adapter;
u_char targ;
u_char lu;
u_char retries; /* the number of times to retry */
long int timeout; /* in miliseconds */
struct scsi_generic *cmd;
int cmdlen;
u_char *data; /* either the dma address OR a uio address */
int datalen; /* data len (blank if uio) */
int resid;
int (*when_done)();
int done_arg;
int done_arg2;
int error;
struct buf *bp;
struct scsi_sense_data sense;
};
/********************************/
/* Flag values */
/********************************/
#define SCSI_NOSLEEP 0x01 /* Not a user... don't sleep */
#define SCSI_NOMASK 0x02 /* dont allow interrupts.. booting */
#define SCSI_NOSTART 0x04 /* left over from ancient history */
#define ITSDONE 0x10 /* the transfer is as done as it gets */
#define INUSE 0x20 /* The scsi_xfer block is in use */
#define SCSI_SILENT 0x40 /* Don't report errors to console */
#define SCSI_ERR_OK 0x80 /* An error on this operation is OK. */
#define SCSI_RESET 0x100 /* Reset the device in question */
#define SCSI_DATA_UIO 0x200 /* The data address refers to a UIO */
#define SCSI_DATA_IN 0x400 /* expect data to come INTO memory */
#define SCSI_DATA_OUT 0x800 /* expect data to flow OUT of memory */
#define SCSI_TARGET 0x1000 /* This defines a TARGET mode op. */
/********************************/
/* Error values */
/********************************/
#define XS_NOERROR 0x0 /* there is no error, (sense is invalid) */
#define XS_SENSE 0x1 /* Check the returned sense for the error */
#define XS_DRIVER_STUFFUP 0x2 /* Driver failed to perform operation */
#define XS_TIMEOUT 0x03 /* The device timed out.. turned off? */
#define XS_SWTIMEOUT 0x04 /* The Timeout reported was caught by SW */
#define XS_BUSY 0x08 /* The device busy, try again later? */
|