123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468 |
- /*
- * linux/drivers/message/fusion/mptioctl.h
- * Fusion MPT misc device (ioctl) driver.
- * For use with PCI chip/adapter(s):
- * LSIFC9xx/LSI409xx Fibre Channel
- * running LSI Fusion MPT (Message Passing Technology) firmware.
- *
- * Copyright (c) 1999-2008 LSI Corporation
- * (mailto:DL-MPTFusionLinux@lsi.com)
- *
- */
- /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
- /*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- NO WARRANTY
- THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
- CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
- LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
- MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
- solely responsible for determining the appropriateness of using and
- distributing the Program and assumes all risks associated with its
- exercise of rights under this Agreement, including but not limited to
- the risks and costs of program errors, damage to or loss of data,
- programs or equipment, and unavailability or interruption of operations.
- DISCLAIMER OF LIABILITY
- NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
- HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
- #ifndef MPTCTL_H_INCLUDED
- #define MPTCTL_H_INCLUDED
- /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
- /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
- /*
- *
- */
- #define MPT_MISCDEV_BASENAME "mptctl"
- #define MPT_MISCDEV_PATHNAME "/dev/" MPT_MISCDEV_BASENAME
- #define MPT_PRODUCT_LENGTH 12
- /*
- * Generic MPT Control IOCTLs and structures
- */
- #define MPT_MAGIC_NUMBER 'm'
- #define MPTRWPERF _IOWR(MPT_MAGIC_NUMBER,0,struct mpt_raw_r_w)
- #define MPTFWDOWNLOAD _IOWR(MPT_MAGIC_NUMBER,15,struct mpt_fw_xfer)
- #define MPTCOMMAND _IOWR(MPT_MAGIC_NUMBER,20,struct mpt_ioctl_command)
- #if defined(__KERNEL__) && defined(CONFIG_COMPAT)
- #define MPTFWDOWNLOAD32 _IOWR(MPT_MAGIC_NUMBER,15,struct mpt_fw_xfer32)
- #define MPTCOMMAND32 _IOWR(MPT_MAGIC_NUMBER,20,struct mpt_ioctl_command32)
- #endif
- #define MPTIOCINFO _IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo)
- #define MPTIOCINFO1 _IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo_rev0)
- #define MPTIOCINFO2 _IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo_rev1)
- #define MPTTARGETINFO _IOWR(MPT_MAGIC_NUMBER,18,struct mpt_ioctl_targetinfo)
- #define MPTTEST _IOWR(MPT_MAGIC_NUMBER,19,struct mpt_ioctl_test)
- #define MPTEVENTQUERY _IOWR(MPT_MAGIC_NUMBER,21,struct mpt_ioctl_eventquery)
- #define MPTEVENTENABLE _IOWR(MPT_MAGIC_NUMBER,22,struct mpt_ioctl_eventenable)
- #define MPTEVENTREPORT _IOWR(MPT_MAGIC_NUMBER,23,struct mpt_ioctl_eventreport)
- #define MPTHARDRESET _IOWR(MPT_MAGIC_NUMBER,24,struct mpt_ioctl_diag_reset)
- #define MPTFWREPLACE _IOWR(MPT_MAGIC_NUMBER,25,struct mpt_ioctl_replace_fw)
- /*
- * SPARC PLATFORM REMARKS:
- * IOCTL data structures that contain pointers
- * will have different sizes in the driver and applications
- * (as the app. will not use 8-byte pointers).
- * Apps should use MPTFWDOWNLOAD and MPTCOMMAND.
- * The driver will convert data from
- * mpt_fw_xfer32 (mpt_ioctl_command32) to mpt_fw_xfer (mpt_ioctl_command)
- * internally.
- *
- * If data structures change size, must handle as in IOCGETINFO.
- */
- struct mpt_fw_xfer {
- unsigned int iocnum; /* IOC unit number */
- unsigned int fwlen;
- void __user *bufp; /* Pointer to firmware buffer */
- };
- #if defined(__KERNEL__) && defined(CONFIG_COMPAT)
- struct mpt_fw_xfer32 {
- unsigned int iocnum;
- unsigned int fwlen;
- u32 bufp;
- };
- #endif /*}*/
- /*
- * IOCTL header structure.
- * iocnum - must be defined.
- * port - must be defined for all IOCTL commands other than MPTIOCINFO
- * maxDataSize - ignored on MPTCOMMAND commands
- * - ignored on MPTFWREPLACE commands
- * - on query commands, reports the maximum number of bytes to be returned
- * to the host driver (count includes the header).
- * That is, set to sizeof(struct mpt_ioctl_iocinfo) for fixed sized commands.
- * Set to sizeof(struct mpt_ioctl_targetinfo) + datasize for variable
- * sized commands. (MPTTARGETINFO, MPTEVENTREPORT)
- */
- typedef struct _mpt_ioctl_header {
- unsigned int iocnum; /* IOC unit number */
- unsigned int port; /* IOC port number */
- int maxDataSize; /* Maximum Num. bytes to transfer on read */
- } mpt_ioctl_header;
- /*
- * Issue a diagnostic reset
- */
- struct mpt_ioctl_diag_reset {
- mpt_ioctl_header hdr;
- };
- /*
- * PCI bus/device/function information structure.
- */
- struct mpt_ioctl_pci_info {
- union {
- struct {
- unsigned int deviceNumber : 5;
- unsigned int functionNumber : 3;
- unsigned int busNumber : 24;
- } bits;
- unsigned int asUlong;
- } u;
- };
- struct mpt_ioctl_pci_info2 {
- union {
- struct {
- unsigned int deviceNumber : 5;
- unsigned int functionNumber : 3;
- unsigned int busNumber : 24;
- } bits;
- unsigned int asUlong;
- } u;
- int segmentID;
- };
- /*
- * Adapter Information Page
- * Read only.
- * Data starts at offset 0xC
- */
- #define MPT_IOCTL_INTERFACE_SCSI (0x00)
- #define MPT_IOCTL_INTERFACE_FC (0x01)
- #define MPT_IOCTL_INTERFACE_FC_IP (0x02)
- #define MPT_IOCTL_INTERFACE_SAS (0x03)
- #define MPT_IOCTL_VERSION_LENGTH (32)
- struct mpt_ioctl_iocinfo {
- mpt_ioctl_header hdr;
- int adapterType; /* SCSI or FCP */
- int port; /* port number */
- int pciId; /* PCI Id. */
- int hwRev; /* hardware revision */
- int subSystemDevice; /* PCI subsystem Device ID */
- int subSystemVendor; /* PCI subsystem Vendor ID */
- int numDevices; /* number of devices */
- int FWVersion; /* FW Version (integer) */
- int BIOSVersion; /* BIOS Version (integer) */
- char driverVersion[MPT_IOCTL_VERSION_LENGTH]; /* Driver Version (string) */
- char busChangeEvent;
- char hostId;
- char rsvd[2];
- struct mpt_ioctl_pci_info2 pciInfo; /* Added Rev 2 */
- };
- struct mpt_ioctl_iocinfo_rev1 {
- mpt_ioctl_header hdr;
- int adapterType; /* SCSI or FCP */
- int port; /* port number */
- int pciId; /* PCI Id. */
- int hwRev; /* hardware revision */
- int subSystemDevice; /* PCI subsystem Device ID */
- int subSystemVendor; /* PCI subsystem Vendor ID */
- int numDevices; /* number of devices */
- int FWVersion; /* FW Version (integer) */
- int BIOSVersion; /* BIOS Version (integer) */
- char driverVersion[MPT_IOCTL_VERSION_LENGTH]; /* Driver Version (string) */
- char busChangeEvent;
- char hostId;
- char rsvd[2];
- struct mpt_ioctl_pci_info pciInfo; /* Added Rev 1 */
- };
- /* Original structure, must always accept these
- * IOCTLs. 4 byte pads can occur based on arch with
- * above structure. Wish to re-align, but cannot.
- */
- struct mpt_ioctl_iocinfo_rev0 {
- mpt_ioctl_header hdr;
- int adapterType; /* SCSI or FCP */
- int port; /* port number */
- int pciId; /* PCI Id. */
- int hwRev; /* hardware revision */
- int subSystemDevice; /* PCI subsystem Device ID */
- int subSystemVendor; /* PCI subsystem Vendor ID */
- int numDevices; /* number of devices */
- int FWVersion; /* FW Version (integer) */
- int BIOSVersion; /* BIOS Version (integer) */
- char driverVersion[MPT_IOCTL_VERSION_LENGTH]; /* Driver Version (string) */
- char busChangeEvent;
- char hostId;
- char rsvd[2];
- };
- /*
- * Device Information Page
- * Report the number of, and ids of, all targets
- * on this IOC. The ids array is a packed structure
- * of the known targetInfo.
- * bits 31-24: reserved
- * 23-16: LUN
- * 15- 8: Bus Number
- * 7- 0: Target ID
- */
- struct mpt_ioctl_targetinfo {
- mpt_ioctl_header hdr;
- int numDevices; /* Num targets on this ioc */
- int targetInfo[1];
- };
- /*
- * Event reporting IOCTL's. These IOCTL's will
- * use the following defines:
- */
- struct mpt_ioctl_eventquery {
- mpt_ioctl_header hdr;
- unsigned short eventEntries;
- unsigned short reserved;
- unsigned int eventTypes;
- };
- struct mpt_ioctl_eventenable {
- mpt_ioctl_header hdr;
- unsigned int eventTypes;
- };
- #ifndef __KERNEL__
- typedef struct {
- uint event;
- uint eventContext;
- uint data[2];
- } MPT_IOCTL_EVENTS;
- #endif
- struct mpt_ioctl_eventreport {
- mpt_ioctl_header hdr;
- MPT_IOCTL_EVENTS eventData[1];
- };
- #define MPT_MAX_NAME 32
- struct mpt_ioctl_test {
- mpt_ioctl_header hdr;
- u8 name[MPT_MAX_NAME];
- int chip_type;
- u8 product [MPT_PRODUCT_LENGTH];
- };
- /* Replace the FW image cached in host driver memory
- * newImageSize - image size in bytes
- * newImage - first byte of the new image
- */
- typedef struct mpt_ioctl_replace_fw {
- mpt_ioctl_header hdr;
- int newImageSize;
- u8 newImage[1];
- } mpt_ioctl_replace_fw_t;
- /* General MPT Pass through data strucutre
- *
- * iocnum
- * timeout - in seconds, command timeout. If 0, set by driver to
- * default value.
- * replyFrameBufPtr - reply location
- * dataInBufPtr - destination for read
- * dataOutBufPtr - data source for write
- * senseDataPtr - sense data location
- * maxReplyBytes - maximum number of reply bytes to be sent to app.
- * dataInSize - num bytes for data transfer in (read)
- * dataOutSize - num bytes for data transfer out (write)
- * dataSgeOffset - offset in words from the start of the request message
- * to the first SGL
- * MF[1];
- *
- * Remark: Some config pages have bi-directional transfer,
- * both a read and a write. The basic structure allows for
- * a bidirectional set up. Normal messages will have one or
- * both of these buffers NULL.
- */
- struct mpt_ioctl_command {
- mpt_ioctl_header hdr;
- int timeout; /* optional (seconds) */
- char __user *replyFrameBufPtr;
- char __user *dataInBufPtr;
- char __user *dataOutBufPtr;
- char __user *senseDataPtr;
- int maxReplyBytes;
- int dataInSize;
- int dataOutSize;
- int maxSenseBytes;
- int dataSgeOffset;
- char MF[1];
- };
- /*
- * SPARC PLATFORM: See earlier remark.
- */
- #if defined(__KERNEL__) && defined(CONFIG_COMPAT)
- struct mpt_ioctl_command32 {
- mpt_ioctl_header hdr;
- int timeout;
- u32 replyFrameBufPtr;
- u32 dataInBufPtr;
- u32 dataOutBufPtr;
- u32 senseDataPtr;
- int maxReplyBytes;
- int dataInSize;
- int dataOutSize;
- int maxSenseBytes;
- int dataSgeOffset;
- char MF[1];
- };
- #endif /*}*/
- /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
- #define CPQFCTS_IOC_MAGIC 'Z'
- #define HP_IOC_MAGIC 'Z'
- #define HP_GETHOSTINFO _IOR(HP_IOC_MAGIC, 20, hp_host_info_t)
- #define HP_GETHOSTINFO1 _IOR(HP_IOC_MAGIC, 20, hp_host_info_rev0_t)
- #define HP_GETTARGETINFO _IOR(HP_IOC_MAGIC, 21, hp_target_info_t)
- typedef struct _hp_header {
- unsigned int iocnum;
- unsigned int host;
- unsigned int channel;
- unsigned int id;
- unsigned int lun;
- } hp_header_t;
- /*
- * Header:
- * iocnum required (input)
- * host ignored
- * channe ignored
- * id ignored
- * lun ignored
- */
- typedef struct _hp_host_info {
- hp_header_t hdr;
- u16 vendor;
- u16 device;
- u16 subsystem_vendor;
- u16 subsystem_id;
- u8 devfn;
- u8 bus;
- ushort host_no; /* SCSI Host number, if scsi driver not loaded*/
- u8 fw_version[16]; /* string */
- u8 serial_number[24]; /* string */
- u32 ioc_status;
- u32 bus_phys_width;
- u32 base_io_addr;
- u32 rsvd;
- unsigned int hard_resets; /* driver initiated resets */
- unsigned int soft_resets; /* ioc, external resets */
- unsigned int timeouts; /* num timeouts */
- } hp_host_info_t;
- /* replace ulongs with uints, need to preserve backwards
- * compatibility.
- */
- typedef struct _hp_host_info_rev0 {
- hp_header_t hdr;
- u16 vendor;
- u16 device;
- u16 subsystem_vendor;
- u16 subsystem_id;
- u8 devfn;
- u8 bus;
- ushort host_no; /* SCSI Host number, if scsi driver not loaded*/
- u8 fw_version[16]; /* string */
- u8 serial_number[24]; /* string */
- u32 ioc_status;
- u32 bus_phys_width;
- u32 base_io_addr;
- u32 rsvd;
- unsigned long hard_resets; /* driver initiated resets */
- unsigned long soft_resets; /* ioc, external resets */
- unsigned long timeouts; /* num timeouts */
- } hp_host_info_rev0_t;
- /*
- * Header:
- * iocnum required (input)
- * host required
- * channel required (bus number)
- * id required
- * lun ignored
- *
- * All error values between 0 and 0xFFFF in size.
- */
- typedef struct _hp_target_info {
- hp_header_t hdr;
- u32 parity_errors;
- u32 phase_errors;
- u32 select_timeouts;
- u32 message_rejects;
- u32 negotiated_speed;
- u8 negotiated_width;
- u8 rsvd[7]; /* 8 byte alignment */
- } hp_target_info_t;
- #define HP_STATUS_OTHER 1
- #define HP_STATUS_OK 2
- #define HP_STATUS_FAILED 3
- #define HP_BUS_WIDTH_UNK 1
- #define HP_BUS_WIDTH_8 2
- #define HP_BUS_WIDTH_16 3
- #define HP_BUS_WIDTH_32 4
- #define HP_DEV_SPEED_ASYNC 2
- #define HP_DEV_SPEED_FAST 3
- #define HP_DEV_SPEED_ULTRA 4
- #define HP_DEV_SPEED_ULTRA2 5
- #define HP_DEV_SPEED_ULTRA160 6
- #define HP_DEV_SPEED_SCSI1 7
- #define HP_DEV_SPEED_ULTRA320 8
- /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
- /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
- #endif
|