xref: /openbmc/linux/drivers/message/fusion/mptctl.h (revision e5451c8f8330e03ad3cfa16048b4daf961af434f)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  *  linux/drivers/message/fusion/mptioctl.h
31da177e4SLinus Torvalds  *      Fusion MPT misc device (ioctl) driver.
41da177e4SLinus Torvalds  *      For use with PCI chip/adapter(s):
51da177e4SLinus Torvalds  *          LSIFC9xx/LSI409xx Fibre Channel
6f36789e2SPrakash, Sathya  *      running LSI Fusion MPT (Message Passing Technology) firmware.
71da177e4SLinus Torvalds  *
8*cddc0ab7SPrakash, Sathya  *  Copyright (c) 1999-2008 LSI Corporation
916d20101SEric Moore  *  (mailto:DL-MPTFusionLinux@lsi.com)
101da177e4SLinus Torvalds  *
111da177e4SLinus Torvalds  */
121da177e4SLinus Torvalds /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
131da177e4SLinus Torvalds /*
141da177e4SLinus Torvalds     This program is free software; you can redistribute it and/or modify
151da177e4SLinus Torvalds     it under the terms of the GNU General Public License as published by
161da177e4SLinus Torvalds     the Free Software Foundation; version 2 of the License.
171da177e4SLinus Torvalds 
181da177e4SLinus Torvalds     This program is distributed in the hope that it will be useful,
191da177e4SLinus Torvalds     but WITHOUT ANY WARRANTY; without even the implied warranty of
201da177e4SLinus Torvalds     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
211da177e4SLinus Torvalds     GNU General Public License for more details.
221da177e4SLinus Torvalds 
231da177e4SLinus Torvalds     NO WARRANTY
241da177e4SLinus Torvalds     THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
251da177e4SLinus Torvalds     CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
261da177e4SLinus Torvalds     LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
271da177e4SLinus Torvalds     MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
281da177e4SLinus Torvalds     solely responsible for determining the appropriateness of using and
291da177e4SLinus Torvalds     distributing the Program and assumes all risks associated with its
301da177e4SLinus Torvalds     exercise of rights under this Agreement, including but not limited to
311da177e4SLinus Torvalds     the risks and costs of program errors, damage to or loss of data,
321da177e4SLinus Torvalds     programs or equipment, and unavailability or interruption of operations.
331da177e4SLinus Torvalds 
341da177e4SLinus Torvalds     DISCLAIMER OF LIABILITY
351da177e4SLinus Torvalds     NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
361da177e4SLinus Torvalds     DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
371da177e4SLinus Torvalds     DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
381da177e4SLinus Torvalds     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
391da177e4SLinus Torvalds     TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
401da177e4SLinus Torvalds     USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
411da177e4SLinus Torvalds     HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES
421da177e4SLinus Torvalds 
431da177e4SLinus Torvalds     You should have received a copy of the GNU General Public License
441da177e4SLinus Torvalds     along with this program; if not, write to the Free Software
451da177e4SLinus Torvalds     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
461da177e4SLinus Torvalds */
471da177e4SLinus Torvalds 
481da177e4SLinus Torvalds #ifndef MPTCTL_H_INCLUDED
491da177e4SLinus Torvalds #define MPTCTL_H_INCLUDED
501da177e4SLinus Torvalds /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
511da177e4SLinus Torvalds 
521da177e4SLinus Torvalds 
531da177e4SLinus Torvalds 
541da177e4SLinus Torvalds /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
551da177e4SLinus Torvalds /*
561da177e4SLinus Torvalds  *
571da177e4SLinus Torvalds  */
581da177e4SLinus Torvalds #define MPT_MISCDEV_BASENAME            "mptctl"
591da177e4SLinus Torvalds #define MPT_MISCDEV_PATHNAME            "/dev/" MPT_MISCDEV_BASENAME
601da177e4SLinus Torvalds 
611da177e4SLinus Torvalds #define MPT_PRODUCT_LENGTH              12
621da177e4SLinus Torvalds 
631da177e4SLinus Torvalds /*
641da177e4SLinus Torvalds  *  Generic MPT Control IOCTLs and structures
651da177e4SLinus Torvalds  */
661da177e4SLinus Torvalds #define MPT_MAGIC_NUMBER	'm'
671da177e4SLinus Torvalds 
681da177e4SLinus Torvalds #define MPTRWPERF		_IOWR(MPT_MAGIC_NUMBER,0,struct mpt_raw_r_w)
691da177e4SLinus Torvalds 
701da177e4SLinus Torvalds #define MPTFWDOWNLOAD		_IOWR(MPT_MAGIC_NUMBER,15,struct mpt_fw_xfer)
711da177e4SLinus Torvalds #define MPTCOMMAND		_IOWR(MPT_MAGIC_NUMBER,20,struct mpt_ioctl_command)
721da177e4SLinus Torvalds 
731da177e4SLinus Torvalds #if defined(__KERNEL__) && defined(CONFIG_COMPAT)
741da177e4SLinus Torvalds #define MPTFWDOWNLOAD32		_IOWR(MPT_MAGIC_NUMBER,15,struct mpt_fw_xfer32)
751da177e4SLinus Torvalds #define MPTCOMMAND32		_IOWR(MPT_MAGIC_NUMBER,20,struct mpt_ioctl_command32)
761da177e4SLinus Torvalds #endif
771da177e4SLinus Torvalds 
781da177e4SLinus Torvalds #define MPTIOCINFO		_IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo)
791da177e4SLinus Torvalds #define MPTIOCINFO1		_IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo_rev0)
801da177e4SLinus Torvalds #define MPTIOCINFO2		_IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo_rev1)
811da177e4SLinus Torvalds #define MPTTARGETINFO		_IOWR(MPT_MAGIC_NUMBER,18,struct mpt_ioctl_targetinfo)
821da177e4SLinus Torvalds #define MPTTEST			_IOWR(MPT_MAGIC_NUMBER,19,struct mpt_ioctl_test)
831da177e4SLinus Torvalds #define MPTEVENTQUERY		_IOWR(MPT_MAGIC_NUMBER,21,struct mpt_ioctl_eventquery)
841da177e4SLinus Torvalds #define MPTEVENTENABLE		_IOWR(MPT_MAGIC_NUMBER,22,struct mpt_ioctl_eventenable)
851da177e4SLinus Torvalds #define MPTEVENTREPORT		_IOWR(MPT_MAGIC_NUMBER,23,struct mpt_ioctl_eventreport)
861da177e4SLinus Torvalds #define MPTHARDRESET		_IOWR(MPT_MAGIC_NUMBER,24,struct mpt_ioctl_diag_reset)
871da177e4SLinus Torvalds #define MPTFWREPLACE		_IOWR(MPT_MAGIC_NUMBER,25,struct mpt_ioctl_replace_fw)
881da177e4SLinus Torvalds 
891da177e4SLinus Torvalds /*
901da177e4SLinus Torvalds  * SPARC PLATFORM REMARKS:
911da177e4SLinus Torvalds  * IOCTL data structures that contain pointers
921da177e4SLinus Torvalds  * will have different sizes in the driver and applications
931da177e4SLinus Torvalds  * (as the app. will not use 8-byte pointers).
941da177e4SLinus Torvalds  * Apps should use MPTFWDOWNLOAD and MPTCOMMAND.
951da177e4SLinus Torvalds  * The driver will convert data from
961da177e4SLinus Torvalds  * mpt_fw_xfer32 (mpt_ioctl_command32) to mpt_fw_xfer (mpt_ioctl_command)
971da177e4SLinus Torvalds  * internally.
981da177e4SLinus Torvalds  *
991da177e4SLinus Torvalds  * If data structures change size, must handle as in IOCGETINFO.
1001da177e4SLinus Torvalds  */
1011da177e4SLinus Torvalds struct mpt_fw_xfer {
1021da177e4SLinus Torvalds 	unsigned int	 iocnum;	/* IOC unit number */
1031da177e4SLinus Torvalds 	unsigned int	 fwlen;
1041da177e4SLinus Torvalds 	void		__user *bufp;	/* Pointer to firmware buffer */
1051da177e4SLinus Torvalds };
1061da177e4SLinus Torvalds 
1071da177e4SLinus Torvalds #if defined(__KERNEL__) && defined(CONFIG_COMPAT)
1081da177e4SLinus Torvalds struct mpt_fw_xfer32 {
1091da177e4SLinus Torvalds 	unsigned int iocnum;
1101da177e4SLinus Torvalds 	unsigned int fwlen;
1111da177e4SLinus Torvalds 	u32 bufp;
1121da177e4SLinus Torvalds };
1131da177e4SLinus Torvalds #endif	/*}*/
1141da177e4SLinus Torvalds 
1151da177e4SLinus Torvalds /*
1161da177e4SLinus Torvalds  *  IOCTL header structure.
1171da177e4SLinus Torvalds  *  iocnum - must be defined.
1181da177e4SLinus Torvalds  *  port - must be defined for all IOCTL commands other than MPTIOCINFO
1191da177e4SLinus Torvalds  *  maxDataSize - ignored on MPTCOMMAND commands
1201da177e4SLinus Torvalds  *		- ignored on MPTFWREPLACE commands
1211da177e4SLinus Torvalds  *		- on query commands, reports the maximum number of bytes to be returned
1221da177e4SLinus Torvalds  *		  to the host driver (count includes the header).
1231da177e4SLinus Torvalds  *		  That is, set to sizeof(struct mpt_ioctl_iocinfo) for fixed sized commands.
1241da177e4SLinus Torvalds  *		  Set to sizeof(struct mpt_ioctl_targetinfo) + datasize for variable
1251da177e4SLinus Torvalds  *			sized commands. (MPTTARGETINFO, MPTEVENTREPORT)
1261da177e4SLinus Torvalds  */
1271da177e4SLinus Torvalds typedef struct _mpt_ioctl_header {
1281da177e4SLinus Torvalds 	unsigned int	 iocnum;	/* IOC unit number */
1291da177e4SLinus Torvalds 	unsigned int	 port;		/* IOC port number */
1301da177e4SLinus Torvalds 	int		 maxDataSize;	/* Maximum Num. bytes to transfer on read */
1311da177e4SLinus Torvalds } mpt_ioctl_header;
1321da177e4SLinus Torvalds 
1331da177e4SLinus Torvalds /*
1341da177e4SLinus Torvalds  * Issue a diagnostic reset
1351da177e4SLinus Torvalds  */
1361da177e4SLinus Torvalds struct mpt_ioctl_diag_reset {
1371da177e4SLinus Torvalds 	mpt_ioctl_header hdr;
1381da177e4SLinus Torvalds };
1391da177e4SLinus Torvalds 
1401da177e4SLinus Torvalds 
1411da177e4SLinus Torvalds /*
1421da177e4SLinus Torvalds  *  PCI bus/device/function information structure.
1431da177e4SLinus Torvalds  */
1441da177e4SLinus Torvalds struct mpt_ioctl_pci_info {
1451da177e4SLinus Torvalds 	union {
1461da177e4SLinus Torvalds 		struct {
1471da177e4SLinus Torvalds 			unsigned int  deviceNumber   :  5;
1481da177e4SLinus Torvalds 			unsigned int  functionNumber :  3;
1491da177e4SLinus Torvalds 			unsigned int  busNumber      : 24;
1501da177e4SLinus Torvalds 		} bits;
1511da177e4SLinus Torvalds 		unsigned int  asUlong;
1521da177e4SLinus Torvalds 	} u;
1531da177e4SLinus Torvalds };
1541da177e4SLinus Torvalds 
1551da177e4SLinus Torvalds struct mpt_ioctl_pci_info2 {
1561da177e4SLinus Torvalds 	union {
1571da177e4SLinus Torvalds 		struct {
1581da177e4SLinus Torvalds 			unsigned int  deviceNumber   :  5;
1591da177e4SLinus Torvalds 			unsigned int  functionNumber :  3;
1601da177e4SLinus Torvalds 			unsigned int  busNumber      : 24;
1611da177e4SLinus Torvalds 		} bits;
1621da177e4SLinus Torvalds 		unsigned int  asUlong;
1631da177e4SLinus Torvalds 	} u;
1641da177e4SLinus Torvalds   int segmentID;
1651da177e4SLinus Torvalds };
1661da177e4SLinus Torvalds 
1671da177e4SLinus Torvalds /*
1681da177e4SLinus Torvalds  *  Adapter Information Page
1691da177e4SLinus Torvalds  *  Read only.
1701da177e4SLinus Torvalds  *  Data starts at offset 0xC
1711da177e4SLinus Torvalds  */
1721da177e4SLinus Torvalds #define MPT_IOCTL_INTERFACE_SCSI	(0x00)
1739cc1cfbcSMoore, Eric #define MPT_IOCTL_INTERFACE_FC		(0x01)
1749cc1cfbcSMoore, Eric #define MPT_IOCTL_INTERFACE_FC_IP	(0x02)
1759cc1cfbcSMoore, Eric #define MPT_IOCTL_INTERFACE_SAS		(0x03)
1761da177e4SLinus Torvalds #define MPT_IOCTL_VERSION_LENGTH	(32)
1771da177e4SLinus Torvalds 
1781da177e4SLinus Torvalds struct mpt_ioctl_iocinfo {
1791da177e4SLinus Torvalds 	mpt_ioctl_header hdr;
1801da177e4SLinus Torvalds 	int		 adapterType;	/* SCSI or FCP */
1811da177e4SLinus Torvalds 	int		 port;		/* port number */
1821da177e4SLinus Torvalds 	int		 pciId;		/* PCI Id. */
1831da177e4SLinus Torvalds 	int		 hwRev;		/* hardware revision */
1841da177e4SLinus Torvalds 	int		 subSystemDevice;	/* PCI subsystem Device ID */
1851da177e4SLinus Torvalds 	int		 subSystemVendor;	/* PCI subsystem Vendor ID */
1861da177e4SLinus Torvalds 	int		 numDevices;		/* number of devices */
1871da177e4SLinus Torvalds 	int		 FWVersion;		/* FW Version (integer) */
1881da177e4SLinus Torvalds 	int		 BIOSVersion;		/* BIOS Version (integer) */
1891da177e4SLinus Torvalds 	char		 driverVersion[MPT_IOCTL_VERSION_LENGTH];	/* Driver Version (string) */
1901da177e4SLinus Torvalds 	char		 busChangeEvent;
1911da177e4SLinus Torvalds 	char		 hostId;
1921da177e4SLinus Torvalds 	char		 rsvd[2];
1931da177e4SLinus Torvalds 	struct mpt_ioctl_pci_info2  pciInfo; /* Added Rev 2 */
1941da177e4SLinus Torvalds };
1951da177e4SLinus Torvalds 
1961da177e4SLinus Torvalds struct mpt_ioctl_iocinfo_rev1 {
1971da177e4SLinus Torvalds 	mpt_ioctl_header hdr;
1981da177e4SLinus Torvalds 	int		 adapterType;	/* SCSI or FCP */
1991da177e4SLinus Torvalds 	int		 port;		/* port number */
2001da177e4SLinus Torvalds 	int		 pciId;		/* PCI Id. */
2011da177e4SLinus Torvalds 	int		 hwRev;		/* hardware revision */
2021da177e4SLinus Torvalds 	int		 subSystemDevice;	/* PCI subsystem Device ID */
2031da177e4SLinus Torvalds 	int		 subSystemVendor;	/* PCI subsystem Vendor ID */
2041da177e4SLinus Torvalds 	int		 numDevices;		/* number of devices */
2051da177e4SLinus Torvalds 	int		 FWVersion;		/* FW Version (integer) */
2061da177e4SLinus Torvalds 	int		 BIOSVersion;		/* BIOS Version (integer) */
2071da177e4SLinus Torvalds 	char		 driverVersion[MPT_IOCTL_VERSION_LENGTH];	/* Driver Version (string) */
2081da177e4SLinus Torvalds 	char		 busChangeEvent;
2091da177e4SLinus Torvalds 	char		 hostId;
2101da177e4SLinus Torvalds 	char		 rsvd[2];
2111da177e4SLinus Torvalds 	struct mpt_ioctl_pci_info  pciInfo; /* Added Rev 1 */
2121da177e4SLinus Torvalds };
2131da177e4SLinus Torvalds 
2141da177e4SLinus Torvalds /* Original structure, must always accept these
2151da177e4SLinus Torvalds  * IOCTLs. 4 byte pads can occur based on arch with
2161da177e4SLinus Torvalds  * above structure. Wish to re-align, but cannot.
2171da177e4SLinus Torvalds  */
2181da177e4SLinus Torvalds struct mpt_ioctl_iocinfo_rev0 {
2191da177e4SLinus Torvalds 	mpt_ioctl_header hdr;
2201da177e4SLinus Torvalds 	int		 adapterType;	/* SCSI or FCP */
2211da177e4SLinus Torvalds 	int		 port;		/* port number */
2221da177e4SLinus Torvalds 	int		 pciId;		/* PCI Id. */
2231da177e4SLinus Torvalds 	int		 hwRev;		/* hardware revision */
2241da177e4SLinus Torvalds 	int		 subSystemDevice;	/* PCI subsystem Device ID */
2251da177e4SLinus Torvalds 	int		 subSystemVendor;	/* PCI subsystem Vendor ID */
2261da177e4SLinus Torvalds 	int		 numDevices;		/* number of devices */
2271da177e4SLinus Torvalds 	int		 FWVersion;		/* FW Version (integer) */
2281da177e4SLinus Torvalds 	int		 BIOSVersion;		/* BIOS Version (integer) */
2291da177e4SLinus Torvalds 	char		 driverVersion[MPT_IOCTL_VERSION_LENGTH];	/* Driver Version (string) */
2301da177e4SLinus Torvalds 	char		 busChangeEvent;
2311da177e4SLinus Torvalds 	char		 hostId;
2321da177e4SLinus Torvalds 	char		 rsvd[2];
2331da177e4SLinus Torvalds };
2341da177e4SLinus Torvalds 
2351da177e4SLinus Torvalds /*
2361da177e4SLinus Torvalds  * Device Information Page
2371da177e4SLinus Torvalds  * Report the number of, and ids of, all targets
2381da177e4SLinus Torvalds  * on this IOC.  The ids array is a packed structure
2391da177e4SLinus Torvalds  * of the known targetInfo.
2401da177e4SLinus Torvalds  * bits 31-24: reserved
2411da177e4SLinus Torvalds  *      23-16: LUN
2421da177e4SLinus Torvalds  *      15- 8: Bus Number
2431da177e4SLinus Torvalds  *       7- 0: Target ID
2441da177e4SLinus Torvalds  */
2451da177e4SLinus Torvalds struct mpt_ioctl_targetinfo {
2461da177e4SLinus Torvalds 	mpt_ioctl_header hdr;
2471da177e4SLinus Torvalds 	int		 numDevices;	/* Num targets on this ioc */
2481da177e4SLinus Torvalds 	int		 targetInfo[1];
2491da177e4SLinus Torvalds };
2501da177e4SLinus Torvalds 
2511da177e4SLinus Torvalds 
2521da177e4SLinus Torvalds /*
2531da177e4SLinus Torvalds  * Event reporting IOCTL's.  These IOCTL's will
2541da177e4SLinus Torvalds  * use the following defines:
2551da177e4SLinus Torvalds  */
2561da177e4SLinus Torvalds struct mpt_ioctl_eventquery {
2571da177e4SLinus Torvalds 	mpt_ioctl_header hdr;
2581da177e4SLinus Torvalds 	unsigned short	 eventEntries;
2591da177e4SLinus Torvalds 	unsigned short	 reserved;
2601da177e4SLinus Torvalds 	unsigned int	 eventTypes;
2611da177e4SLinus Torvalds };
2621da177e4SLinus Torvalds 
2631da177e4SLinus Torvalds struct mpt_ioctl_eventenable {
2641da177e4SLinus Torvalds 	mpt_ioctl_header hdr;
2651da177e4SLinus Torvalds 	unsigned int	 eventTypes;
2661da177e4SLinus Torvalds };
2671da177e4SLinus Torvalds 
2681da177e4SLinus Torvalds #ifndef __KERNEL__
2691da177e4SLinus Torvalds typedef struct {
2701da177e4SLinus Torvalds 	uint	event;
2711da177e4SLinus Torvalds 	uint	eventContext;
2721da177e4SLinus Torvalds 	uint	data[2];
2731da177e4SLinus Torvalds } MPT_IOCTL_EVENTS;
2741da177e4SLinus Torvalds #endif
2751da177e4SLinus Torvalds 
2761da177e4SLinus Torvalds struct mpt_ioctl_eventreport {
2771da177e4SLinus Torvalds 	mpt_ioctl_header	hdr;
2781da177e4SLinus Torvalds 	MPT_IOCTL_EVENTS	eventData[1];
2791da177e4SLinus Torvalds };
2801da177e4SLinus Torvalds 
2811da177e4SLinus Torvalds #define MPT_MAX_NAME	32
2821da177e4SLinus Torvalds struct mpt_ioctl_test {
2831da177e4SLinus Torvalds 	mpt_ioctl_header hdr;
2841da177e4SLinus Torvalds 	u8		 name[MPT_MAX_NAME];
2851da177e4SLinus Torvalds 	int		 chip_type;
2861da177e4SLinus Torvalds 	u8		 product [MPT_PRODUCT_LENGTH];
2871da177e4SLinus Torvalds };
2881da177e4SLinus Torvalds 
2891da177e4SLinus Torvalds /* Replace the FW image cached in host driver memory
2901da177e4SLinus Torvalds  * newImageSize - image size in bytes
2911da177e4SLinus Torvalds  * newImage - first byte of the new image
2921da177e4SLinus Torvalds  */
2931da177e4SLinus Torvalds typedef struct mpt_ioctl_replace_fw {
2941da177e4SLinus Torvalds 	mpt_ioctl_header hdr;
2951da177e4SLinus Torvalds 	int		 newImageSize;
2961da177e4SLinus Torvalds 	u8		 newImage[1];
2971da177e4SLinus Torvalds } mpt_ioctl_replace_fw_t;
2981da177e4SLinus Torvalds 
2991da177e4SLinus Torvalds /* General MPT Pass through data strucutre
3001da177e4SLinus Torvalds  *
3011da177e4SLinus Torvalds  * iocnum
3021da177e4SLinus Torvalds  * timeout - in seconds, command timeout. If 0, set by driver to
3031da177e4SLinus Torvalds  *		default value.
3041da177e4SLinus Torvalds  * replyFrameBufPtr - reply location
3051da177e4SLinus Torvalds  * dataInBufPtr - destination for read
3061da177e4SLinus Torvalds  * dataOutBufPtr - data source for write
3071da177e4SLinus Torvalds  * senseDataPtr - sense data location
3081da177e4SLinus Torvalds  * maxReplyBytes - maximum number of reply bytes to be sent to app.
3091da177e4SLinus Torvalds  * dataInSize - num bytes for data transfer in (read)
3101da177e4SLinus Torvalds  * dataOutSize - num bytes for data transfer out (write)
3111da177e4SLinus Torvalds  * dataSgeOffset - offset in words from the start of the request message
3121da177e4SLinus Torvalds  *		to the first SGL
3131da177e4SLinus Torvalds  * MF[1];
3141da177e4SLinus Torvalds  *
3151da177e4SLinus Torvalds  * Remark:  Some config pages have bi-directional transfer,
3161da177e4SLinus Torvalds  * both a read and a write. The basic structure allows for
3171da177e4SLinus Torvalds  * a bidirectional set up. Normal messages will have one or
3181da177e4SLinus Torvalds  * both of these buffers NULL.
3191da177e4SLinus Torvalds  */
3201da177e4SLinus Torvalds struct mpt_ioctl_command {
3211da177e4SLinus Torvalds 	mpt_ioctl_header hdr;
3221da177e4SLinus Torvalds 	int		timeout;	/* optional (seconds) */
3231da177e4SLinus Torvalds 	char		__user *replyFrameBufPtr;
3241da177e4SLinus Torvalds 	char		__user *dataInBufPtr;
3251da177e4SLinus Torvalds 	char		__user *dataOutBufPtr;
3261da177e4SLinus Torvalds 	char		__user *senseDataPtr;
3271da177e4SLinus Torvalds 	int		maxReplyBytes;
3281da177e4SLinus Torvalds 	int		dataInSize;
3291da177e4SLinus Torvalds 	int		dataOutSize;
3301da177e4SLinus Torvalds 	int		maxSenseBytes;
3311da177e4SLinus Torvalds 	int		dataSgeOffset;
3321da177e4SLinus Torvalds 	char		MF[1];
3331da177e4SLinus Torvalds };
3341da177e4SLinus Torvalds 
3351da177e4SLinus Torvalds /*
3361da177e4SLinus Torvalds  * SPARC PLATFORM: See earlier remark.
3371da177e4SLinus Torvalds  */
3381da177e4SLinus Torvalds #if defined(__KERNEL__) && defined(CONFIG_COMPAT)
3391da177e4SLinus Torvalds struct mpt_ioctl_command32 {
3401da177e4SLinus Torvalds 	mpt_ioctl_header hdr;
3411da177e4SLinus Torvalds 	int	timeout;
3421da177e4SLinus Torvalds 	u32	replyFrameBufPtr;
3431da177e4SLinus Torvalds 	u32	dataInBufPtr;
3441da177e4SLinus Torvalds 	u32	dataOutBufPtr;
3451da177e4SLinus Torvalds 	u32	senseDataPtr;
3461da177e4SLinus Torvalds 	int	maxReplyBytes;
3471da177e4SLinus Torvalds 	int	dataInSize;
3481da177e4SLinus Torvalds 	int	dataOutSize;
3491da177e4SLinus Torvalds 	int	maxSenseBytes;
3501da177e4SLinus Torvalds 	int	dataSgeOffset;
3511da177e4SLinus Torvalds 	char	MF[1];
3521da177e4SLinus Torvalds };
3531da177e4SLinus Torvalds #endif	/*}*/
3541da177e4SLinus Torvalds 
3551da177e4SLinus Torvalds 
3561da177e4SLinus Torvalds /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
3571da177e4SLinus Torvalds 
3581da177e4SLinus Torvalds #define CPQFCTS_IOC_MAGIC 'Z'
3591da177e4SLinus Torvalds #define HP_IOC_MAGIC 'Z'
3601da177e4SLinus Torvalds #define HP_GETHOSTINFO		_IOR(HP_IOC_MAGIC, 20, hp_host_info_t)
3611da177e4SLinus Torvalds #define HP_GETHOSTINFO1		_IOR(HP_IOC_MAGIC, 20, hp_host_info_rev0_t)
3621da177e4SLinus Torvalds #define HP_GETTARGETINFO	_IOR(HP_IOC_MAGIC, 21, hp_target_info_t)
3631da177e4SLinus Torvalds 
3641da177e4SLinus Torvalds typedef struct _hp_header {
3651da177e4SLinus Torvalds 	unsigned int iocnum;
3661da177e4SLinus Torvalds 	unsigned int host;
3671da177e4SLinus Torvalds 	unsigned int channel;
3681da177e4SLinus Torvalds 	unsigned int id;
3691da177e4SLinus Torvalds 	unsigned int lun;
3701da177e4SLinus Torvalds } hp_header_t;
3711da177e4SLinus Torvalds 
3721da177e4SLinus Torvalds /*
3731da177e4SLinus Torvalds  *  Header:
3741da177e4SLinus Torvalds  *  iocnum 	required (input)
3751da177e4SLinus Torvalds  *  host 	ignored
3761da177e4SLinus Torvalds  *  channe	ignored
3771da177e4SLinus Torvalds  *  id		ignored
3781da177e4SLinus Torvalds  *  lun		ignored
3791da177e4SLinus Torvalds  */
3801da177e4SLinus Torvalds typedef struct _hp_host_info {
3811da177e4SLinus Torvalds 	hp_header_t	 hdr;
3821da177e4SLinus Torvalds 	u16		 vendor;
3831da177e4SLinus Torvalds 	u16		 device;
3841da177e4SLinus Torvalds 	u16		 subsystem_vendor;
3851da177e4SLinus Torvalds 	u16		 subsystem_id;
3861da177e4SLinus Torvalds 	u8		 devfn;
3871da177e4SLinus Torvalds 	u8		 bus;
3881da177e4SLinus Torvalds 	ushort		 host_no;		/* SCSI Host number, if scsi driver not loaded*/
3891da177e4SLinus Torvalds 	u8		 fw_version[16];	/* string */
3901da177e4SLinus Torvalds 	u8		 serial_number[24];	/* string */
3911da177e4SLinus Torvalds 	u32		 ioc_status;
3921da177e4SLinus Torvalds 	u32		 bus_phys_width;
3931da177e4SLinus Torvalds 	u32		 base_io_addr;
3941da177e4SLinus Torvalds 	u32		 rsvd;
3951da177e4SLinus Torvalds 	unsigned int	 hard_resets;		/* driver initiated resets */
3961da177e4SLinus Torvalds 	unsigned int	 soft_resets;		/* ioc, external resets */
3971da177e4SLinus Torvalds 	unsigned int	 timeouts;		/* num timeouts */
3981da177e4SLinus Torvalds } hp_host_info_t;
3991da177e4SLinus Torvalds 
4001da177e4SLinus Torvalds /* replace ulongs with uints, need to preserve backwards
4011da177e4SLinus Torvalds  * compatibility.
4021da177e4SLinus Torvalds  */
4031da177e4SLinus Torvalds typedef struct _hp_host_info_rev0 {
4041da177e4SLinus Torvalds 	hp_header_t	 hdr;
4051da177e4SLinus Torvalds 	u16		 vendor;
4061da177e4SLinus Torvalds 	u16		 device;
4071da177e4SLinus Torvalds 	u16		 subsystem_vendor;
4081da177e4SLinus Torvalds 	u16		 subsystem_id;
4091da177e4SLinus Torvalds 	u8		 devfn;
4101da177e4SLinus Torvalds 	u8		 bus;
4111da177e4SLinus Torvalds 	ushort		 host_no;		/* SCSI Host number, if scsi driver not loaded*/
4121da177e4SLinus Torvalds 	u8		 fw_version[16];	/* string */
4131da177e4SLinus Torvalds 	u8		 serial_number[24];	/* string */
4141da177e4SLinus Torvalds 	u32		 ioc_status;
4151da177e4SLinus Torvalds 	u32		 bus_phys_width;
4161da177e4SLinus Torvalds 	u32		 base_io_addr;
4171da177e4SLinus Torvalds 	u32		 rsvd;
4181da177e4SLinus Torvalds 	unsigned long	 hard_resets;		/* driver initiated resets */
4191da177e4SLinus Torvalds 	unsigned long	 soft_resets;		/* ioc, external resets */
4201da177e4SLinus Torvalds 	unsigned long	 timeouts;		/* num timeouts */
4211da177e4SLinus Torvalds } hp_host_info_rev0_t;
4221da177e4SLinus Torvalds 
4231da177e4SLinus Torvalds /*
4241da177e4SLinus Torvalds  *  Header:
4251da177e4SLinus Torvalds  *  iocnum 	required (input)
4261da177e4SLinus Torvalds  *  host 	required
4271da177e4SLinus Torvalds  *  channel	required	(bus number)
4281da177e4SLinus Torvalds  *  id		required
4291da177e4SLinus Torvalds  *  lun		ignored
4301da177e4SLinus Torvalds  *
4311da177e4SLinus Torvalds  *  All error values between 0 and 0xFFFF in size.
4321da177e4SLinus Torvalds  */
4331da177e4SLinus Torvalds typedef struct _hp_target_info {
4341da177e4SLinus Torvalds 	hp_header_t	 hdr;
4351da177e4SLinus Torvalds 	u32 parity_errors;
4361da177e4SLinus Torvalds 	u32 phase_errors;
4371da177e4SLinus Torvalds 	u32 select_timeouts;
4381da177e4SLinus Torvalds 	u32 message_rejects;
4391da177e4SLinus Torvalds 	u32 negotiated_speed;
4401da177e4SLinus Torvalds 	u8  negotiated_width;
4411da177e4SLinus Torvalds 	u8  rsvd[7];				/* 8 byte alignment */
4421da177e4SLinus Torvalds } hp_target_info_t;
4431da177e4SLinus Torvalds 
4441da177e4SLinus Torvalds #define HP_STATUS_OTHER		1
4451da177e4SLinus Torvalds #define HP_STATUS_OK		2
4461da177e4SLinus Torvalds #define HP_STATUS_FAILED	3
4471da177e4SLinus Torvalds 
4481da177e4SLinus Torvalds #define HP_BUS_WIDTH_UNK	1
4491da177e4SLinus Torvalds #define HP_BUS_WIDTH_8		2
4501da177e4SLinus Torvalds #define HP_BUS_WIDTH_16		3
4511da177e4SLinus Torvalds #define HP_BUS_WIDTH_32		4
4521da177e4SLinus Torvalds 
4531da177e4SLinus Torvalds #define HP_DEV_SPEED_ASYNC	2
4541da177e4SLinus Torvalds #define HP_DEV_SPEED_FAST	3
4551da177e4SLinus Torvalds #define HP_DEV_SPEED_ULTRA	4
4561da177e4SLinus Torvalds #define HP_DEV_SPEED_ULTRA2	5
4571da177e4SLinus Torvalds #define HP_DEV_SPEED_ULTRA160	6
4581da177e4SLinus Torvalds #define HP_DEV_SPEED_SCSI1	7
4591da177e4SLinus Torvalds #define HP_DEV_SPEED_ULTRA320	8
4601da177e4SLinus Torvalds 
4611da177e4SLinus Torvalds /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
4621da177e4SLinus Torvalds 
4631da177e4SLinus Torvalds 
4641da177e4SLinus Torvalds /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
4651da177e4SLinus Torvalds 
4661da177e4SLinus Torvalds #endif
4671da177e4SLinus Torvalds 
468