Commit | Line | Data |
---|---|---|
1a59d1b8 | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
1da177e4 LT |
2 | /* |
3 | * Device driver for the SYMBIOS/LSILOGIC 53C8XX and 53C1010 family | |
4 | * of PCI-SCSI IO processors. | |
5 | * | |
6 | * Copyright (C) 1999-2001 Gerard Roudier <groudier@free.fr> | |
7 | * | |
8 | * This driver is derived from the Linux sym53c8xx driver. | |
9 | * Copyright (C) 1998-2000 Gerard Roudier | |
10 | * | |
11 | * The sym53c8xx driver is derived from the ncr53c8xx driver that had been | |
12 | * a port of the FreeBSD ncr driver to Linux-1.2.13. | |
13 | * | |
14 | * The original ncr driver has been written for 386bsd and FreeBSD by | |
15 | * Wolfgang Stanglmeier <wolf@cologne.de> | |
16 | * Stefan Esser <se@mi.Uni-Koeln.de> | |
17 | * Copyright (C) 1994 Wolfgang Stanglmeier | |
18 | * | |
19 | * Other major contributions: | |
20 | * | |
21 | * NVRAM detection and reading. | |
22 | * Copyright (C) 1997 Richard Waltham <dormouse@farsrobt.demon.co.uk> | |
23 | * | |
24 | *----------------------------------------------------------------------------- | |
1da177e4 LT |
25 | */ |
26 | ||
27 | #ifndef SYM53C8XX_H | |
28 | #define SYM53C8XX_H | |
29 | ||
1da177e4 LT |
30 | |
31 | /* | |
32 | * DMA addressing mode. | |
33 | * | |
34 | * 0 : 32 bit addressing for all chips. | |
35 | * 1 : 40 bit addressing when supported by chip. | |
36 | * 2 : 64 bit addressing when supported by chip, | |
37 | * limited to 16 segments of 4 GB -> 64 GB max. | |
38 | */ | |
39 | #define SYM_CONF_DMA_ADDRESSING_MODE CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE | |
40 | ||
41 | /* | |
42 | * NVRAM support. | |
43 | */ | |
44 | #if 1 | |
45 | #define SYM_CONF_NVRAM_SUPPORT (1) | |
46 | #endif | |
47 | ||
48 | /* | |
49 | * These options are not tunable from 'make config' | |
50 | */ | |
51 | #if 1 | |
52 | #define SYM_LINUX_PROC_INFO_SUPPORT | |
53 | #define SYM_LINUX_USER_COMMAND_SUPPORT | |
54 | #define SYM_LINUX_USER_INFO_SUPPORT | |
55 | #define SYM_LINUX_DEBUG_CONTROL_SUPPORT | |
56 | #endif | |
57 | ||
58 | /* | |
59 | * Also handle old NCR chips if not (0). | |
60 | */ | |
61 | #define SYM_CONF_GENERIC_SUPPORT (1) | |
62 | ||
63 | /* | |
64 | * Allow tags from 2 to 256, default 8 | |
65 | */ | |
66 | #ifndef CONFIG_SCSI_SYM53C8XX_MAX_TAGS | |
67 | #define CONFIG_SCSI_SYM53C8XX_MAX_TAGS (8) | |
68 | #endif | |
69 | ||
70 | #if CONFIG_SCSI_SYM53C8XX_MAX_TAGS < 2 | |
71 | #define SYM_CONF_MAX_TAG (2) | |
72 | #elif CONFIG_SCSI_SYM53C8XX_MAX_TAGS > 256 | |
73 | #define SYM_CONF_MAX_TAG (256) | |
74 | #else | |
75 | #define SYM_CONF_MAX_TAG CONFIG_SCSI_SYM53C8XX_MAX_TAGS | |
76 | #endif | |
77 | ||
78 | #ifndef CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS | |
79 | #define CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS SYM_CONF_MAX_TAG | |
80 | #endif | |
81 | ||
82 | /* | |
83 | * Anyway, we configure the driver for at least 64 tags per LUN. :) | |
84 | */ | |
85 | #if SYM_CONF_MAX_TAG <= 64 | |
86 | #define SYM_CONF_MAX_TAG_ORDER (6) | |
87 | #elif SYM_CONF_MAX_TAG <= 128 | |
88 | #define SYM_CONF_MAX_TAG_ORDER (7) | |
89 | #else | |
90 | #define SYM_CONF_MAX_TAG_ORDER (8) | |
91 | #endif | |
92 | ||
93 | /* | |
94 | * Max number of SG entries. | |
95 | */ | |
96 | #define SYM_CONF_MAX_SG (96) | |
97 | ||
98 | /* | |
99 | * Driver setup structure. | |
100 | * | |
101 | * This structure is initialized from linux config options. | |
102 | * It can be overridden at boot-up by the boot command line. | |
103 | */ | |
104 | struct sym_driver_setup { | |
105 | u_short max_tag; | |
106 | u_char burst_order; | |
107 | u_char scsi_led; | |
108 | u_char scsi_diff; | |
109 | u_char irq_mode; | |
110 | u_char scsi_bus_check; | |
111 | u_char host_id; | |
112 | ||
113 | u_char verbose; | |
114 | u_char settle_delay; | |
115 | u_char use_nvram; | |
116 | u_long excludes[8]; | |
1da177e4 LT |
117 | }; |
118 | ||
119 | #define SYM_SETUP_MAX_TAG sym_driver_setup.max_tag | |
120 | #define SYM_SETUP_BURST_ORDER sym_driver_setup.burst_order | |
121 | #define SYM_SETUP_SCSI_LED sym_driver_setup.scsi_led | |
122 | #define SYM_SETUP_SCSI_DIFF sym_driver_setup.scsi_diff | |
123 | #define SYM_SETUP_IRQ_MODE sym_driver_setup.irq_mode | |
124 | #define SYM_SETUP_SCSI_BUS_CHECK sym_driver_setup.scsi_bus_check | |
125 | #define SYM_SETUP_HOST_ID sym_driver_setup.host_id | |
126 | #define boot_verbose sym_driver_setup.verbose | |
127 | ||
128 | /* | |
129 | * Initial setup. | |
130 | * | |
131 | * Can be overriden at startup by a command line. | |
132 | */ | |
133 | #define SYM_LINUX_DRIVER_SETUP { \ | |
134 | .max_tag = CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS, \ | |
135 | .burst_order = 7, \ | |
136 | .scsi_led = 1, \ | |
137 | .scsi_diff = 1, \ | |
138 | .irq_mode = 0, \ | |
139 | .scsi_bus_check = 1, \ | |
140 | .host_id = 7, \ | |
141 | .verbose = 0, \ | |
142 | .settle_delay = 3, \ | |
143 | .use_nvram = 1, \ | |
144 | } | |
145 | ||
146 | extern struct sym_driver_setup sym_driver_setup; | |
147 | extern unsigned int sym_debug_flags; | |
148 | #define DEBUG_FLAGS sym_debug_flags | |
149 | ||
150 | /* | |
151 | * Max number of targets. | |
152 | * Maximum is 16 and you are advised not to change this value. | |
153 | */ | |
154 | #ifndef SYM_CONF_MAX_TARGET | |
155 | #define SYM_CONF_MAX_TARGET (16) | |
156 | #endif | |
157 | ||
158 | /* | |
159 | * Max number of logical units. | |
160 | * SPI-2 allows up to 64 logical units, but in real life, target | |
161 | * that implements more that 7 logical units are pretty rare. | |
162 | * Anyway, the cost of accepting up to 64 logical unit is low in | |
163 | * this driver, thus going with the maximum is acceptable. | |
164 | */ | |
165 | #ifndef SYM_CONF_MAX_LUN | |
166 | #define SYM_CONF_MAX_LUN (64) | |
167 | #endif | |
168 | ||
169 | /* | |
170 | * Max number of IO control blocks queued to the controller. | |
171 | * Each entry needs 8 bytes and the queues are allocated contiguously. | |
172 | * Since we donnot want to allocate more than a page, the theorical | |
173 | * maximum is PAGE_SIZE/8. For safety, we announce a bit less to the | |
174 | * access method. :) | |
175 | * When not supplied, as it is suggested, the driver compute some | |
176 | * good value for this parameter. | |
177 | */ | |
178 | /* #define SYM_CONF_MAX_START (PAGE_SIZE/8 - 16) */ | |
179 | ||
180 | /* | |
181 | * Support for Immediate Arbitration. | |
182 | * Not advised. | |
183 | */ | |
184 | /* #define SYM_CONF_IARB_SUPPORT */ | |
185 | ||
186 | /* | |
187 | * Only relevant if IARB support configured. | |
188 | * - Max number of successive settings of IARB hints. | |
189 | * - Set IARB on arbitration lost. | |
190 | */ | |
191 | #define SYM_CONF_IARB_MAX 3 | |
192 | #define SYM_CONF_SET_IARB_ON_ARB_LOST 1 | |
193 | ||
194 | /* | |
195 | * Returning wrong residuals may make problems. | |
196 | * When zero, this define tells the driver to | |
197 | * always return 0 as transfer residual. | |
198 | * Btw, all my testings of residuals have succeeded. | |
199 | */ | |
200 | #define SYM_SETUP_RESIDUAL_SUPPORT 1 | |
201 | ||
202 | #endif /* SYM53C8XX_H */ |