OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [message/] [fusion/] [mptscsih.h] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 *  linux/drivers/message/fusion/mptscsih.h
3
 *      High performance SCSI / Fibre Channel SCSI Host device driver.
4
 *      For use with PCI chip/adapter(s):
5
 *          LSIFC9xx/LSI409xx Fibre Channel
6
 *      running LSI Logic Fusion MPT (Message Passing Technology) firmware.
7
 *
8
 *  Credits:
9
 *      This driver would not exist if not for Alan Cox's development
10
 *      of the linux i2o driver.
11
 *
12
 *      A huge debt of gratitude is owed to David S. Miller (DaveM)
13
 *      for fixing much of the stupid and broken stuff in the early
14
 *      driver while porting to sparc64 platform.  THANK YOU!
15
 *
16
 *      (see also mptbase.c)
17
 *
18
 *  Copyright (c) 1999-2002 LSI Logic Corporation
19
 *  Originally By: Steven J. Ralston
20
 *  (mailto:sjralston1@netscape.net)
21
 *  (mailto:mpt_linux_developer@lsil.com)
22
 *
23
 *  $Id: mptscsih.h,v 1.1.1.1 2004-04-15 02:27:21 phoenix Exp $
24
 */
25
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
26
/*
27
    This program is free software; you can redistribute it and/or modify
28
    it under the terms of the GNU General Public License as published by
29
    the Free Software Foundation; version 2 of the License.
30
 
31
    This program is distributed in the hope that it will be useful,
32
    but WITHOUT ANY WARRANTY; without even the implied warranty of
33
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
34
    GNU General Public License for more details.
35
 
36
    NO WARRANTY
37
    THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
38
    CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
39
    LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
40
    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
41
    solely responsible for determining the appropriateness of using and
42
    distributing the Program and assumes all risks associated with its
43
    exercise of rights under this Agreement, including but not limited to
44
    the risks and costs of program errors, damage to or loss of data,
45
    programs or equipment, and unavailability or interruption of operations.
46
 
47
    DISCLAIMER OF LIABILITY
48
    NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
49
    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50
    DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
51
    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
52
    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
53
    USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
54
    HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES
55
 
56
    You should have received a copy of the GNU General Public License
57
    along with this program; if not, write to the Free Software
58
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
59
*/
60
 
61
#ifndef SCSIHOST_H_INCLUDED
62
#define SCSIHOST_H_INCLUDED
63
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
64
 
65
#include "linux/version.h"
66
 
67
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
68
/*
69
 *      SCSI Public stuff...
70
 */
71
 
72
/*
73
 *      Try to keep these at 2^N-1
74
 */
75
#define MPT_FC_CAN_QUEUE        127
76
#if defined MPT_SCSI_USE_NEW_EH
77
        #define MPT_SCSI_CAN_QUEUE      127
78
#else
79
        #define MPT_SCSI_CAN_QUEUE      63
80
#endif
81
 
82
#define MPT_SCSI_CMD_PER_DEV_HIGH       31
83
#define MPT_SCSI_CMD_PER_DEV_LOW        7
84
 
85
#define MPT_SCSI_CMD_PER_LUN            7
86
 
87
#define MPT_SCSI_MAX_SECTORS    8192
88
 
89
/*
90
 * Set the MAX_SGE value based on user input.
91
 */
92
#ifdef  CONFIG_FUSION_MAX_SGE
93
#if     CONFIG_FUSION_MAX_SGE  < 16
94
#define MPT_SCSI_SG_DEPTH       16
95
#elif   CONFIG_FUSION_MAX_SGE  > 128
96
#define MPT_SCSI_SG_DEPTH       128
97
#else
98
#define MPT_SCSI_SG_DEPTH       CONFIG_FUSION_MAX_SGE
99
#endif
100
#else
101
#define MPT_SCSI_SG_DEPTH       40
102
#endif
103
 
104
/* To disable domain validation, uncomment the
105
 * following line. No effect for FC devices.
106
 * For SCSI devices, driver will negotiate to
107
 * NVRAM settings (if available) or to maximum adapter
108
 * capabilities.
109
 */
110
/* #define MPTSCSIH_DISABLE_DOMAIN_VALIDATION */
111
 
112
 
113
/* SCSI driver setup structure. Settings can be overridden
114
 * by command line options.
115
 */
116
#define MPTSCSIH_DOMAIN_VALIDATION      1
117
#define MPTSCSIH_MAX_WIDTH              1
118
#define MPTSCSIH_MIN_SYNC               0x08
119
#define MPTSCSIH_SAF_TE                 0
120
 
