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