1 #ifndef _AHA1542_H
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 #include <linux/types.h>
35
36
37
38 #define STATUS base
39 #define STST 0x80
40 #define DIAGF 0x40
41 #define INIT 0x20
42 #define IDLE 0x10
43 #define CDF 0x08
44 #define DF 0x04
45 #define INVDCMD 0x01
46 #define STATMASK 0xfd
47
48 #define INTRFLAGS STATUS+2
49 #define ANYINTR 0x80
50 #define SCRD 0x08
51 #define HACC 0x04
52 #define MBOA 0x02
53 #define MBIF 0x01
54 #define INTRMASK 0x8f
55
56
57 #define CONTROL STATUS
58 #define HRST 0x80
59 #define SRST 0x40
60 #define IRST 0x20
61 #define SCRST 0x10
62
63
64 #define DATA STATUS+1
65 #define CMD_NOP 0x00
66 #define CMD_MBINIT 0x01
67 #define CMD_START_SCSI 0x02
68 #define CMD_INQUIRY 0x04
69 #define CMD_EMBOI 0x05
70 #define CMD_BUSON_TIME 0x07
71 #define CMD_BUSOFF_TIME 0x08
72 #define CMD_RETDEVS 0x0a
73 #define CMD_RETCONF 0x0b
74 #define CMD_RETSETUP 0x0d
75 #define CMD_ECHO 0x1f
76
77
78 struct mailbox {
79 unchar status;
80 unchar ccbptr[3];
81 };
82
83
84 struct chain {
85 unchar datalen[3];
86 unchar dataptr[3];
87 };
88
89
90 #define any2scsi(up, p) \
91 (up)[0] = (((unsigned long)(p)) >> 16) ; \
92 (up)[1] = (((unsigned long)(p)) >> 8); \
93 (up)[2] = ((unsigned long)(p));
94
95 #define scsi2int(up) ( (((long)*(up)) << 16) + (((long)(up)[1]) << 8) + ((long)(up)[2]) )
96
97 #define xany2scsi(up, p) \
98 (up)[0] = ((long)(p)) >> 24; \
99 (up)[1] = ((long)(p)) >> 16; \
100 (up)[2] = ((long)(p)) >> 8; \
101 (up)[3] = ((long)(p));
102
103 #define xscsi2int(up) ( (((long)(up)[0]) << 24) + (((long)(up)[1]) << 16) \
104 + (((long)(up)[2]) << 8) + ((long)(up)[3]) )
105
106 #define MAX_CDB 12
107 #define MAX_SENSE 14
108
109 struct ccb {
110 unchar op;
111 unchar idlun;
112
113
114
115 unchar cdblen;
116 unchar rsalen;
117 unchar datalen[3];
118 unchar dataptr[3];
119 unchar linkptr[3];
120 unchar commlinkid;
121 unchar hastat;
122 unchar tarstat;
123 unchar reserved[2];
124 unchar cdb[MAX_CDB+MAX_SENSE];
125
126 };
127
128 int aha1542_detect(int);
129 int aha1542_command(Scsi_Cmnd *);
130 int aha1542_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
131 int aha1542_abort(Scsi_Cmnd *, int);
132 const char *aha1542_info(void);
133 int aha1542_reset(void);
134 int aha1542_biosparam(int, int, int*);
135
136 #define AHA1542_MAILBOXES 8
137 #define AHA1542_SCATTER 16
138
139 #ifndef NULL
140 #define NULL 0
141 #endif
142
143 #define AHA1542 {"Adaptec 1542", aha1542_detect, \
144 aha1542_info, aha1542_command, \
145 aha1542_queuecommand, \
146 aha1542_abort, \
147 aha1542_reset, \
148 NULL, \
149 aha1542_biosparam, \
150 AHA1542_MAILBOXES, 7, AHA1542_SCATTER, 1, 0, 1}
151
152 #endif