121
struct mptscsih_driver_setup
122
{
123
        u8      dv;
124
        u8      max_width;
125
        u8      min_sync_fac;
126
        u8      saf_te;
127
};
128
 
129
 
130
#define MPTSCSIH_DRIVER_SETUP                   \
131
{                                               \
132
        MPTSCSIH_DOMAIN_VALIDATION,             \
133
        MPTSCSIH_MAX_WIDTH,                     \
134
        MPTSCSIH_MIN_SYNC,                      \
135
        MPTSCSIH_SAF_TE,                        \
136
}
137
 
138
 
139
 
140
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
141
/*
142
 *      Various bits and pieces broke within the lk-2.4.0-testN series:-(
143
 *      So here are various HACKS to work around them.
144
 */
145
 
146
/*
147
 *      Conditionalizing with "#ifdef MODULE/#endif" around:
148
 *              static Scsi_Host_Template driver_template = XX;
149
 *              #include <../../scsi/scsi_module.c>
150
 *      lines was REMOVED @ lk-2.4.0-test9
151
 *      Issue discovered 20001213 by: sshirron
152
 */
153
#define MPT_SCSIHOST_NEED_ENTRY_EXIT_HOOKUPS                    1
154
#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,0)
155
#       if LINUX_VERSION_CODE == KERNEL_VERSION(2,4,0)
156
                /*
157
                 *      Super HACK!  -by sralston:-(
158
                 *      (good grief; heaven help me!)
159
                 */
160
#               include <linux/capability.h>
161
#               if !defined(CAP_LEASE) && !defined(MODULE)
162
#                       undef MPT_SCSIHOST_NEED_ENTRY_EXIT_HOOKUPS
163
#               endif
164
#       else
165
#               ifndef MODULE
166
#                       undef MPT_SCSIHOST_NEED_ENTRY_EXIT_HOOKUPS
167
#               endif
168
#       endif
169
#endif
170
 
171
/*
172
 *      tq_scheduler disappeared @ lk-2.4.0-test12
173
 *      (right when <linux/sched.h> newly defined TQ_ACTIVE)
174
 *      tq_struct reworked in 2.5.41. Include workqueue.h.
175
 */
176
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,41)
177
#       include <linux/sched.h>
178
#       include <linux/workqueue.h>
179
#define SCHEDULE_TASK(x)                \
180
        if (schedule_work(x) == 0) {     \
181
                /*MOD_DEC_USE_COUNT*/;  \
182
        }
183
#else
184
#define HAVE_TQ_SCHED   1
185
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
186
#       include <linux/sched.h>
187
#       ifdef TQ_ACTIVE
188
#               undef HAVE_TQ_SCHED
189
#       endif
190
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,40)
191
#               undef HAVE_TQ_SCHED
192
#endif
193
#endif
194
#ifdef HAVE_TQ_SCHED
195
#define SCHEDULE_TASK(x)                \
196
        /*MOD_INC_USE_COUNT*/;          \
197
        (x)->next = NULL;               \
198
        queue_task(x, &tq_scheduler)
199
#else
200
#define SCHEDULE_TASK(x)                \
201
        /*MOD_INC_USE_COUNT*/;          \
202
        if (schedule_task(x) == 0) {     \
203
                /*MOD_DEC_USE_COUNT*/;  \
204
        }
205
#endif
206
#endif
207
 
208
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
209
 
210
#define x_scsi_detect           mptscsih_detect
211
#define x_scsi_release          mptscsih_release
212
#define x_scsi_info             mptscsih_info
213
#define x_scsi_queuecommand     mptscsih_qcmd
214
#define x_scsi_abort            mptscsih_abort
215
#define x_scsi_bus_reset        mptscsih_bus_reset
216
#define x_scsi_dev_reset        mptscsih_dev_reset
217
#define x_scsi_host_reset       mptscsih_host_reset
218
#define x_scsi_bios_param       mptscsih_bios_param
219
 
220
#define x_scsi_taskmgmt_bh      mptscsih_taskmgmt_bh
221
#define x_scsi_old_abort        mptscsih_old_abort
222
#define x_scsi_old_reset        mptscsih_old_reset
223
#define x_scsi_select_queue_depths      mptscsih_select_queue_depths
224
#define x_scsi_proc_info        mptscsih_proc_info
225
 
226
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
227
/*
228
 *      MPT SCSI Host / Initiator decls...
229
 */
