2.4.25-pre4 SCSI fusion driver
Subsystems (2)
PATCH 1/1 2.4.25-pre4 SCSI fusion driver
hi,
This driver was sent last month by its maintainer, Eric Dean Moore <[email protected]>. It was not updated because James said that this patch should be applied to 2.6 first, but 2.6 has a different driver. So , trying again.
yes, fusion has more bugs. But this is the first step ;-)
-thanks-
Changes since 2.05.05 release {04-14-2003}
(1) Check SCSI Port Page 2 DV bits to either
disable DV or limit DV to Inquiry only checks.
(2) Added sequence to allow the ID of a SAF-TE
device to be stored in IOC Page 4.
(3) The driver now checks NVRAM data and performs Level 1 Domain
Validation only if requested. This limitation can be set on a per-device basis via the LSI Configuration Utility.
(4) The IOC Page 4 read is now done after the SCSI Port Settings
and the SCSI Device Page Headers are obtained.
(5) The return code from pci_map_sg is checked and a FAILED
status is returned if the return code indicates that a failure occurred, as Scatter/Gather entries are being obtained.
(6) If IOCStatus of MPI_IOCSTATUS_STATUS_RESIDUAL_MISMATCH
is received, an error status is returned to the SCSI layer. This status is received when the Fibre Channel firmware detects a CRC error during a data transfer.
(7) If the SCSI layer request an abort or bus reset for an
IO that is not currently running, an error status is returned and the scsi_done call is not performed. This prevents problems when the IO has completed before the abort or bus reset is received.
(8) In a mixed device configuration (Ultra 320 and Non-Ultra
320 devices are present on an HBA channel), code was fixed to prevent
negotiating for QAS on all Ultra 320 devices on that channel.
This keeps the Ultra 320 devices from dominating the SCSI bus, preventing Non-Ultra 320 IOs from executing.
(9) The SenseBufferLength field is properly set when an IOCTL
IO is processed. This allows sense data to be obtained and returned to the application if a Check Condition occurs on the IO.
(10) Zero out unused CDB field on SCSI IO commands.
drivers/message/fusion/isense.c +1 -1
@@ -9,7 +9,7 @@* Written By: Steven J. Ralston * (yes I wrote some of the orig. code back in 1991!) * (mailto:[email protected]) -* (mailto:[email protected]) +* (mailto:[email protected]) * * $Id: isense.c,v 1.34 2003/03/18 22:49:48 pdelaney Exp $ */
drivers/message/fusion/linux_compat.h +2 -2
@@ -267,9 +267,9 @@#endif #if LINUX_VERSION_CODE >=KERNEL_VERSION (2 ,5 ,28 ) -#define mptscsih_sync_irq (_irq) synchronize_irq(_irq) +#define mpt_sync_irq (_irq) synchronize_irq(_irq)#else -#define mptscsih_sync_irq (_irq) synchronize_irq() +#define mpt_sync_irq (_irq) synchronize_irq()#endif #if LINUX_VERSION_CODE >=KERNEL_VERSION (2 ,5 ,58 )
drivers/message/fusion/lsi/mpi_cnfg.h +72 -10
208 lines not on this page · raw message
drivers/message/fusion/lsi/mpi.h +10 -4
@@ -1,12 +1,12 @@/* -* Copyright (c) 2000-2002 LSI Logic Corporation. +* Copyright (c) 2000-2003 LSI Logic Corporation. * * * Name: MPI.H * Title: MPI Message independent structures and definitions * Creation Date: July 27, 2000 * -* MPI.H Version: 01.02.07 +* MPI.H Version: 01.02.10 * * Version History * ---------------
@@ -48,6 +48,10 @@* 05-31-02 01.02.05 Bumped MPI_HEADER_VERSION_UNIT. * 07-12-02 01.02.06 Added define for MPI_FUNCTION_MAILBOX. * 09-16-02 01.02.07 Bumped value for MPI_HEADER_VERSION_UNIT. +* 11-15-02 01.02.08 Added define MPI_IOCSTATUS_TARGET_INVALID_IO_INDEX and +* obsoleted define MPI_IOCSTATUS_TARGET_INVALID_IOCINDEX. +* 04-01-03 01.02.09 New IOCStatus code: MPI_IOCSTATUS_FC_EXCHANGE_CANCELED +* 06-26-03 01.02.10 Bumped MPI_HEADER_VERSION_UNIT value. * -------------------------------------------------------------------------- */
@@ -76,7 +80,7 @@/* Note: The major versions of 0xe0 through 0xff are reserved */ /* versioning for this MPI header set */ -#define MPI_HEADER_VERSION_UNIT (0x09) +#define MPI_HEADER_VERSION_UNIT (0x0C)#define MPI_HEADER_VERSION_DEV (0x00)#define MPI_HEADER_VERSION_UNIT_MASK (0xFF00)#define MPI_HEADER_VERSION_UNIT_SHIFT (8)
@@ -618,7 +622,8 @@#define MPI_IOCSTATUS_TARGET_PRIORITY_IO (0x0060)#define MPI_IOCSTATUS_TARGET_INVALID_PORT (0x0061) -#define MPI_IOCSTATUS_TARGET_INVALID_IOCINDEX (0x0062) +#define MPI_IOCSTATUS_TARGET_INVALID_IOCINDEX (0x0062)/* obsolete */ +#define MPI_IOCSTATUS_TARGET_INVALID_IO_INDEX (0x0062)#define MPI_IOCSTATUS_TARGET_ABORTED (0x0063)#define MPI_IOCSTATUS_TARGET_NO_CONN_RETRYABLE (0x0064)#define MPI_IOCSTATUS_TARGET_NO_CONNECTION (0x0065)
@@ -642,6 +647,7 @@#define MPI_IOCSTATUS_FC_RX_ID_INVALID (0x0067)#define MPI_IOCSTATUS_FC_DID_INVALID (0x0068)#define MPI_IOCSTATUS_FC_NODE_LOGGED_OUT (0x0069) +#define MPI_IOCSTATUS_FC_EXCHANGE_CANCELED (0x006C)/****************************************************************************/ /* LAN values */
drivers/message/fusion/lsi/mpi_init.h +7 -1
@@ -6,7 +6,7 @@* Title: MPI initiator mode messages and structures * Creation Date: June 8, 2000 * -* MPI_INIT.H Version: 01.02.05 +* MPI_INIT.H Version: 01.02.07 * * Version History * ---------------
@@ -31,6 +31,8 @@* 10-04-01 01.02.04 Added defines for SEP request Action field. * 05-31-02 01.02.05 Added MPI_SCSIIO_MSGFLGS_CMD_DETERMINES_DATA_DIR define * for SCSI IO requests. +* 11-15-02 01.02.06 Added special extended SCSI Status defines for FCP. +* 06-26-03 01.02.07 Added MPI_SCSI_STATUS_FCPEXT_UNASSIGNED define. * -------------------------------------------------------------------------- */
@@ -153,6 +155,10 @@#define MPI_SCSI_STATUS_TASK_SET_FULL (0x28)#define MPI_SCSI_STATUS_ACA_ACTIVE (0x30) +#define MPI_SCSI_STATUS_FCPEXT_DEVICE_LOGGED_OUT (0x80) +#define MPI_SCSI_STATUS_FCPEXT_NO_LINK (0x81) +#define MPI_SCSI_STATUS_FCPEXT_UNASSIGNED (0x82) +/* SCSI IO Reply SCSIState values */
drivers/message/fusion/lsi/mpi_ioc.h +10 -2
@@ -1,12 +1,12 @@/* -* Copyright (c) 2000-2002 LSI Logic Corporation. +* Copyright (c) 2000-2003 LSI Logic Corporation. * * * Name: MPI_IOC.H * Title: MPI IOC, Port, Event, FW Download, and FW Upload messages * Creation Date: August 11, 2000 * -* MPI_IOC.H Version: 01.02.06 +* MPI_IOC.H Version: 01.02.08 * * Version History * ---------------
@@ -55,6 +55,8 @@* 05-31-02 01.02.06 Added define for * MPI_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID. * Added AliasIndex to EVENT_DATA_LOGOUT structure. +* 04-01-03 01.02.07 Added defines for MPI_FW_HEADER_SIGNATURE_. +* 06-26-03 01.02.08 Added new values to the product family defines. * -------------------------------------------------------------------------- */
@@ -654,6 +656,10 @@#define MPI_FW_HEADER_PID_TYPE_SCSI (0x0000)#define MPI_FW_HEADER_PID_TYPE_FC (0x1000) +#define MPI_FW_HEADER_SIGNATURE_0 (0x5AEAA55A) +#define MPI_FW_HEADER_SIGNATURE_1 (0xA55AEAA5) +#define MPI_FW_HEADER_SIGNATURE_2 (0x5AA55AEA) +#define MPI_FW_HEADER_PID_PROD_MASK (0x0F00)#define MPI_FW_HEADER_PID_PROD_INITIATOR_SCSI (0x0100)#define MPI_FW_HEADER_PID_PROD_TARGET_INITIATOR_SCSI (0x0200)
@@ -673,6 +679,8 @@#define MPI_FW_HEADER_PID_FAMILY_1020C0_SCSI (0x0008)#define MPI_FW_HEADER_PID_FAMILY_1035A0_SCSI (0x0009)#define MPI_FW_HEADER_PID_FAMILY_1035B0_SCSI (0x000A) +#define MPI_FW_HEADER_PID_FAMILY_1030TA0_SCSI (0x000B) +#define MPI_FW_HEADER_PID_FAMILY_1020TA0_SCSI (0x000C)#define MPI_FW_HEADER_PID_FAMILY_909_FC (0x0000)#define MPI_FW_HEADER_PID_FAMILY_919_FC (0x0001)#define MPI_FW_HEADER_PID_FAMILY_919X_FC (0x0002)
drivers/message/fusion/lsi/mpi_raid.h +9 -2
@@ -1,12 +1,12 @@/* -* Copyright (c) 2001-2002 LSI Logic Corporation. +* Copyright (c) 2001-2003 LSI Logic Corporation. * * * Name: MPI_RAID.H * Title: MPI RAID message and structures * Creation Date: February 27, 2001 * -* MPI_RAID.H Version: 01.02.07 +* MPI_RAID.H Version: 01.02.09 * * Version History * ---------------
@@ -25,6 +25,9 @@* MPI_RAID_ACTION_INACTIVATE_VOLUME, and * MPI_RAID_ACTION_ADATA_INACTIVATE_ALL. * 07-12-02 01.02.07 Added structures for Mailbox request and reply. +* 11-15-02 01.02.08 Added missing MsgContext field to MSG_MAILBOX_REQUEST. +* 04-01-03 01.02.09 New action data option flag for +* MPI_RAID_ACTION_DELETE_VOLUME. * -------------------------------------------------------------------------- */
@@ -90,6 +93,9 @@#define MPI_RAID_ACTION_ADATA_KEEP_PHYS_DISKS (0x00000000)#define MPI_RAID_ACTION_ADATA_DEL_PHYS_DISKS (0x00000001) +#define MPI_RAID_ACTION_ADATA_KEEP_LBA0 (0x00000000) +#define MPI_RAID_ACTION_ADATA_ZERO_LBA0 (0x00000002) +/* ActionDataWord defines for use with MPI_RAID_ACTION_ACTIVATE_VOLUME action */ #define MPI_RAID_ACTION_ADATA_INACTIVATE_ALL (0x00000001)
@@ -195,6 +201,7 @@U16 Reserved2;U8 Reserved3;U8 MsgFlags; +U32 MsgContext;U8 Command[10 ];U16 Reserved4;SGE_IO_UNION SGL ;
drivers/message/fusion/lsi/mpi_targ.h +9 -3
@@ -1,12 +1,12 @@/* -* Copyright (c) 2000-2002 LSI Logic Corporation. +* Copyright (c) 2000-2003 LSI Logic Corporation. * * * Name: MPI_TARG.H * Title: MPI Target mode messages and structures * Creation Date: June 22, 2000 * -* MPI_TARG.H Version: 01.02.07 +* MPI_TARG.H Version: 01.02.09 * * Version History * ---------------
@@ -41,6 +41,8 @@* Added AliasIndex field to MPI_TARGET_FCP_CMD_BUFFER. * 09-16-02 01.02.07 Added flags for confirmed completion. * Added PRIORITY_REASON_TARGET_BUSY. +* 11-15-02 01.02.08 Added AliasID field to MPI_TARGET_SCSI_SPI_CMD_BUFFER. +* 04-01-03 01.02.09 Added OptionalOxid field to MPI_TARGET_FCP_CMD_BUFFER. * -------------------------------------------------------------------------- */
@@ -171,7 +173,7 @@U32 FcpDl;/* 1Ch */ U8 AliasIndex;/* 20h */ U8 Reserved1;/* 21h */ -U16 Reserved2;/* 22h */ +U16 OptionalOxid;/* 22h */ } MPI_TARGET_FCP_CMD_BUFFER, MPI_POINTER PTR_MPI_TARGET_FCP_CMD_BUFFER, MpiTargetFcpCmdBuffer, MPI_POINTER pMpiTargetFcpCmdBuffer;
@@ -190,6 +192,10 @@U8 TaskManagementFlags;/* 12h */ U8 AdditionalCDBLength;/* 13h */ U8 CDB [16 ];/* 14h */ +/* Alias ID */ +U8 AliasID;/* 24h */ +U8 Reserved1;/* 25h */ +U16 Reserved2;/* 26h */ }MPI_TARGET_SCSI_SPI_CMD_BUFFER , MPI_POINTER PTR_MPI_TARGET_SCSI_SPI_CMD_BUFFER, MpiTargetScsiSpiCmdBuffer, MPI_POINTER pMpiTargetScsiSpiCmdBuffer;
drivers/message/fusion/lsi/mpi_tool.h +129 -0
129 lines not on this page · raw message
drivers/message/fusion/mptbase.c +82 -22
212 lines not on this page · raw message
drivers/message/fusion/mptbase.h +15 -6
@@ -11,7 +11,7 @@* Copyright (c) 1999-2002 LSI Logic Corporation * Originally By: Steven J. Ralston * (mailto:[email protected]) -* (mailto:[email protected]) +* (mailto:[email protected]) * * $Id: mptbase.h,v 1.149 2003/05/07 14:08:31 pdelaney Exp $ */
@@ -77,11 +77,11 @@#endif #ifndef COPYRIGHT -#define COPYRIGHT "Copyright (c) 1999-2002 " MODULEAUTHOR +#define COPYRIGHT "Copyright (c) 1999-2003 " MODULEAUTHOR#endif -#define MPT_LINUX_VERSION_COMMON "2.05.05+" -#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-2.05.05+" +#define MPT_LINUX_VERSION_COMMON "2.05.10" +#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-2.05.10"#define WHAT_MAGIC_STRING "@" "(" "#" ")"#define show_mptmod_ver (s,ver) \
@@ -127,6 +127,8 @@#define MPT_MAX_FRAME_SIZE 128#define MPT_DEFAULT_FRAME_SIZE 128 +#define MPT_REPLY_FRAME_SIZE 0x40/* Must be a multiple of 8 */ +#define MPT_SG_REQ_128_SCALE 1#define MPT_SG_REQ_96_SCALE 2#define MPT_SG_REQ_64_SCALE 4
@@ -245,6 +247,7 @@MPIHeader_t hdr;SCSIIORequest_t scsireq;SCSIIOReply_t sreply; +ConfigReply_t configreply;MPIDefaultReply_t reply;MPT_FRAME_TRACKER frame; } u;
@@ -400,7 +403,7 @@u32 num_luns;//--- LUN split here? u32 luns;/* Max LUNs is 32 */ -u8 inq_data[SCSI_STD_INQUIRY_BYTES ];/* 36 */ +u8 inq_data[8 ];u8 pad0[4 ];u8 inq00_data[20 ];u8 pad1[4 ];
@@ -430,6 +433,7 @@#define MPT_TARGET_FLAGS_VALID_INQUIRY 0x02#define MPT_TARGET_FLAGS_Q_YES 0x08#define MPT_TARGET_FLAGS_VALID_56 0x10 +#define MPT_TARGET_FLAGS_SAF_TE_ISSUED 0x20#endif #define MPT_TARGET_NO_NEGO_WIDE 0x01
@@ -529,8 +533,12 @@/* #define MPT_SCSICFG_BLK_NEGO 0x10 WriteSDP1 with WDTR and SDTR disabled */ typedef struct _ScsiCfgData { + u32 PortFlags; int *nvram; /* table of device NVRAM values */ IOCPage3_t *pIocPg3; /* table of physical disks */ + IOCPage4_t *pIocPg4; /* SEP devices addressing */ + dma_addr_t IocPg4_dma; /* Phys Addr of IOCPage4 data */ + int IocPg4Sz; /* IOCPage4 size */ u8 dvStatus[MPT_MAX_SCSI_DEVICES]; int isRaid; /* bit field, 1 if RAID */ u8 minSyncFactor; /* 0xFF if async */
@@ -544,7 +552,8 @@u8 dvScheduled;/* 1 if scheduled */ u8 forceDv;/* 1 to force DV scheduling */ u8 noQas;/* Disable QAS for this adapter */ -u8 rsvd[2 ]; +u8 Saf_Te;/* 1 to force all Processors as SAF-TE if Inquiry data length is too short to check for SAF-TE */ +u8 rsvd[1 ]; } ScsiCfgData; typedef struct _fw_image {
drivers/message/fusion/mptctl.c +11 -2
@@ -32,7 +32,7 @@* Copyright (c) 1999-2002 LSI Logic Corporation * Originally By: Steven J. Ralston, Noah Romer * (mailto:[email protected]) -* (mailto:[email protected]) +* (mailto:[email protected]) * * $Id: mptctl.c,v 1.66 2003/05/07 14:08:32 pdelaney Exp $ */
@@ -1329,6 +1329,7 @@/* Set the Version Strings. */ strncpy (karg.driverVersion,MPT_LINUX_PACKAGE_NAME ,MPT_IOCTL_VERSION_LENGTH ); + karg.driverVersion[MPT_IOCTL_VERSION_LENGTH -1 ]='\0' ; karg.busChangeEvent =0 ; karg.hostId = ioc->pfacts[port].PortSCSIID;
@@ -1529,7 +1530,9 @@ karg.chip_type = ioc->chip_type;#endif strncpy (karg.name, ioc->name,MPT_MAX_NAME ); + karg.name[MPT_MAX_NAME -1 ]='\0' ;strncpy (karg.product, ioc->prod_name,MPT_PRODUCT_LENGTH ); + karg.product[MPT_PRODUCT_LENGTH -1 ]='\0' ;/* Copy the data from kernel memory to user memory */
@@ -1950,6 +1953,8 @@*/ if (karg.maxSenseBytes >MPT_SENSE_BUFFER_SIZE ) pScsiReq->SenseBufferLength =MPT_SENSE_BUFFER_SIZE ; +else + pScsiReq->SenseBufferLength = karg.maxSenseBytes; pScsiReq->SenseBufferLowAddr = cpu_to_le32(ioc->sense_buf_low_dma
@@ -2011,6 +2016,8 @@*/ if (karg.maxSenseBytes >MPT_SENSE_BUFFER_SIZE ) pScsiReq->SenseBufferLength =MPT_SENSE_BUFFER_SIZE ; +else + pScsiReq->SenseBufferLength = karg.maxSenseBytes; pScsiReq->SenseBufferLowAddr = cpu_to_le32(ioc->sense_buf_low_dma
@@ -2471,8 +2478,10 @@ cfg.physAddr = buf_dma;if (mpt_config (ioc, &cfg) ==0 ) {ManufacturingPage0_t *pdata = (ManufacturingPage0_t *) pbuf; -if (strlen (pdata->BoardTracerNumber) >1 ) +if (strlen (pdata->BoardTracerNumber) >1 ) {strncpy (karg.serial_number, pdata->BoardTracerNumber,24 ); + karg.serial_number[24 -1 ]='\0' ; + } }pci_free_consistent (ioc->pcidev, hdr.PageLength *4 , pbuf, buf_dma); pbuf =NULL ;
drivers/message/fusion/mptctl.h +1 -1
@@ -18,7 +18,7 @@* Copyright (c) 1999-2002 LSI Logic Corporation * Originally By: Steven J. Ralston * (mailto:[email protected]) -* (mailto:[email protected]) +* (mailto:[email protected]) * * $Id: mptctl.h,v 1.14 2003/03/18 22:49:51 pdelaney Exp $ */
drivers/message/fusion/mptscsih.c +181 -80
527 lines not on this page · raw message
drivers/message/fusion/mptscsih.h +4 -1
@@ -18,7 +18,7 @@* Copyright (c) 1999-2002 LSI Logic Corporation * Originally By: Steven J. Ralston * (mailto:[email protected]) -* (mailto:[email protected]) +* (mailto:[email protected]) * * $Id: mptscsih.h,v 1.1.2.2 2003/05/07 14:08:35 pdelaney Exp $ */
@@ -116,12 +116,14 @@#define MPTSCSIH_DOMAIN_VALIDATION 1#define MPTSCSIH_MAX_WIDTH 1#define MPTSCSIH_MIN_SYNC 0x08 +#define MPTSCSIH_SAF_TE 0struct mptscsih_driver_setup {u8 dv;u8 max_width;u8 min_sync_fac; +u8 saf_te; };
@@ -130,6 +132,7 @@MPTSCSIH_DOMAIN_VALIDATION , \MPTSCSIH_MAX_WIDTH , \MPTSCSIH_MIN_SYNC , \ + MPTSCSIH_SAF_TE, \ }
drivers/message/fusion/scsi3.h +1 -1
@@ -7,7 +7,7 @@* Copyright (c) 1996-2002 Steven J. Ralston * Written By: Steven J. Ralston (19960517) * (mailto:[email protected]) -* (mailto:[email protected]) +* (mailto:[email protected]) * * $Id: scsi3.h,v 1.9 2002/02/27 18:45:02 sralston Exp $ */