[PATCH] kconfig: stricter error checking for .config
[deliverable/linux.git] / drivers / message / fusion / mptctl.h
1 /*
2 * linux/drivers/message/fusion/mptioctl.h
3 * Fusion MPT misc device (ioctl) 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 * Copyright (c) 1999-2005 LSI Logic Corporation
9 * (mailto:mpt_linux_developer@lsil.com)
10 *
11 */
12 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
13 /*
14 This program is free software; you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation; version 2 of the License.
17
18 This program is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License for more details.
22
23 NO WARRANTY
24 THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
25 CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
26 LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
27 MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
28 solely responsible for determining the appropriateness of using and
29 distributing the Program and assumes all risks associated with its
30 exercise of rights under this Agreement, including but not limited to
31 the risks and costs of program errors, damage to or loss of data,
32 programs or equipment, and unavailability or interruption of operations.
33
34 DISCLAIMER OF LIABILITY
35 NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
36 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37 DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
38 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
39 TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
40 USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
41 HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES
42
43 You should have received a copy of the GNU General Public License
44 along with this program; if not, write to the Free Software
45 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
46 */
47
48 #ifndef MPTCTL_H_INCLUDED
49 #define MPTCTL_H_INCLUDED
50 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
51
52 #include "linux/version.h"
53
54
55 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
56 /*
57 *
58 */
59 #define MPT_MISCDEV_BASENAME "mptctl"
60 #define MPT_MISCDEV_PATHNAME "/dev/" MPT_MISCDEV_BASENAME
61
62 #define MPT_PRODUCT_LENGTH 12
63
64 /*
65 * Generic MPT Control IOCTLs and structures
66 */
67 #define MPT_MAGIC_NUMBER 'm'
68
69 #define MPTRWPERF _IOWR(MPT_MAGIC_NUMBER,0,struct mpt_raw_r_w)
70
71 #define MPTFWDOWNLOAD _IOWR(MPT_MAGIC_NUMBER,15,struct mpt_fw_xfer)
72 #define MPTCOMMAND _IOWR(MPT_MAGIC_NUMBER,20,struct mpt_ioctl_command)
73
74 #if defined(__KERNEL__) && defined(CONFIG_COMPAT)
75 #define MPTFWDOWNLOAD32 _IOWR(MPT_MAGIC_NUMBER,15,struct mpt_fw_xfer32)
76 #define MPTCOMMAND32 _IOWR(MPT_MAGIC_NUMBER,20,struct mpt_ioctl_command32)
77 #endif
78
79 #define MPTIOCINFO _IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo)
80 #define MPTIOCINFO1 _IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo_rev0)
81 #define MPTIOCINFO2 _IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo_rev1)
82 #define MPTTARGETINFO _IOWR(MPT_MAGIC_NUMBER,18,struct mpt_ioctl_targetinfo)
83 #define MPTTEST _IOWR(MPT_MAGIC_NUMBER,19,struct mpt_ioctl_test)
84 #define MPTEVENTQUERY _IOWR(MPT_MAGIC_NUMBER,21,struct mpt_ioctl_eventquery)
85 #define MPTEVENTENABLE _IOWR(MPT_MAGIC_NUMBER,22,struct mpt_ioctl_eventenable)
86 #define MPTEVENTREPORT _IOWR(MPT_MAGIC_NUMBER,23,struct mpt_ioctl_eventreport)
87 #define MPTHARDRESET _IOWR(MPT_MAGIC_NUMBER,24,struct mpt_ioctl_diag_reset)
88 #define MPTFWREPLACE _IOWR(MPT_MAGIC_NUMBER,25,struct mpt_ioctl_replace_fw)
89
90 /*
91 * SPARC PLATFORM REMARKS:
92 * IOCTL data structures that contain pointers
93 * will have different sizes in the driver and applications
94 * (as the app. will not use 8-byte pointers).
95 * Apps should use MPTFWDOWNLOAD and MPTCOMMAND.
96 * The driver will convert data from
97 * mpt_fw_xfer32 (mpt_ioctl_command32) to mpt_fw_xfer (mpt_ioctl_command)
98 * internally.
99 *
100 * If data structures change size, must handle as in IOCGETINFO.
101 */
102 struct mpt_fw_xfer {
103 unsigned int iocnum; /* IOC unit number */
104 unsigned int fwlen;
105 void __user *bufp; /* Pointer to firmware buffer */
106 };
107
108 #if defined(__KERNEL__) && defined(CONFIG_COMPAT)
109 struct mpt_fw_xfer32 {
110 unsigned int iocnum;
111 unsigned int fwlen;
112 u32 bufp;
113 };
114 #endif /*}*/
115
116 /*
117 * IOCTL header structure.
118 * iocnum - must be defined.
119 * port - must be defined for all IOCTL commands other than MPTIOCINFO
120 * maxDataSize - ignored on MPTCOMMAND commands
121 * - ignored on MPTFWREPLACE commands
122 * - on query commands, reports the maximum number of bytes to be returned
123 * to the host driver (count includes the header).
124 * That is, set to sizeof(struct mpt_ioctl_iocinfo) for fixed sized commands.
125 * Set to sizeof(struct mpt_ioctl_targetinfo) + datasize for variable
126 * sized commands. (MPTTARGETINFO, MPTEVENTREPORT)
127 */
128 typedef struct _mpt_ioctl_header {
129 unsigned int iocnum; /* IOC unit number */
130 unsigned int port; /* IOC port number */
131 int maxDataSize; /* Maximum Num. bytes to transfer on read */
132 } mpt_ioctl_header;
133
134 /*
135 * Issue a diagnostic reset
136 */
137 struct mpt_ioctl_diag_reset {
138 mpt_ioctl_header hdr;
139 };
140
141
142 /*
143 * PCI bus/device/function information structure.
144 */
145 struct mpt_ioctl_pci_info {
146 union {
147 struct {
148 unsigned int deviceNumber : 5;
149 unsigned int functionNumber : 3;
150 unsigned int busNumber : 24;
151 } bits;
152 unsigned int asUlong;
153 } u;
154 };
155
156 struct mpt_ioctl_pci_info2 {
157 union {
158 struct {
159 unsigned int deviceNumber : 5;
160 unsigned int functionNumber : 3;
161 unsigned int busNumber : 24;
162 } bits;
163 unsigned int asUlong;
164 } u;
165 int segmentID;
166 };
167
168 /*
169 * Adapter Information Page
170 * Read only.
171 * Data starts at offset 0xC
172 */
173 #define MPT_IOCTL_INTERFACE_FC (0x01)
174 #define MPT_IOCTL_INTERFACE_SCSI (0x00)
175 #define MPT_IOCTL_VERSION_LENGTH (32)
176
177 struct mpt_ioctl_iocinfo {
178 mpt_ioctl_header hdr;
179 int adapterType; /* SCSI or FCP */
180 int port; /* port number */
181 int pciId; /* PCI Id. */
182 int hwRev; /* hardware revision */
183 int subSystemDevice; /* PCI subsystem Device ID */
184 int subSystemVendor; /* PCI subsystem Vendor ID */
185 int numDevices; /* number of devices */
186 int FWVersion; /* FW Version (integer) */
187 int BIOSVersion; /* BIOS Version (integer) */
188 char driverVersion[MPT_IOCTL_VERSION_LENGTH]; /* Driver Version (string) */
189 char busChangeEvent;
190 char hostId;
191 char rsvd[2];
192 struct mpt_ioctl_pci_info2 pciInfo; /* Added Rev 2 */
193 };
194
195 struct mpt_ioctl_iocinfo_rev1 {
196 mpt_ioctl_header hdr;
197 int adapterType; /* SCSI or FCP */
198 int port; /* port number */
199 int pciId; /* PCI Id. */
200 int hwRev; /* hardware revision */
201 int subSystemDevice; /* PCI subsystem Device ID */
202 int subSystemVendor; /* PCI subsystem Vendor ID */
203 int numDevices; /* number of devices */
204 int FWVersion; /* FW Version (integer) */
205 int BIOSVersion; /* BIOS Version (integer) */
206 char driverVersion[MPT_IOCTL_VERSION_LENGTH]; /* Driver Version (string) */
207 char busChangeEvent;
208 char hostId;
209 char rsvd[2];
210 struct mpt_ioctl_pci_info pciInfo; /* Added Rev 1 */
211 };
212
213 /* Original structure, must always accept these
214 * IOCTLs. 4 byte pads can occur based on arch with
215 * above structure. Wish to re-align, but cannot.
216 */
217 struct mpt_ioctl_iocinfo_rev0 {
218 mpt_ioctl_header hdr;
219 int adapterType; /* SCSI or FCP */
220 int port; /* port number */
221 int pciId; /* PCI Id. */
222 int hwRev; /* hardware revision */
223 int subSystemDevice; /* PCI subsystem Device ID */
224 int subSystemVendor; /* PCI subsystem Vendor ID */
225 int numDevices; /* number of devices */
226 int FWVersion; /* FW Version (integer) */
227 int BIOSVersion; /* BIOS Version (integer) */
228 char driverVersion[MPT_IOCTL_VERSION_LENGTH]; /* Driver Version (string) */
229 char busChangeEvent;
230 char hostId;
231 char rsvd[2];
232 };
233
234 /*
235 * Device Information Page
236 * Report the number of, and ids of, all targets
237 * on this IOC. The ids array is a packed structure
238 * of the known targetInfo.
239 * bits 31-24: reserved
240 * 23-16: LUN
241 * 15- 8: Bus Number
242 * 7- 0: Target ID
243 */
244 struct mpt_ioctl_targetinfo {
245 mpt_ioctl_header hdr;
246 int numDevices; /* Num targets on this ioc */
247 int targetInfo[1];
248 };
249
250
251 /*
252 * Event reporting IOCTL's. These IOCTL's will
253 * use the following defines:
254 */
255 struct mpt_ioctl_eventquery {
256 mpt_ioctl_header hdr;
257 unsigned short eventEntries;
258 unsigned short reserved;
259 unsigned int eventTypes;
260 };
261
262 struct mpt_ioctl_eventenable {
263 mpt_ioctl_header hdr;
264 unsigned int eventTypes;
265 };
266
267 #ifndef __KERNEL__
268 typedef struct {
269 uint event;
270 uint eventContext;
271 uint data[2];
272 } MPT_IOCTL_EVENTS;
273 #endif
274
275 struct mpt_ioctl_eventreport {
276 mpt_ioctl_header hdr;
277 MPT_IOCTL_EVENTS eventData[1];
278 };
279
280 #define MPT_MAX_NAME 32
281 struct mpt_ioctl_test {
282 mpt_ioctl_header hdr;
283 u8 name[MPT_MAX_NAME];
284 int chip_type;
285 u8 product [MPT_PRODUCT_LENGTH];
286 };
287
288 /* Replace the FW image cached in host driver memory
289 * newImageSize - image size in bytes
290 * newImage - first byte of the new image
291 */
292 typedef struct mpt_ioctl_replace_fw {
293 mpt_ioctl_header hdr;
294 int newImageSize;
295 u8 newImage[1];
296 } mpt_ioctl_replace_fw_t;
297
298 /* General MPT Pass through data strucutre
299 *
300 * iocnum
301 * timeout - in seconds, command timeout. If 0, set by driver to
302 * default value.
303 * replyFrameBufPtr - reply location
304 * dataInBufPtr - destination for read
305 * dataOutBufPtr - data source for write
306 * senseDataPtr - sense data location
307 * maxReplyBytes - maximum number of reply bytes to be sent to app.
308 * dataInSize - num bytes for data transfer in (read)
309 * dataOutSize - num bytes for data transfer out (write)
310 * dataSgeOffset - offset in words from the start of the request message
311 * to the first SGL
312 * MF[1];
313 *
314 * Remark: Some config pages have bi-directional transfer,
315 * both a read and a write. The basic structure allows for
316 * a bidirectional set up. Normal messages will have one or
317 * both of these buffers NULL.
318 */
319 struct mpt_ioctl_command {
320 mpt_ioctl_header hdr;
321 int timeout; /* optional (seconds) */
322 char __user *replyFrameBufPtr;
323 char __user *dataInBufPtr;
324 char __user *dataOutBufPtr;
325 char __user *senseDataPtr;
326 int maxReplyBytes;
327 int dataInSize;
328 int dataOutSize;
329 int maxSenseBytes;
330 int dataSgeOffset;
331 char MF[1];
332 };
333
334 /*
335 * SPARC PLATFORM: See earlier remark.
336 */
337 #if defined(__KERNEL__) && defined(CONFIG_COMPAT)
338 struct mpt_ioctl_command32 {
339 mpt_ioctl_header hdr;
340 int timeout;
341 u32 replyFrameBufPtr;
342 u32 dataInBufPtr;
343 u32 dataOutBufPtr;
344 u32 senseDataPtr;
345 int maxReplyBytes;
346 int dataInSize;
347 int dataOutSize;
348 int maxSenseBytes;
349 int dataSgeOffset;
350 char MF[1];
351 };
352 #endif /*}*/
353
354
355 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
356 /*
357 * HP Specific IOCTL Defines and Structures
358 */
359
360 #define CPQFCTS_IOC_MAGIC 'Z'
361 #define HP_IOC_MAGIC 'Z'
362 #define HP_GETHOSTINFO _IOR(HP_IOC_MAGIC, 20, hp_host_info_t)
363 #define HP_GETHOSTINFO1 _IOR(HP_IOC_MAGIC, 20, hp_host_info_rev0_t)
364 #define HP_GETTARGETINFO _IOR(HP_IOC_MAGIC, 21, hp_target_info_t)
365
366 /* All HP IOCTLs must include this header
367 */
368 typedef struct _hp_header {
369 unsigned int iocnum;
370 unsigned int host;
371 unsigned int channel;
372 unsigned int id;
373 unsigned int lun;
374 } hp_header_t;
375
376 /*
377 * Header:
378 * iocnum required (input)
379 * host ignored
380 * channe ignored
381 * id ignored
382 * lun ignored
383 */
384 typedef struct _hp_host_info {
385 hp_header_t hdr;
386 u16 vendor;
387 u16 device;
388 u16 subsystem_vendor;
389 u16 subsystem_id;
390 u8 devfn;
391 u8 bus;
392 ushort host_no; /* SCSI Host number, if scsi driver not loaded*/
393 u8 fw_version[16]; /* string */
394 u8 serial_number[24]; /* string */
395 u32 ioc_status;
396 u32 bus_phys_width;
397 u32 base_io_addr;
398 u32 rsvd;
399 unsigned int hard_resets; /* driver initiated resets */
400 unsigned int soft_resets; /* ioc, external resets */
401 unsigned int timeouts; /* num timeouts */
402 } hp_host_info_t;
403
404 /* replace ulongs with uints, need to preserve backwards
405 * compatibility.
406 */
407 typedef struct _hp_host_info_rev0 {
408 hp_header_t hdr;
409 u16 vendor;
410 u16 device;
411 u16 subsystem_vendor;
412 u16 subsystem_id;
413 u8 devfn;
414 u8 bus;
415 ushort host_no; /* SCSI Host number, if scsi driver not loaded*/
416 u8 fw_version[16]; /* string */
417 u8 serial_number[24]; /* string */
418 u32 ioc_status;
419 u32 bus_phys_width;
420 u32 base_io_addr;
421 u32 rsvd;
422 unsigned long hard_resets; /* driver initiated resets */
423 unsigned long soft_resets; /* ioc, external resets */
424 unsigned long timeouts; /* num timeouts */
425 } hp_host_info_rev0_t;
426
427 /*
428 * Header:
429 * iocnum required (input)
430 * host required
431 * channel required (bus number)
432 * id required
433 * lun ignored
434 *
435 * All error values between 0 and 0xFFFF in size.
436 */
437 typedef struct _hp_target_info {
438 hp_header_t hdr;
439 u32 parity_errors;
440 u32 phase_errors;
441 u32 select_timeouts;
442 u32 message_rejects;
443 u32 negotiated_speed;
444 u8 negotiated_width;
445 u8 rsvd[7]; /* 8 byte alignment */
446 } hp_target_info_t;
447
448 #define HP_STATUS_OTHER 1
449 #define HP_STATUS_OK 2
450 #define HP_STATUS_FAILED 3
451
452 #define HP_BUS_WIDTH_UNK 1
453 #define HP_BUS_WIDTH_8 2
454 #define HP_BUS_WIDTH_16 3
455 #define HP_BUS_WIDTH_32 4
456
457 #define HP_DEV_SPEED_ASYNC 2
458 #define HP_DEV_SPEED_FAST 3
459 #define HP_DEV_SPEED_ULTRA 4
460 #define HP_DEV_SPEED_ULTRA2 5
461 #define HP_DEV_SPEED_ULTRA160 6
462 #define HP_DEV_SPEED_SCSI1 7
463 #define HP_DEV_SPEED_ULTRA320 8
464
465 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
466
467
468 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
469
470 #endif
471
This page took 0.058458 seconds and 5 git commands to generate.