230
extern  int              x_scsi_detect(Scsi_Host_Template *);
231
extern  int              x_scsi_release(struct Scsi_Host *host);
232
extern  const char      *x_scsi_info(struct Scsi_Host *);
233
extern  int              x_scsi_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
234
#ifdef MPT_SCSI_USE_NEW_EH
235
extern  int              x_scsi_abort(Scsi_Cmnd *);
236
extern  int              x_scsi_bus_reset(Scsi_Cmnd *);
237
extern  int              x_scsi_dev_reset(Scsi_Cmnd *);
238
extern  int              x_scsi_host_reset(Scsi_Cmnd *);
239
#else
240
extern  int              x_scsi_old_abort(Scsi_Cmnd *);
241
extern  int              x_scsi_old_reset(Scsi_Cmnd *, unsigned int);
242
#endif
243
extern  int              x_scsi_bios_param(Disk *, kdev_t, int *);
244
extern  void             x_scsi_taskmgmt_bh(void *);
245
extern  void             x_scsi_select_queue_depths(struct Scsi_Host *, Scsi_Device *);
246
extern  int              x_scsi_proc_info(char *, char **, off_t, int, int, int);
247
 
248
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
249
#define PROC_SCSI_DECL
250
#else
251
#define PROC_SCSI_DECL  .proc_name = "mptscsih",
252
#endif
253
 
254
#ifdef MPT_SCSI_USE_NEW_EH
255
#define MPT_SCSIHOST {                                          \
256
        .next                           = NULL,                 \
257
        PROC_SCSI_DECL                                          \
258
        .proc_info                      = x_scsi_proc_info,     \
259
        .name                           = "MPT SCSI Host",      \
260
        .detect                         = x_scsi_detect,        \
261
        .release                        = x_scsi_release,       \
262
        .info                           = x_scsi_info,          \
263
        .command                        = NULL,                 \
264
        .queuecommand                   = x_scsi_queuecommand,  \
265
        .eh_strategy_handler            = NULL,                 \
266
        .eh_abort_handler               = x_scsi_abort,         \
267
        .eh_device_reset_handler        = x_scsi_dev_reset,     \
268
        .eh_bus_reset_handler           = x_scsi_bus_reset,     \
269
        .eh_host_reset_handler          = NULL,                 \
270
        .bios_param                     = x_scsi_bios_param,    \
271
        .can_queue                      = MPT_SCSI_CAN_QUEUE,   \
272
        .this_id                        = -1,                   \
273
        .sg_tablesize                   = MPT_SCSI_SG_DEPTH,    \
274
        .cmd_per_lun                    = MPT_SCSI_CMD_PER_LUN, \
275
        .unchecked_isa_dma              = 0,                     \
276
        .use_clustering                 = ENABLE_CLUSTERING,    \
277
        .use_new_eh_code                = 1                     \
278
}
279
 
280
#else /* MPT_SCSI_USE_NEW_EH */
281
 
282
#define MPT_SCSIHOST {                                          \
283
        .next                           = NULL,                 \
284
        PROC_SCSI_DECL                                          \
285
        .name                           = "MPT SCSI Host",      \
286
        .detect                         = x_scsi_detect,        \
287
        .release                        = x_scsi_release,       \
288
        .info                           = x_scsi_info,          \
289
        .command                        = NULL,                 \
290
        .queuecommand                   = x_scsi_queuecommand,  \
291
        .abort                          = x_scsi_old_abort,     \
292
        .reset                          = x_scsi_old_reset,     \
293
        .bios_param                     = x_scsi_bios_param,    \
294
        .can_queue                      = MPT_SCSI_CAN_QUEUE,   \
295
        .this_id                        = -1,                   \
296
        .sg_tablesize                   = MPT_SCSI_SG_DEPTH,    \
297
        .cmd_per_lun                    = MPT_SCSI_CMD_PER_LUN, \
298
        .unchecked_isa_dma              = 0,                     \
299
        .use_clustering                 = ENABLE_CLUSTERING     \
300
}
301
#endif  /* MPT_SCSI_USE_NEW_EH */
302
 
303
 
304
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
305
 
306
/*  include/scsi/scsi.h may not be quite complete...  */
307
#ifndef RESERVE_10
308
#define RESERVE_10              0x56
309
#endif
310
#ifndef RELEASE_10
311
#define RELEASE_10              0x57
312
#endif
313
#ifndef PERSISTENT_RESERVE_IN
314
#define PERSISTENT_RESERVE_IN   0x5e
315
#endif
316
#ifndef PERSISTENT_RESERVE_OUT
317
#define PERSISTENT_RESERVE_OUT  0x5f
318
#endif
319
 
320
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
321
 
322
#endif
323
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.