| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | * | 
| Moore, Eric Dean | b6fe4dd | 2005-04-22 18:01:34 -0400 | [diff] [blame] | 8 | *  Copyright (c) 1999-2005 LSI Logic Corporation | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 9 | *  (mailto:mpt_linux_developer@lsil.com) | 
|  | 10 | * | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |  |