diff options
Diffstat (limited to 'drivers/message')
-rw-r--r-- | drivers/message/fusion/lsi/mpi.h | 19 | ||||
-rw-r--r-- | drivers/message/fusion/lsi/mpi_cnfg.h | 85 | ||||
-rw-r--r-- | drivers/message/fusion/lsi/mpi_history.txt | 67 | ||||
-rw-r--r-- | drivers/message/fusion/lsi/mpi_init.h | 203 | ||||
-rw-r--r-- | drivers/message/fusion/lsi/mpi_ioc.h | 11 | ||||
-rw-r--r-- | drivers/message/fusion/lsi/mpi_targ.h | 74 | ||||
-rw-r--r-- | drivers/message/fusion/mptbase.c | 321 | ||||
-rw-r--r-- | drivers/message/fusion/mptbase.h | 5 | ||||
-rw-r--r-- | drivers/message/fusion/mptctl.c | 14 | ||||
-rw-r--r-- | drivers/message/fusion/mptscsih.c | 140 | ||||
-rw-r--r-- | drivers/message/fusion/mptspi.c | 6 |
11 files changed, 686 insertions, 259 deletions
diff --git a/drivers/message/fusion/lsi/mpi.h b/drivers/message/fusion/lsi/mpi.h index 9f98334e5076..b61e3d175070 100644 --- a/drivers/message/fusion/lsi/mpi.h +++ b/drivers/message/fusion/lsi/mpi.h | |||
@@ -6,7 +6,7 @@ | |||
6 | * Title: MPI Message independent structures and definitions | 6 | * Title: MPI Message independent structures and definitions |
7 | * Creation Date: July 27, 2000 | 7 | * Creation Date: July 27, 2000 |
8 | * | 8 | * |
9 | * mpi.h Version: 01.05.07 | 9 | * mpi.h Version: 01.05.08 |
10 | * | 10 | * |
11 | * Version History | 11 | * Version History |
12 | * --------------- | 12 | * --------------- |
@@ -71,6 +71,9 @@ | |||
71 | * 03-11-05 01.05.07 Removed function codes for SCSI IO 32 and | 71 | * 03-11-05 01.05.07 Removed function codes for SCSI IO 32 and |
72 | * TargetAssistExtended requests. | 72 | * TargetAssistExtended requests. |
73 | * Removed EEDP IOCStatus codes. | 73 | * Removed EEDP IOCStatus codes. |
74 | * 06-24-05 01.05.08 Added function codes for SCSI IO 32 and | ||
75 | * TargetAssistExtended requests. | ||
76 | * Added EEDP IOCStatus codes. | ||
74 | * -------------------------------------------------------------------------- | 77 | * -------------------------------------------------------------------------- |
75 | */ | 78 | */ |
76 | 79 | ||
@@ -101,7 +104,7 @@ | |||
101 | /* Note: The major versions of 0xe0 through 0xff are reserved */ | 104 | /* Note: The major versions of 0xe0 through 0xff are reserved */ |
102 | 105 | ||
103 | /* versioning for this MPI header set */ | 106 | /* versioning for this MPI header set */ |
104 | #define MPI_HEADER_VERSION_UNIT (0x09) | 107 | #define MPI_HEADER_VERSION_UNIT (0x0A) |
105 | #define MPI_HEADER_VERSION_DEV (0x00) | 108 | #define MPI_HEADER_VERSION_DEV (0x00) |
106 | #define MPI_HEADER_VERSION_UNIT_MASK (0xFF00) | 109 | #define MPI_HEADER_VERSION_UNIT_MASK (0xFF00) |
107 | #define MPI_HEADER_VERSION_UNIT_SHIFT (8) | 110 | #define MPI_HEADER_VERSION_UNIT_SHIFT (8) |
@@ -292,10 +295,13 @@ | |||
292 | #define MPI_FUNCTION_DIAG_BUFFER_POST (0x1D) | 295 | #define MPI_FUNCTION_DIAG_BUFFER_POST (0x1D) |
293 | #define MPI_FUNCTION_DIAG_RELEASE (0x1E) | 296 | #define MPI_FUNCTION_DIAG_RELEASE (0x1E) |
294 | 297 | ||
298 | #define MPI_FUNCTION_SCSI_IO_32 (0x1F) | ||
299 | |||
295 | #define MPI_FUNCTION_LAN_SEND (0x20) | 300 | #define MPI_FUNCTION_LAN_SEND (0x20) |
296 | #define MPI_FUNCTION_LAN_RECEIVE (0x21) | 301 | #define MPI_FUNCTION_LAN_RECEIVE (0x21) |
297 | #define MPI_FUNCTION_LAN_RESET (0x22) | 302 | #define MPI_FUNCTION_LAN_RESET (0x22) |
298 | 303 | ||
304 | #define MPI_FUNCTION_TARGET_ASSIST_EXTENDED (0x23) | ||
299 | #define MPI_FUNCTION_TARGET_CMD_BUF_BASE_POST (0x24) | 305 | #define MPI_FUNCTION_TARGET_CMD_BUF_BASE_POST (0x24) |
300 | #define MPI_FUNCTION_TARGET_CMD_BUF_LIST_POST (0x25) | 306 | #define MPI_FUNCTION_TARGET_CMD_BUF_LIST_POST (0x25) |
301 | 307 | ||
@@ -681,6 +687,15 @@ typedef struct _MSG_DEFAULT_REPLY | |||
681 | #define MPI_IOCSTATUS_SCSI_EXT_TERMINATED (0x004C) | 687 | #define MPI_IOCSTATUS_SCSI_EXT_TERMINATED (0x004C) |
682 | 688 | ||
683 | /****************************************************************************/ | 689 | /****************************************************************************/ |
690 | /* For use by SCSI Initiator and SCSI Target end-to-end data protection */ | ||
691 | /****************************************************************************/ | ||
692 | |||
693 | #define MPI_IOCSTATUS_EEDP_GUARD_ERROR (0x004D) | ||
694 | #define MPI_IOCSTATUS_EEDP_REF_TAG_ERROR (0x004E) | ||
695 | #define MPI_IOCSTATUS_EEDP_APP_TAG_ERROR (0x004F) | ||
696 | |||
697 | |||
698 | /****************************************************************************/ | ||
684 | /* SCSI Target values */ | 699 | /* SCSI Target values */ |
685 | /****************************************************************************/ | 700 | /****************************************************************************/ |
686 | 701 | ||
diff --git a/drivers/message/fusion/lsi/mpi_cnfg.h b/drivers/message/fusion/lsi/mpi_cnfg.h index 15b12b06799d..d8339896f734 100644 --- a/drivers/message/fusion/lsi/mpi_cnfg.h +++ b/drivers/message/fusion/lsi/mpi_cnfg.h | |||
@@ -6,7 +6,7 @@ | |||
6 | * Title: MPI Config message, structures, and Pages | 6 | * Title: MPI Config message, structures, and Pages |
7 | * Creation Date: July 27, 2000 | 7 | * Creation Date: July 27, 2000 |
8 | * | 8 | * |
9 | * mpi_cnfg.h Version: 01.05.08 | 9 | * mpi_cnfg.h Version: 01.05.09 |
10 | * | 10 | * |
11 | * Version History | 11 | * Version History |
12 | * --------------- | 12 | * --------------- |
@@ -232,6 +232,23 @@ | |||
232 | * New physical mapping mode in SAS IO Unit Page 2. | 232 | * New physical mapping mode in SAS IO Unit Page 2. |
233 | * Added CONFIG_PAGE_SAS_ENCLOSURE_0. | 233 | * Added CONFIG_PAGE_SAS_ENCLOSURE_0. |
234 | * Added Slot and Enclosure fields to SAS Device Page 0. | 234 | * Added Slot and Enclosure fields to SAS Device Page 0. |
235 | * 06-24-05 01.05.09 Added EEDP defines to IOC Page 1. | ||
236 | * Added more RAID type defines to IOC Page 2. | ||
237 | * Added Port Enable Delay settings to BIOS Page 1. | ||
238 | * Added Bad Block Table Full define to RAID Volume Page 0. | ||
239 | * Added Previous State defines to RAID Physical Disk | ||
240 | * Page 0. | ||
241 | * Added Max Sata Targets define for DiscoveryStatus field | ||
242 | * of SAS IO Unit Page 0. | ||
243 | * Added Device Self Test to Control Flags of SAS IO Unit | ||
244 | * Page 1. | ||
245 | * Added Direct Attach Starting Slot Number define for SAS | ||
246 | * IO Unit Page 2. | ||
247 | * Added new fields in SAS Device Page 2 for enclosure | ||
248 | * mapping. | ||
249 | * Added OwnerDevHandle and Flags field to SAS PHY Page 0. | ||
250 | * Added IOC GPIO Flags define to SAS Enclosure Page 0. | ||
251 | * Fixed the value for MPI_SAS_IOUNIT1_CONTROL_DEV_SATA_SUPPORT. | ||
235 | * -------------------------------------------------------------------------- | 252 | * -------------------------------------------------------------------------- |
236 | */ | 253 | */ |
237 | 254 | ||
@@ -477,6 +494,7 @@ typedef struct _MSG_CONFIG_REPLY | |||
477 | #define MPI_MANUFACTPAGE_DEVICEID_FC929X (0x0626) | 494 | #define MPI_MANUFACTPAGE_DEVICEID_FC929X (0x0626) |
478 | #define MPI_MANUFACTPAGE_DEVICEID_FC939X (0x0642) | 495 | #define MPI_MANUFACTPAGE_DEVICEID_FC939X (0x0642) |
479 | #define MPI_MANUFACTPAGE_DEVICEID_FC949X (0x0640) | 496 | #define MPI_MANUFACTPAGE_DEVICEID_FC949X (0x0640) |
497 | #define MPI_MANUFACTPAGE_DEVICEID_FC949ES (0x0646) | ||
480 | /* SCSI */ | 498 | /* SCSI */ |
481 | #define MPI_MANUFACTPAGE_DEVID_53C1030 (0x0030) | 499 | #define MPI_MANUFACTPAGE_DEVID_53C1030 (0x0030) |
482 | #define MPI_MANUFACTPAGE_DEVID_53C1030ZC (0x0031) | 500 | #define MPI_MANUFACTPAGE_DEVID_53C1030ZC (0x0031) |
@@ -769,9 +787,13 @@ typedef struct _CONFIG_PAGE_IOC_1 | |||
769 | } CONFIG_PAGE_IOC_1, MPI_POINTER PTR_CONFIG_PAGE_IOC_1, | 787 | } CONFIG_PAGE_IOC_1, MPI_POINTER PTR_CONFIG_PAGE_IOC_1, |
770 | IOCPage1_t, MPI_POINTER pIOCPage1_t; | 788 | IOCPage1_t, MPI_POINTER pIOCPage1_t; |
771 | 789 | ||
772 | #define MPI_IOCPAGE1_PAGEVERSION (0x02) | 790 | #define MPI_IOCPAGE1_PAGEVERSION (0x03) |
773 | 791 | ||
774 | /* defines for the Flags field */ | 792 | /* defines for the Flags field */ |
793 | #define MPI_IOCPAGE1_EEDP_MODE_MASK (0x07000000) | ||
794 | #define MPI_IOCPAGE1_EEDP_MODE_OFF (0x00000000) | ||
795 | #define MPI_IOCPAGE1_EEDP_MODE_T10 (0x01000000) | ||
796 | #define MPI_IOCPAGE1_EEDP_MODE_LSI_1 (0x02000000) | ||
775 | #define MPI_IOCPAGE1_INITIATOR_CONTEXT_REPLY_DISABLE (0x00000010) | 797 | #define MPI_IOCPAGE1_INITIATOR_CONTEXT_REPLY_DISABLE (0x00000010) |
776 | #define MPI_IOCPAGE1_REPLY_COALESCING (0x00000001) | 798 | #define MPI_IOCPAGE1_REPLY_COALESCING (0x00000001) |
777 | 799 | ||
@@ -795,6 +817,11 @@ typedef struct _CONFIG_PAGE_IOC_2_RAID_VOL | |||
795 | #define MPI_RAID_VOL_TYPE_IS (0x00) | 817 | #define MPI_RAID_VOL_TYPE_IS (0x00) |
796 | #define MPI_RAID_VOL_TYPE_IME (0x01) | 818 | #define MPI_RAID_VOL_TYPE_IME (0x01) |
797 | #define MPI_RAID_VOL_TYPE_IM (0x02) | 819 | #define MPI_RAID_VOL_TYPE_IM (0x02) |
820 | #define MPI_RAID_VOL_TYPE_RAID_5 (0x03) | ||
821 | #define MPI_RAID_VOL_TYPE_RAID_6 (0x04) | ||
822 | #define MPI_RAID_VOL_TYPE_RAID_10 (0x05) | ||
823 | #define MPI_RAID_VOL_TYPE_RAID_50 (0x06) | ||
824 | #define MPI_RAID_VOL_TYPE_UNKNOWN (0xFF) | ||
798 | 825 | ||
799 | /* IOC Page 2 Volume Flags values */ | 826 | /* IOC Page 2 Volume Flags values */ |
800 | 827 | ||
@@ -820,13 +847,17 @@ typedef struct _CONFIG_PAGE_IOC_2 | |||
820 | } CONFIG_PAGE_IOC_2, MPI_POINTER PTR_CONFIG_PAGE_IOC_2, | 847 | } CONFIG_PAGE_IOC_2, MPI_POINTER PTR_CONFIG_PAGE_IOC_2, |
821 | IOCPage2_t, MPI_POINTER pIOCPage2_t; | 848 | IOCPage2_t, MPI_POINTER pIOCPage2_t; |
822 | 849 | ||
823 | #define MPI_IOCPAGE2_PAGEVERSION (0x02) | 850 | #define MPI_IOCPAGE2_PAGEVERSION (0x03) |
824 | 851 | ||
825 | /* IOC Page 2 Capabilities flags */ | 852 | /* IOC Page 2 Capabilities flags */ |
826 | 853 | ||
827 | #define MPI_IOCPAGE2_CAP_FLAGS_IS_SUPPORT (0x00000001) | 854 | #define MPI_IOCPAGE2_CAP_FLAGS_IS_SUPPORT (0x00000001) |
828 | #define MPI_IOCPAGE2_CAP_FLAGS_IME_SUPPORT (0x00000002) | 855 | #define MPI_IOCPAGE2_CAP_FLAGS_IME_SUPPORT (0x00000002) |
829 | #define MPI_IOCPAGE2_CAP_FLAGS_IM_SUPPORT (0x00000004) | 856 | #define MPI_IOCPAGE2_CAP_FLAGS_IM_SUPPORT (0x00000004) |
857 | #define MPI_IOCPAGE2_CAP_FLAGS_RAID_5_SUPPORT (0x00000008) | ||
858 | #define MPI_IOCPAGE2_CAP_FLAGS_RAID_6_SUPPORT (0x00000010) | ||
859 | #define MPI_IOCPAGE2_CAP_FLAGS_RAID_10_SUPPORT (0x00000020) | ||
860 | #define MPI_IOCPAGE2_CAP_FLAGS_RAID_50_SUPPORT (0x00000040) | ||
830 | #define MPI_IOCPAGE2_CAP_FLAGS_SES_SUPPORT (0x20000000) | 861 | #define MPI_IOCPAGE2_CAP_FLAGS_SES_SUPPORT (0x20000000) |
831 | #define MPI_IOCPAGE2_CAP_FLAGS_SAFTE_SUPPORT (0x40000000) | 862 | #define MPI_IOCPAGE2_CAP_FLAGS_SAFTE_SUPPORT (0x40000000) |
832 | #define MPI_IOCPAGE2_CAP_FLAGS_CROSS_CHANNEL_SUPPORT (0x80000000) | 863 | #define MPI_IOCPAGE2_CAP_FLAGS_CROSS_CHANNEL_SUPPORT (0x80000000) |
@@ -945,7 +976,7 @@ typedef struct _CONFIG_PAGE_BIOS_1 | |||
945 | } CONFIG_PAGE_BIOS_1, MPI_POINTER PTR_CONFIG_PAGE_BIOS_1, | 976 | } CONFIG_PAGE_BIOS_1, MPI_POINTER PTR_CONFIG_PAGE_BIOS_1, |
946 | BIOSPage1_t, MPI_POINTER pBIOSPage1_t; | 977 | BIOSPage1_t, MPI_POINTER pBIOSPage1_t; |
947 | 978 | ||
948 | #define MPI_BIOSPAGE1_PAGEVERSION (0x01) | 979 | #define MPI_BIOSPAGE1_PAGEVERSION (0x02) |
949 | 980 | ||
950 | /* values for the BiosOptions field */ | 981 | /* values for the BiosOptions field */ |
951 | #define MPI_BIOSPAGE1_OPTIONS_SPI_ENABLE (0x00000400) | 982 | #define MPI_BIOSPAGE1_OPTIONS_SPI_ENABLE (0x00000400) |
@@ -954,6 +985,8 @@ typedef struct _CONFIG_PAGE_BIOS_1 | |||
954 | #define MPI_BIOSPAGE1_OPTIONS_DISABLE_BIOS (0x00000001) | 985 | #define MPI_BIOSPAGE1_OPTIONS_DISABLE_BIOS (0x00000001) |
955 | 986 | ||
956 | /* values for the IOCSettings field */ | 987 | /* values for the IOCSettings field */ |
988 | #define MPI_BIOSPAGE1_IOCSET_MASK_PORT_ENABLE_DELAY (0x00F00000) | ||
989 | #define MPI_BIOSPAGE1_IOCSET_SHIFT_PORT_ENABLE_DELAY (20) | ||
957 | #define MPI_BIOSPAGE1_IOCSET_MASK_BOOT_PREFERENCE (0x00030000) | 990 | #define MPI_BIOSPAGE1_IOCSET_MASK_BOOT_PREFERENCE (0x00030000) |
958 | #define MPI_BIOSPAGE1_IOCSET_ENCLOSURE_SLOT_BOOT (0x00000000) | 991 | #define MPI_BIOSPAGE1_IOCSET_ENCLOSURE_SLOT_BOOT (0x00000000) |
959 | #define MPI_BIOSPAGE1_IOCSET_SAS_ADDRESS_BOOT (0x00010000) | 992 | #define MPI_BIOSPAGE1_IOCSET_SAS_ADDRESS_BOOT (0x00010000) |
@@ -1167,6 +1200,7 @@ typedef struct _CONFIG_PAGE_BIOS_2 | |||
1167 | #define MPI_BIOSPAGE2_FORM_PCI_SLOT_NUMBER (0x03) | 1200 | #define MPI_BIOSPAGE2_FORM_PCI_SLOT_NUMBER (0x03) |
1168 | #define MPI_BIOSPAGE2_FORM_FC_WWN (0x04) | 1201 | #define MPI_BIOSPAGE2_FORM_FC_WWN (0x04) |
1169 | #define MPI_BIOSPAGE2_FORM_SAS_WWN (0x05) | 1202 | #define MPI_BIOSPAGE2_FORM_SAS_WWN (0x05) |
1203 | #define MPI_BIOSPAGE2_FORM_ENCLOSURE_SLOT (0x06) | ||
1170 | 1204 | ||
1171 | 1205 | ||
1172 | /**************************************************************************** | 1206 | /**************************************************************************** |
@@ -1957,11 +1991,11 @@ typedef struct _RAID_VOL0_STATUS | |||
1957 | RaidVol0Status_t, MPI_POINTER pRaidVol0Status_t; | 1991 | RaidVol0Status_t, MPI_POINTER pRaidVol0Status_t; |
1958 | 1992 | ||
1959 | /* RAID Volume Page 0 VolumeStatus defines */ | 1993 | /* RAID Volume Page 0 VolumeStatus defines */ |
1960 | |||
1961 | #define MPI_RAIDVOL0_STATUS_FLAG_ENABLED (0x01) | 1994 | #define MPI_RAIDVOL0_STATUS_FLAG_ENABLED (0x01) |
1962 | #define MPI_RAIDVOL0_STATUS_FLAG_QUIESCED (0x02) | 1995 | #define MPI_RAIDVOL0_STATUS_FLAG_QUIESCED (0x02) |
1963 | #define MPI_RAIDVOL0_STATUS_FLAG_RESYNC_IN_PROGRESS (0x04) | 1996 | #define MPI_RAIDVOL0_STATUS_FLAG_RESYNC_IN_PROGRESS (0x04) |
1964 | #define MPI_RAIDVOL0_STATUS_FLAG_VOLUME_INACTIVE (0x08) | 1997 | #define MPI_RAIDVOL0_STATUS_FLAG_VOLUME_INACTIVE (0x08) |
1998 | #define MPI_RAIDVOL0_STATUS_FLAG_BAD_BLOCK_TABLE_FULL (0x10) | ||
1965 | 1999 | ||
1966 | #define MPI_RAIDVOL0_STATUS_STATE_OPTIMAL (0x00) | 2000 | #define MPI_RAIDVOL0_STATUS_STATE_OPTIMAL (0x00) |
1967 | #define MPI_RAIDVOL0_STATUS_STATE_DEGRADED (0x01) | 2001 | #define MPI_RAIDVOL0_STATUS_STATE_DEGRADED (0x01) |
@@ -2025,7 +2059,7 @@ typedef struct _CONFIG_PAGE_RAID_VOL_0 | |||
2025 | } CONFIG_PAGE_RAID_VOL_0, MPI_POINTER PTR_CONFIG_PAGE_RAID_VOL_0, | 2059 | } CONFIG_PAGE_RAID_VOL_0, MPI_POINTER PTR_CONFIG_PAGE_RAID_VOL_0, |
2026 | RaidVolumePage0_t, MPI_POINTER pRaidVolumePage0_t; | 2060 | RaidVolumePage0_t, MPI_POINTER pRaidVolumePage0_t; |
2027 | 2061 | ||
2028 | #define MPI_RAIDVOLPAGE0_PAGEVERSION (0x04) | 2062 | #define MPI_RAIDVOLPAGE0_PAGEVERSION (0x05) |
2029 | 2063 | ||
2030 | /* values for RAID Volume Page 0 InactiveStatus field */ | 2064 | /* values for RAID Volume Page 0 InactiveStatus field */ |
2031 | #define MPI_RAIDVOLPAGE0_UNKNOWN_INACTIVE (0x00) | 2065 | #define MPI_RAIDVOLPAGE0_UNKNOWN_INACTIVE (0x00) |
@@ -2104,6 +2138,8 @@ typedef struct _RAID_PHYS_DISK0_STATUS | |||
2104 | #define MPI_PHYSDISK0_STATUS_FLAG_OUT_OF_SYNC (0x01) | 2138 | #define MPI_PHYSDISK0_STATUS_FLAG_OUT_OF_SYNC (0x01) |
2105 | #define MPI_PHYSDISK0_STATUS_FLAG_QUIESCED (0x02) | 2139 | #define MPI_PHYSDISK0_STATUS_FLAG_QUIESCED (0x02) |
2106 | #define MPI_PHYSDISK0_STATUS_FLAG_INACTIVE_VOLUME (0x04) | 2140 | #define MPI_PHYSDISK0_STATUS_FLAG_INACTIVE_VOLUME (0x04) |
2141 | #define MPI_PHYSDISK0_STATUS_FLAG_OPTIMAL_PREVIOUS (0x00) | ||
2142 | #define MPI_PHYSDISK0_STATUS_FLAG_NOT_OPTIMAL_PREVIOUS (0x08) | ||
2107 | 2143 | ||
2108 | #define MPI_PHYSDISK0_STATUS_ONLINE (0x00) | 2144 | #define MPI_PHYSDISK0_STATUS_ONLINE (0x00) |
2109 | #define MPI_PHYSDISK0_STATUS_MISSING (0x01) | 2145 | #define MPI_PHYSDISK0_STATUS_MISSING (0x01) |
@@ -2132,7 +2168,7 @@ typedef struct _CONFIG_PAGE_RAID_PHYS_DISK_0 | |||
2132 | } CONFIG_PAGE_RAID_PHYS_DISK_0, MPI_POINTER PTR_CONFIG_PAGE_RAID_PHYS_DISK_0, | 2168 | } CONFIG_PAGE_RAID_PHYS_DISK_0, MPI_POINTER PTR_CONFIG_PAGE_RAID_PHYS_DISK_0, |
2133 | RaidPhysDiskPage0_t, MPI_POINTER pRaidPhysDiskPage0_t; | 2169 | RaidPhysDiskPage0_t, MPI_POINTER pRaidPhysDiskPage0_t; |
2134 | 2170 | ||
2135 | #define MPI_RAIDPHYSDISKPAGE0_PAGEVERSION (0x01) | 2171 | #define MPI_RAIDPHYSDISKPAGE0_PAGEVERSION (0x02) |
2136 | 2172 | ||
2137 | 2173 | ||
2138 | typedef struct _RAID_PHYS_DISK1_PATH | 2174 | typedef struct _RAID_PHYS_DISK1_PATH |
@@ -2263,7 +2299,7 @@ typedef struct _CONFIG_PAGE_SAS_IO_UNIT_0 | |||
2263 | } CONFIG_PAGE_SAS_IO_UNIT_0, MPI_POINTER PTR_CONFIG_PAGE_SAS_IO_UNIT_0, | 2299 | } CONFIG_PAGE_SAS_IO_UNIT_0, MPI_POINTER PTR_CONFIG_PAGE_SAS_IO_UNIT_0, |
2264 | SasIOUnitPage0_t, MPI_POINTER pSasIOUnitPage0_t; | 2300 | SasIOUnitPage0_t, MPI_POINTER pSasIOUnitPage0_t; |
2265 | 2301 | ||
2266 | #define MPI_SASIOUNITPAGE0_PAGEVERSION (0x02) | 2302 | #define MPI_SASIOUNITPAGE0_PAGEVERSION (0x03) |
2267 | 2303 | ||
2268 | /* values for SAS IO Unit Page 0 PortFlags */ | 2304 | /* values for SAS IO Unit Page 0 PortFlags */ |
2269 | #define MPI_SAS_IOUNIT0_PORT_FLAGS_DISCOVERY_IN_PROGRESS (0x08) | 2305 | #define MPI_SAS_IOUNIT0_PORT_FLAGS_DISCOVERY_IN_PROGRESS (0x08) |
@@ -2299,6 +2335,7 @@ typedef struct _CONFIG_PAGE_SAS_IO_UNIT_0 | |||
2299 | #define MPI_SAS_IOUNIT0_DS_SUBTRACTIVE_LINK (0x00000200) | 2335 | #define MPI_SAS_IOUNIT0_DS_SUBTRACTIVE_LINK (0x00000200) |
2300 | #define MPI_SAS_IOUNIT0_DS_TABLE_LINK (0x00000400) | 2336 | #define MPI_SAS_IOUNIT0_DS_TABLE_LINK (0x00000400) |
2301 | #define MPI_SAS_IOUNIT0_DS_UNSUPPORTED_DEVICE (0x00000800) | 2337 | #define MPI_SAS_IOUNIT0_DS_UNSUPPORTED_DEVICE (0x00000800) |
2338 | #define MPI_SAS_IOUNIT0_DS_MAX_SATA_TARGETS (0x00001000) | ||
2302 | 2339 | ||
2303 | 2340 | ||
2304 | typedef struct _MPI_SAS_IO_UNIT1_PHY_DATA | 2341 | typedef struct _MPI_SAS_IO_UNIT1_PHY_DATA |
@@ -2336,6 +2373,7 @@ typedef struct _CONFIG_PAGE_SAS_IO_UNIT_1 | |||
2336 | #define MPI_SASIOUNITPAGE1_PAGEVERSION (0x04) | 2373 | #define MPI_SASIOUNITPAGE1_PAGEVERSION (0x04) |
2337 | 2374 | ||
2338 | /* values for SAS IO Unit Page 1 ControlFlags */ | 2375 | /* values for SAS IO Unit Page 1 ControlFlags */ |
2376 | #define MPI_SAS_IOUNIT1_CONTROL_DEVICE_SELF_TEST (0x8000) | ||
2339 | #define MPI_SAS_IOUNIT1_CONTROL_SATA_3_0_MAX (0x4000) | 2377 | #define MPI_SAS_IOUNIT1_CONTROL_SATA_3_0_MAX (0x4000) |
2340 | #define MPI_SAS_IOUNIT1_CONTROL_SATA_1_5_MAX (0x2000) | 2378 | #define MPI_SAS_IOUNIT1_CONTROL_SATA_1_5_MAX (0x2000) |
2341 | #define MPI_SAS_IOUNIT1_CONTROL_SATA_SW_PRESERVE (0x1000) | 2379 | #define MPI_SAS_IOUNIT1_CONTROL_SATA_SW_PRESERVE (0x1000) |
@@ -2345,9 +2383,8 @@ typedef struct _CONFIG_PAGE_SAS_IO_UNIT_1 | |||
2345 | #define MPI_SAS_IOUNIT1_CONTROL_SHIFT_DEV_SUPPORT (9) | 2383 | #define MPI_SAS_IOUNIT1_CONTROL_SHIFT_DEV_SUPPORT (9) |
2346 | #define MPI_SAS_IOUNIT1_CONTROL_DEV_SUPPORT_BOTH (0x00) | 2384 | #define MPI_SAS_IOUNIT1_CONTROL_DEV_SUPPORT_BOTH (0x00) |
2347 | #define MPI_SAS_IOUNIT1_CONTROL_DEV_SAS_SUPPORT (0x01) | 2385 | #define MPI_SAS_IOUNIT1_CONTROL_DEV_SAS_SUPPORT (0x01) |
2348 | #define MPI_SAS_IOUNIT1_CONTROL_DEV_SATA_SUPPORT (0x10) | 2386 | #define MPI_SAS_IOUNIT1_CONTROL_DEV_SATA_SUPPORT (0x02) |
2349 | 2387 | ||
2350 | #define MPI_SAS_IOUNIT1_CONTROL_AUTO_PORT_SAME_SAS_ADDR (0x0100) | ||
2351 | #define MPI_SAS_IOUNIT1_CONTROL_SATA_48BIT_LBA_REQUIRED (0x0080) | 2388 | #define MPI_SAS_IOUNIT1_CONTROL_SATA_48BIT_LBA_REQUIRED (0x0080) |
2352 | #define MPI_SAS_IOUNIT1_CONTROL_SATA_SMART_REQUIRED (0x0040) | 2389 | #define MPI_SAS_IOUNIT1_CONTROL_SATA_SMART_REQUIRED (0x0040) |
2353 | #define MPI_SAS_IOUNIT1_CONTROL_SATA_NCQ_REQUIRED (0x0020) | 2390 | #define MPI_SAS_IOUNIT1_CONTROL_SATA_NCQ_REQUIRED (0x0020) |
@@ -2390,7 +2427,7 @@ typedef struct _CONFIG_PAGE_SAS_IO_UNIT_2 | |||
2390 | } CONFIG_PAGE_SAS_IO_UNIT_2, MPI_POINTER PTR_CONFIG_PAGE_SAS_IO_UNIT_2, | 2427 | } CONFIG_PAGE_SAS_IO_UNIT_2, MPI_POINTER PTR_CONFIG_PAGE_SAS_IO_UNIT_2, |
2391 | SasIOUnitPage2_t, MPI_POINTER pSasIOUnitPage2_t; | 2428 | SasIOUnitPage2_t, MPI_POINTER pSasIOUnitPage2_t; |
2392 | 2429 | ||
2393 | #define MPI_SASIOUNITPAGE2_PAGEVERSION (0x03) | 2430 | #define MPI_SASIOUNITPAGE2_PAGEVERSION (0x04) |
2394 | 2431 | ||
2395 | /* values for SAS IO Unit Page 2 Status field */ | 2432 | /* values for SAS IO Unit Page 2 Status field */ |
2396 | #define MPI_SAS_IOUNIT2_STATUS_DISABLED_PERSISTENT_MAPPINGS (0x02) | 2433 | #define MPI_SAS_IOUNIT2_STATUS_DISABLED_PERSISTENT_MAPPINGS (0x02) |
@@ -2406,6 +2443,7 @@ typedef struct _CONFIG_PAGE_SAS_IO_UNIT_2 | |||
2406 | #define MPI_SAS_IOUNIT2_FLAGS_ENCLOSURE_SLOT_PHYS_MAP (0x02) | 2443 | #define MPI_SAS_IOUNIT2_FLAGS_ENCLOSURE_SLOT_PHYS_MAP (0x02) |
2407 | 2444 | ||
2408 | #define MPI_SAS_IOUNIT2_FLAGS_RESERVE_ID_0_FOR_BOOT (0x10) | 2445 | #define MPI_SAS_IOUNIT2_FLAGS_RESERVE_ID_0_FOR_BOOT (0x10) |
2446 | #define MPI_SAS_IOUNIT2_FLAGS_DA_STARTING_SLOT (0x20) | ||
2409 | 2447 | ||
2410 | 2448 | ||
2411 | typedef struct _CONFIG_PAGE_SAS_IO_UNIT_3 | 2449 | typedef struct _CONFIG_PAGE_SAS_IO_UNIT_3 |
@@ -2584,11 +2622,19 @@ typedef struct _CONFIG_PAGE_SAS_DEVICE_2 | |||
2584 | { | 2622 | { |
2585 | CONFIG_EXTENDED_PAGE_HEADER Header; /* 00h */ | 2623 | CONFIG_EXTENDED_PAGE_HEADER Header; /* 00h */ |
2586 | U64 PhysicalIdentifier; /* 08h */ | 2624 | U64 PhysicalIdentifier; /* 08h */ |
2587 | U32 Reserved1; /* 10h */ | 2625 | U32 EnclosureMapping; /* 10h */ |
2588 | } CONFIG_PAGE_SAS_DEVICE_2, MPI_POINTER PTR_CONFIG_PAGE_SAS_DEVICE_2, | 2626 | } CONFIG_PAGE_SAS_DEVICE_2, MPI_POINTER PTR_CONFIG_PAGE_SAS_DEVICE_2, |
2589 | SasDevicePage2_t, MPI_POINTER pSasDevicePage2_t; | 2627 | SasDevicePage2_t, MPI_POINTER pSasDevicePage2_t; |
2590 | 2628 | ||
2591 | #define MPI_SASDEVICE2_PAGEVERSION (0x00) | 2629 | #define MPI_SASDEVICE2_PAGEVERSION (0x01) |
2630 | |||
2631 | /* defines for SAS Device Page 2 EnclosureMapping field */ | ||
2632 | #define MPI_SASDEVICE2_ENC_MAP_MASK_MISSING_COUNT (0x0000000F) | ||
2633 | #define MPI_SASDEVICE2_ENC_MAP_SHIFT_MISSING_COUNT (0) | ||
2634 | #define MPI_SASDEVICE2_ENC_MAP_MASK_NUM_SLOTS (0x000007F0) | ||
2635 | #define MPI_SASDEVICE2_ENC_MAP_SHIFT_NUM_SLOTS (4) | ||
2636 | #define MPI_SASDEVICE2_ENC_MAP_MASK_START_INDEX (0x001FF800) | ||
2637 | #define MPI_SASDEVICE2_ENC_MAP_SHIFT_START_INDEX (11) | ||
2592 | 2638 | ||
2593 | 2639 | ||
2594 | /**************************************************************************** | 2640 | /**************************************************************************** |
@@ -2598,7 +2644,8 @@ typedef struct _CONFIG_PAGE_SAS_DEVICE_2 | |||
2598 | typedef struct _CONFIG_PAGE_SAS_PHY_0 | 2644 | typedef struct _CONFIG_PAGE_SAS_PHY_0 |
2599 | { | 2645 | { |
2600 | CONFIG_EXTENDED_PAGE_HEADER Header; /* 00h */ | 2646 | CONFIG_EXTENDED_PAGE_HEADER Header; /* 00h */ |
2601 | U32 Reserved1; /* 08h */ | 2647 | U16 OwnerDevHandle; /* 08h */ |
2648 | U16 Reserved1; /* 0Ah */ | ||
2602 | U64 SASAddress; /* 0Ch */ | 2649 | U64 SASAddress; /* 0Ch */ |
2603 | U16 AttachedDevHandle; /* 14h */ | 2650 | U16 AttachedDevHandle; /* 14h */ |
2604 | U8 AttachedPhyIdentifier; /* 16h */ | 2651 | U8 AttachedPhyIdentifier; /* 16h */ |
@@ -2607,12 +2654,12 @@ typedef struct _CONFIG_PAGE_SAS_PHY_0 | |||
2607 | U8 ProgrammedLinkRate; /* 20h */ | 2654 | U8 ProgrammedLinkRate; /* 20h */ |
2608 | U8 HwLinkRate; /* 21h */ | 2655 | U8 HwLinkRate; /* 21h */ |
2609 | U8 ChangeCount; /* 22h */ | 2656 | U8 ChangeCount; /* 22h */ |
2610 | U8 Reserved3; /* 23h */ | 2657 | U8 Flags; /* 23h */ |
2611 | U32 PhyInfo; /* 24h */ | 2658 | U32 PhyInfo; /* 24h */ |
2612 | } CONFIG_PAGE_SAS_PHY_0, MPI_POINTER PTR_CONFIG_PAGE_SAS_PHY_0, | 2659 | } CONFIG_PAGE_SAS_PHY_0, MPI_POINTER PTR_CONFIG_PAGE_SAS_PHY_0, |
2613 | SasPhyPage0_t, MPI_POINTER pSasPhyPage0_t; | 2660 | SasPhyPage0_t, MPI_POINTER pSasPhyPage0_t; |
2614 | 2661 | ||
2615 | #define MPI_SASPHY0_PAGEVERSION (0x00) | 2662 | #define MPI_SASPHY0_PAGEVERSION (0x01) |
2616 | 2663 | ||
2617 | /* values for SAS PHY Page 0 ProgrammedLinkRate field */ | 2664 | /* values for SAS PHY Page 0 ProgrammedLinkRate field */ |
2618 | #define MPI_SAS_PHY0_PRATE_MAX_RATE_MASK (0xF0) | 2665 | #define MPI_SAS_PHY0_PRATE_MAX_RATE_MASK (0xF0) |
@@ -2632,6 +2679,9 @@ typedef struct _CONFIG_PAGE_SAS_PHY_0 | |||
2632 | #define MPI_SAS_PHY0_HWRATE_MIN_RATE_1_5 (0x08) | 2679 | #define MPI_SAS_PHY0_HWRATE_MIN_RATE_1_5 (0x08) |
2633 | #define MPI_SAS_PHY0_HWRATE_MIN_RATE_3_0 (0x09) | 2680 | #define MPI_SAS_PHY0_HWRATE_MIN_RATE_3_0 (0x09) |
2634 | 2681 | ||
2682 | /* values for SAS PHY Page 0 Flags field */ | ||
2683 | #define MPI_SAS_PHY0_FLAGS_SGPIO_DIRECT_ATTACH_ENC (0x01) | ||
2684 | |||
2635 | /* values for SAS PHY Page 0 PhyInfo field */ | 2685 | /* values for SAS PHY Page 0 PhyInfo field */ |
2636 | #define MPI_SAS_PHY0_PHYINFO_SATA_PORT_ACTIVE (0x00004000) | 2686 | #define MPI_SAS_PHY0_PHYINFO_SATA_PORT_ACTIVE (0x00004000) |
2637 | #define MPI_SAS_PHY0_PHYINFO_SATA_PORT_SELECTOR (0x00002000) | 2687 | #define MPI_SAS_PHY0_PHYINFO_SATA_PORT_SELECTOR (0x00002000) |
@@ -2690,7 +2740,7 @@ typedef struct _CONFIG_PAGE_SAS_ENCLOSURE_0 | |||
2690 | } CONFIG_PAGE_SAS_ENCLOSURE_0, MPI_POINTER PTR_CONFIG_PAGE_SAS_ENCLOSURE_0, | 2740 | } CONFIG_PAGE_SAS_ENCLOSURE_0, MPI_POINTER PTR_CONFIG_PAGE_SAS_ENCLOSURE_0, |
2691 | SasEnclosurePage0_t, MPI_POINTER pSasEnclosurePage0_t; | 2741 | SasEnclosurePage0_t, MPI_POINTER pSasEnclosurePage0_t; |
2692 | 2742 | ||
2693 | #define MPI_SASENCLOSURE0_PAGEVERSION (0x00) | 2743 | #define MPI_SASENCLOSURE0_PAGEVERSION (0x01) |
2694 | 2744 | ||
2695 | /* values for SAS Enclosure Page 0 Flags field */ | 2745 | /* values for SAS Enclosure Page 0 Flags field */ |
2696 | #define MPI_SAS_ENCLS0_FLAGS_SEP_BUS_ID_VALID (0x0020) | 2746 | #define MPI_SAS_ENCLS0_FLAGS_SEP_BUS_ID_VALID (0x0020) |
@@ -2702,6 +2752,7 @@ typedef struct _CONFIG_PAGE_SAS_ENCLOSURE_0 | |||
2702 | #define MPI_SAS_ENCLS0_FLAGS_MNG_IOC_SGPIO (0x0002) | 2752 | #define MPI_SAS_ENCLS0_FLAGS_MNG_IOC_SGPIO (0x0002) |
2703 | #define MPI_SAS_ENCLS0_FLAGS_MNG_EXP_SGPIO (0x0003) | 2753 | #define MPI_SAS_ENCLS0_FLAGS_MNG_EXP_SGPIO (0x0003) |
2704 | #define MPI_SAS_ENCLS0_FLAGS_MNG_SES_ENCLOSURE (0x0004) | 2754 | #define MPI_SAS_ENCLS0_FLAGS_MNG_SES_ENCLOSURE (0x0004) |
2755 | #define MPI_SAS_ENCLS0_FLAGS_MNG_IOC_GPIO (0x0005) | ||
2705 | 2756 | ||
2706 | 2757 | ||
2707 | /**************************************************************************** | 2758 | /**************************************************************************** |
diff --git a/drivers/message/fusion/lsi/mpi_history.txt b/drivers/message/fusion/lsi/mpi_history.txt index c9edbee41edf..1a30ef16adb4 100644 --- a/drivers/message/fusion/lsi/mpi_history.txt +++ b/drivers/message/fusion/lsi/mpi_history.txt | |||
@@ -6,17 +6,17 @@ | |||
6 | Copyright (c) 2000-2005 LSI Logic Corporation. | 6 | Copyright (c) 2000-2005 LSI Logic Corporation. |
7 | 7 | ||
8 | --------------------------------------- | 8 | --------------------------------------- |
9 | Header Set Release Version: 01.05.09 | 9 | Header Set Release Version: 01.05.10 |
10 | Header Set Release Date: 03-11-05 | 10 | Header Set Release Date: 03-11-05 |
11 | --------------------------------------- | 11 | --------------------------------------- |
12 | 12 | ||
13 | Filename Current version Prior version | 13 | Filename Current version Prior version |
14 | ---------- --------------- ------------- | 14 | ---------- --------------- ------------- |
15 | mpi.h 01.05.07 01.05.06 | 15 | mpi.h 01.05.08 01.05.07 |
16 | mpi_ioc.h 01.05.08 01.05.07 | 16 | mpi_ioc.h 01.05.09 01.05.08 |
17 | mpi_cnfg.h 01.05.08 01.05.07 | 17 | mpi_cnfg.h 01.05.09 01.05.08 |
18 | mpi_init.h 01.05.04 01.05.03 | 18 | mpi_init.h 01.05.05 01.05.04 |
19 | mpi_targ.h 01.05.04 01.05.03 | 19 | mpi_targ.h 01.05.05 01.05.04 |
20 | mpi_fc.h 01.05.01 01.05.01 | 20 | mpi_fc.h 01.05.01 01.05.01 |
21 | mpi_lan.h 01.05.01 01.05.01 | 21 | mpi_lan.h 01.05.01 01.05.01 |
22 | mpi_raid.h 01.05.02 01.05.02 | 22 | mpi_raid.h 01.05.02 01.05.02 |
@@ -24,7 +24,7 @@ | |||
24 | mpi_inb.h 01.05.01 01.05.01 | 24 | mpi_inb.h 01.05.01 01.05.01 |
25 | mpi_sas.h 01.05.01 01.05.01 | 25 | mpi_sas.h 01.05.01 01.05.01 |
26 | mpi_type.h 01.05.01 01.05.01 | 26 | mpi_type.h 01.05.01 01.05.01 |
27 | mpi_history.txt 01.05.09 01.05.08 | 27 | mpi_history.txt 01.05.09 01.05.09 |
28 | 28 | ||
29 | 29 | ||
30 | * Date Version Description | 30 | * Date Version Description |
@@ -88,6 +88,9 @@ mpi.h | |||
88 | * 03-11-05 01.05.07 Removed function codes for SCSI IO 32 and | 88 | * 03-11-05 01.05.07 Removed function codes for SCSI IO 32 and |
89 | * TargetAssistExtended requests. | 89 | * TargetAssistExtended requests. |
90 | * Removed EEDP IOCStatus codes. | 90 | * Removed EEDP IOCStatus codes. |
91 | * 06-24-05 01.05.08 Added function codes for SCSI IO 32 and | ||
92 | * TargetAssistExtended requests. | ||
93 | * Added EEDP IOCStatus codes. | ||
91 | * -------------------------------------------------------------------------- | 94 | * -------------------------------------------------------------------------- |
92 | 95 | ||
93 | mpi_ioc.h | 96 | mpi_ioc.h |
@@ -159,6 +162,8 @@ mpi_ioc.h | |||
159 | * Reply and IOC Init Request. | 162 | * Reply and IOC Init Request. |
160 | * 03-11-05 01.05.08 Added family code for 1068E family. | 163 | * 03-11-05 01.05.08 Added family code for 1068E family. |
161 | * Removed IOCFacts Reply EEDP Capability bit. | 164 | * Removed IOCFacts Reply EEDP Capability bit. |
165 | * 06-24-05 01.05.09 Added 5 new IOCFacts Reply IOCCapabilities bits. | ||
166 | * Added Max SATA Targets to SAS Discovery Error event. | ||
162 | * -------------------------------------------------------------------------- | 167 | * -------------------------------------------------------------------------- |
163 | 168 | ||
164 | mpi_cnfg.h | 169 | mpi_cnfg.h |
@@ -380,6 +385,23 @@ mpi_cnfg.h | |||
380 | * New physical mapping mode in SAS IO Unit Page 2. | 385 | * New physical mapping mode in SAS IO Unit Page 2. |
381 | * Added CONFIG_PAGE_SAS_ENCLOSURE_0. | 386 | * Added CONFIG_PAGE_SAS_ENCLOSURE_0. |
382 | * Added Slot and Enclosure fields to SAS Device Page 0. | 387 | * Added Slot and Enclosure fields to SAS Device Page 0. |
388 | * 06-24-05 01.05.09 Added EEDP defines to IOC Page 1. | ||
389 | * Added more RAID type defines to IOC Page 2. | ||
390 | * Added Port Enable Delay settings to BIOS Page 1. | ||
391 | * Added Bad Block Table Full define to RAID Volume Page 0. | ||
392 | * Added Previous State defines to RAID Physical Disk | ||
393 | * Page 0. | ||
394 | * Added Max Sata Targets define for DiscoveryStatus field | ||
395 | * of SAS IO Unit Page 0. | ||
396 | * Added Device Self Test to Control Flags of SAS IO Unit | ||
397 | * Page 1. | ||
398 | * Added Direct Attach Starting Slot Number define for SAS | ||
399 | * IO Unit Page 2. | ||
400 | * Added new fields in SAS Device Page 2 for enclosure | ||
401 | * mapping. | ||
402 | * Added OwnerDevHandle and Flags field to SAS PHY Page 0. | ||
403 | * Added IOC GPIO Flags define to SAS Enclosure Page 0. | ||
404 | * Fixed the value for MPI_SAS_IOUNIT1_CONTROL_DEV_SATA_SUPPORT. | ||
383 | * -------------------------------------------------------------------------- | 405 | * -------------------------------------------------------------------------- |
384 | 406 | ||
385 | mpi_init.h | 407 | mpi_init.h |
@@ -418,6 +440,8 @@ mpi_init.h | |||
418 | * Modified SCSI Enclosure Processor Request and Reply to | 440 | * Modified SCSI Enclosure Processor Request and Reply to |
419 | * support Enclosure/Slot addressing rather than WWID | 441 | * support Enclosure/Slot addressing rather than WWID |
420 | * addressing. | 442 | * addressing. |
443 | * 06-24-05 01.05.05 Added SCSI IO 32 structures and defines. | ||
444 | * Added four new defines for SEP SlotStatus. | ||
421 | * -------------------------------------------------------------------------- | 445 | * -------------------------------------------------------------------------- |
422 | 446 | ||
423 | mpi_targ.h | 447 | mpi_targ.h |
@@ -461,6 +485,7 @@ mpi_targ.h | |||
461 | * 10-05-04 01.05.02 MSG_TARGET_CMD_BUFFER_POST_BASE_LIST_REPLY added. | 485 | * 10-05-04 01.05.02 MSG_TARGET_CMD_BUFFER_POST_BASE_LIST_REPLY added. |
462 | * 02-22-05 01.05.03 Changed a comment. | 486 | * 02-22-05 01.05.03 Changed a comment. |
463 | * 03-11-05 01.05.04 Removed TargetAssistExtended Request. | 487 | * 03-11-05 01.05.04 Removed TargetAssistExtended Request. |
488 | * 06-24-05 01.05.05 Added TargetAssistExtended structures and defines. | ||
464 | * -------------------------------------------------------------------------- | 489 | * -------------------------------------------------------------------------- |
465 | 490 | ||
466 | mpi_fc.h | 491 | mpi_fc.h |
@@ -571,20 +596,20 @@ mpi_type.h | |||
571 | 596 | ||
572 | mpi_history.txt Parts list history | 597 | mpi_history.txt Parts list history |
573 | 598 | ||
574 | Filename 01.05.09 | 599 | Filename 01.05.10 01.05.09 |
575 | ---------- -------- | 600 | ---------- -------- -------- |
576 | mpi.h 01.05.07 | 601 | mpi.h 01.05.08 01.05.07 |
577 | mpi_ioc.h 01.05.08 | 602 | mpi_ioc.h 01.05.09 01.05.08 |
578 | mpi_cnfg.h 01.05.08 | 603 | mpi_cnfg.h 01.05.09 01.05.08 |
579 | mpi_init.h 01.05.04 | 604 | mpi_init.h 01.05.05 01.05.04 |
580 | mpi_targ.h 01.05.04 | 605 | mpi_targ.h 01.05.05 01.05.04 |
581 | mpi_fc.h 01.05.01 | 606 | mpi_fc.h 01.05.01 01.05.01 |
582 | mpi_lan.h 01.05.01 | 607 | mpi_lan.h 01.05.01 01.05.01 |
583 | mpi_raid.h 01.05.02 | 608 | mpi_raid.h 01.05.02 01.05.02 |
584 | mpi_tool.h 01.05.03 | 609 | mpi_tool.h 01.05.03 01.05.03 |
585 | mpi_inb.h 01.05.01 | 610 | mpi_inb.h 01.05.01 01.05.01 |
586 | mpi_sas.h 01.05.01 | 611 | mpi_sas.h 01.05.01 01.05.01 |
587 | mpi_type.h 01.05.01 | 612 | mpi_type.h 01.05.01 01.05.01 |
588 | 613 | ||
589 | Filename 01.05.08 01.05.07 01.05.06 01.05.05 01.05.04 01.05.03 | 614 | Filename 01.05.08 01.05.07 01.05.06 01.05.05 01.05.04 01.05.03 |
590 | ---------- -------- -------- -------- -------- -------- -------- | 615 | ---------- -------- -------- -------- -------- -------- -------- |
diff --git a/drivers/message/fusion/lsi/mpi_init.h b/drivers/message/fusion/lsi/mpi_init.h index aca035801a86..d5af75afbd94 100644 --- a/drivers/message/fusion/lsi/mpi_init.h +++ b/drivers/message/fusion/lsi/mpi_init.h | |||
@@ -6,7 +6,7 @@ | |||
6 | * Title: MPI initiator mode messages and structures | 6 | * Title: MPI initiator mode messages and structures |
7 | * Creation Date: June 8, 2000 | 7 | * Creation Date: June 8, 2000 |
8 | * | 8 | * |
9 | * mpi_init.h Version: 01.05.04 | 9 | * mpi_init.h Version: 01.05.05 |
10 | * | 10 | * |
11 | * Version History | 11 | * Version History |
12 | * --------------- | 12 | * --------------- |
@@ -48,6 +48,8 @@ | |||
48 | * Modified SCSI Enclosure Processor Request and Reply to | 48 | * Modified SCSI Enclosure Processor Request and Reply to |
49 | * support Enclosure/Slot addressing rather than WWID | 49 | * support Enclosure/Slot addressing rather than WWID |
50 | * addressing. | 50 | * addressing. |
51 | * 06-24-05 01.05.05 Added SCSI IO 32 structures and defines. | ||
52 | * Added four new defines for SEP SlotStatus. | ||
51 | * -------------------------------------------------------------------------- | 53 | * -------------------------------------------------------------------------- |
52 | */ | 54 | */ |
53 | 55 | ||
@@ -203,6 +205,197 @@ typedef struct _MSG_SCSI_IO_REPLY | |||
203 | 205 | ||
204 | 206 | ||
205 | /****************************************************************************/ | 207 | /****************************************************************************/ |
208 | /* SCSI IO 32 messages and associated structures */ | ||
209 | /****************************************************************************/ | ||
210 | |||
211 | typedef struct | ||
212 | { | ||
213 | U8 CDB[20]; /* 00h */ | ||
214 | U32 PrimaryReferenceTag; /* 14h */ | ||
215 | U16 PrimaryApplicationTag; /* 18h */ | ||
216 | U16 PrimaryApplicationTagMask; /* 1Ah */ | ||
217 | U32 TransferLength; /* 1Ch */ | ||
218 | } MPI_SCSI_IO32_CDB_EEDP32, MPI_POINTER PTR_MPI_SCSI_IO32_CDB_EEDP32, | ||
219 | MpiScsiIo32CdbEedp32_t, MPI_POINTER pMpiScsiIo32CdbEedp32_t; | ||
220 | |||
221 | typedef struct | ||
222 | { | ||
223 | U8 CDB[16]; /* 00h */ | ||
224 | U32 DataLength; /* 10h */ | ||
225 | U32 PrimaryReferenceTag; /* 14h */ | ||
226 | U16 PrimaryApplicationTag; /* 18h */ | ||
227 | U16 PrimaryApplicationTagMask; /* 1Ah */ | ||
228 | U32 TransferLength; /* 1Ch */ | ||
229 | } MPI_SCSI_IO32_CDB_EEDP16, MPI_POINTER PTR_MPI_SCSI_IO32_CDB_EEDP16, | ||
230 | MpiScsiIo32CdbEedp16_t, MPI_POINTER pMpiScsiIo32CdbEedp16_t; | ||
231 | |||
232 | typedef union | ||
233 | { | ||
234 | U8 CDB32[32]; | ||
235 | MPI_SCSI_IO32_CDB_EEDP32 EEDP32; | ||
236 | MPI_SCSI_IO32_CDB_EEDP16 EEDP16; | ||
237 | SGE_SIMPLE_UNION SGE; | ||
238 | } MPI_SCSI_IO32_CDB_UNION, MPI_POINTER PTR_MPI_SCSI_IO32_CDB_UNION, | ||
239 | MpiScsiIo32Cdb_t, MPI_POINTER pMpiScsiIo32Cdb_t; | ||
240 | |||
241 | typedef struct | ||
242 | { | ||
243 | U8 TargetID; /* 00h */ | ||
244 | U8 Bus; /* 01h */ | ||
245 | U16 Reserved1; /* 02h */ | ||
246 | U32 Reserved2; /* 04h */ | ||
247 | } MPI_SCSI_IO32_BUS_TARGET_ID_FORM, MPI_POINTER PTR_MPI_SCSI_IO32_BUS_TARGET_ID_FORM, | ||
248 | MpiScsiIo32BusTargetIdForm_t, MPI_POINTER pMpiScsiIo32BusTargetIdForm_t; | ||
249 | |||
250 | typedef union | ||
251 | { | ||
252 | MPI_SCSI_IO32_BUS_TARGET_ID_FORM SCSIID; | ||
253 | U64 WWID; | ||
254 | } MPI_SCSI_IO32_ADDRESS, MPI_POINTER PTR_MPI_SCSI_IO32_ADDRESS, | ||
255 | MpiScsiIo32Address_t, MPI_POINTER pMpiScsiIo32Address_t; | ||
256 | |||
257 | typedef struct _MSG_SCSI_IO32_REQUEST | ||
258 | { | ||
259 | U8 Port; /* 00h */ | ||
260 | U8 Reserved1; /* 01h */ | ||
261 | U8 ChainOffset; /* 02h */ | ||
262 | U8 Function; /* 03h */ | ||
263 | U8 CDBLength; /* 04h */ | ||
264 | U8 SenseBufferLength; /* 05h */ | ||
265 | U8 Flags; /* 06h */ | ||
266 | U8 MsgFlags; /* 07h */ | ||
267 | U32 MsgContext; /* 08h */ | ||
268 | U8 LUN[8]; /* 0Ch */ | ||
269 | U32 Control; /* 14h */ | ||
270 | MPI_SCSI_IO32_CDB_UNION CDB; /* 18h */ | ||
271 | U32 DataLength; /* 38h */ | ||
272 | U32 BidirectionalDataLength; /* 3Ch */ | ||
273 | U32 SecondaryReferenceTag; /* 40h */ | ||
274 | U16 SecondaryApplicationTag; /* 44h */ | ||
275 | U16 Reserved2; /* 46h */ | ||
276 | U16 EEDPFlags; /* 48h */ | ||
277 | U16 ApplicationTagTranslationMask; /* 4Ah */ | ||
278 | U32 EEDPBlockSize; /* 4Ch */ | ||
279 | MPI_SCSI_IO32_ADDRESS DeviceAddress; /* 50h */ | ||
280 | U8 SGLOffset0; /* 58h */ | ||
281 | U8 SGLOffset1; /* 59h */ | ||
282 | U8 SGLOffset2; /* 5Ah */ | ||
283 | U8 SGLOffset3; /* 5Bh */ | ||
284 | U32 Reserved3; /* 5Ch */ | ||
285 | U32 Reserved4; /* 60h */ | ||
286 | U32 SenseBufferLowAddr; /* 64h */ | ||
287 | SGE_IO_UNION SGL; /* 68h */ | ||
288 | } MSG_SCSI_IO32_REQUEST, MPI_POINTER PTR_MSG_SCSI_IO32_REQUEST, | ||
289 | SCSIIO32Request_t, MPI_POINTER pSCSIIO32Request_t; | ||
290 | |||
291 | /* SCSI IO 32 MsgFlags bits */ | ||
292 | #define MPI_SCSIIO32_MSGFLGS_SENSE_WIDTH (0x01) | ||
293 | #define MPI_SCSIIO32_MSGFLGS_SENSE_WIDTH_32 (0x00) | ||
294 | #define MPI_SCSIIO32_MSGFLGS_SENSE_WIDTH_64 (0x01) | ||
295 | |||
296 | #define MPI_SCSIIO32_MSGFLGS_SENSE_LOCATION (0x02) | ||
297 | #define MPI_SCSIIO32_MSGFLGS_SENSE_LOC_HOST (0x00) | ||
298 | #define MPI_SCSIIO32_MSGFLGS_SENSE_LOC_IOC (0x02) | ||
299 | |||
300 | #define MPI_SCSIIO32_MSGFLGS_CMD_DETERMINES_DATA_DIR (0x04) | ||
301 | #define MPI_SCSIIO32_MSGFLGS_SGL_OFFSETS_CHAINS (0x08) | ||
302 | #define MPI_SCSIIO32_MSGFLGS_MULTICAST (0x10) | ||
303 | #define MPI_SCSIIO32_MSGFLGS_BIDIRECTIONAL (0x20) | ||
304 | #define MPI_SCSIIO32_MSGFLGS_LARGE_CDB (0x40) | ||
305 | |||
306 | /* SCSI IO 32 Flags bits */ | ||
307 | #define MPI_SCSIIO32_FLAGS_FORM_MASK (0x03) | ||
308 | #define MPI_SCSIIO32_FLAGS_FORM_SCSIID (0x00) | ||
309 | #define MPI_SCSIIO32_FLAGS_FORM_WWID (0x01) | ||
310 | |||
311 | /* SCSI IO 32 LUN fields */ | ||
312 | #define MPI_SCSIIO32_LUN_FIRST_LEVEL_ADDRESSING (0x0000FFFF) | ||
313 | #define MPI_SCSIIO32_LUN_SECOND_LEVEL_ADDRESSING (0xFFFF0000) | ||
314 | #define MPI_SCSIIO32_LUN_THIRD_LEVEL_ADDRESSING (0x0000FFFF) | ||
315 | #define MPI_SCSIIO32_LUN_FOURTH_LEVEL_ADDRESSING (0xFFFF0000) | ||
316 | #define MPI_SCSIIO32_LUN_LEVEL_1_WORD (0xFF00) | ||
317 | #define MPI_SCSIIO32_LUN_LEVEL_1_DWORD (0x0000FF00) | ||
318 | |||
319 | /* SCSI IO 32 Control bits */ | ||
320 | #define MPI_SCSIIO32_CONTROL_DATADIRECTION_MASK (0x03000000) | ||
321 | #define MPI_SCSIIO32_CONTROL_NODATATRANSFER (0x00000000) | ||
322 | #define MPI_SCSIIO32_CONTROL_WRITE (0x01000000) | ||
323 | #define MPI_SCSIIO32_CONTROL_READ (0x02000000) | ||
324 | #define MPI_SCSIIO32_CONTROL_BIDIRECTIONAL (0x03000000) | ||
325 | |||
326 | #define MPI_SCSIIO32_CONTROL_ADDCDBLEN_MASK (0xFC000000) | ||
327 | #define MPI_SCSIIO32_CONTROL_ADDCDBLEN_SHIFT (26) | ||
328 | |||
329 | #define MPI_SCSIIO32_CONTROL_TASKATTRIBUTE_MASK (0x00000700) | ||
330 | #define MPI_SCSIIO32_CONTROL_SIMPLEQ (0x00000000) | ||
331 | #define MPI_SCSIIO32_CONTROL_HEADOFQ (0x00000100) | ||
332 | #define MPI_SCSIIO32_CONTROL_ORDEREDQ (0x00000200) | ||
333 | #define MPI_SCSIIO32_CONTROL_ACAQ (0x00000400) | ||
334 | #define MPI_SCSIIO32_CONTROL_UNTAGGED (0x00000500) | ||
335 | #define MPI_SCSIIO32_CONTROL_NO_DISCONNECT (0x00000700) | ||
336 | |||
337 | #define MPI_SCSIIO32_CONTROL_TASKMANAGE_MASK (0x00FF0000) | ||
338 | #define MPI_SCSIIO32_CONTROL_OBSOLETE (0x00800000) | ||
339 | #define MPI_SCSIIO32_CONTROL_CLEAR_ACA_RSV (0x00400000) | ||
340 | #define MPI_SCSIIO32_CONTROL_TARGET_RESET (0x00200000) | ||
341 | #define MPI_SCSIIO32_CONTROL_LUN_RESET_RSV (0x00100000) | ||
342 | #define MPI_SCSIIO32_CONTROL_RESERVED (0x00080000) | ||
343 | #define MPI_SCSIIO32_CONTROL_CLR_TASK_SET_RSV (0x00040000) | ||
344 | #define MPI_SCSIIO32_CONTROL_ABORT_TASK_SET (0x00020000) | ||
345 | #define MPI_SCSIIO32_CONTROL_RESERVED2 (0x00010000) | ||
346 | |||
347 | /* SCSI IO 32 EEDPFlags */ | ||
348 | #define MPI_SCSIIO32_EEDPFLAGS_MASK_OP (0x0007) | ||
349 | #define MPI_SCSIIO32_EEDPFLAGS_NOOP_OP (0x0000) | ||
350 | #define MPI_SCSIIO32_EEDPFLAGS_CHK_OP (0x0001) | ||
351 | #define MPI_SCSIIO32_EEDPFLAGS_STRIP_OP (0x0002) | ||
352 | #define MPI_SCSIIO32_EEDPFLAGS_CHKRM_OP (0x0003) | ||
353 | #define MPI_SCSIIO32_EEDPFLAGS_INSERT_OP (0x0004) | ||
354 | #define MPI_SCSIIO32_EEDPFLAGS_REPLACE_OP (0x0006) | ||
355 | #define MPI_SCSIIO32_EEDPFLAGS_CHKREGEN_OP (0x0007) | ||
356 | |||
357 | #define MPI_SCSIIO32_EEDPFLAGS_PASS_REF_TAG (0x0008) | ||
358 | #define MPI_SCSIIO32_EEDPFLAGS_8_9THS_MODE (0x0010) | ||
359 | |||
360 | #define MPI_SCSIIO32_EEDPFLAGS_T10_CHK_MASK (0x0700) | ||
361 | #define MPI_SCSIIO32_EEDPFLAGS_T10_CHK_GUARD (0x0100) | ||
362 | #define MPI_SCSIIO32_EEDPFLAGS_T10_CHK_REFTAG (0x0200) | ||
363 | #define MPI_SCSIIO32_EEDPFLAGS_T10_CHK_LBATAG (0x0400) | ||
364 | #define MPI_SCSIIO32_EEDPFLAGS_T10_CHK_SHIFT (8) | ||
365 | |||
366 | #define MPI_SCSIIO32_EEDPFLAGS_INC_SEC_APPTAG (0x1000) | ||
367 | #define MPI_SCSIIO32_EEDPFLAGS_INC_PRI_APPTAG (0x2000) | ||
368 | #define MPI_SCSIIO32_EEDPFLAGS_INC_SEC_REFTAG (0x4000) | ||
369 | #define MPI_SCSIIO32_EEDPFLAGS_INC_PRI_REFTAG (0x8000) | ||
370 | |||
371 | |||
372 | /* SCSIIO32 IO reply structure */ | ||
373 | typedef struct _MSG_SCSIIO32_IO_REPLY | ||
374 | { | ||
375 | U8 Port; /* 00h */ | ||
376 | U8 Reserved1; /* 01h */ | ||
377 | U8 MsgLength; /* 02h */ | ||
378 | U8 Function; /* 03h */ | ||
379 | U8 CDBLength; /* 04h */ | ||
380 | U8 SenseBufferLength; /* 05h */ | ||
381 | U8 Flags; /* 06h */ | ||
382 | U8 MsgFlags; /* 07h */ | ||
383 | U32 MsgContext; /* 08h */ | ||
384 | U8 SCSIStatus; /* 0Ch */ | ||
385 | U8 SCSIState; /* 0Dh */ | ||
386 | U16 IOCStatus; /* 0Eh */ | ||
387 | U32 IOCLogInfo; /* 10h */ | ||
388 | U32 TransferCount; /* 14h */ | ||
389 | U32 SenseCount; /* 18h */ | ||
390 | U32 ResponseInfo; /* 1Ch */ | ||
391 | U16 TaskTag; /* 20h */ | ||
392 | U16 Reserved2; /* 22h */ | ||
393 | U32 BidirectionalTransferCount; /* 24h */ | ||
394 | } MSG_SCSIIO32_IO_REPLY, MPI_POINTER PTR_MSG_SCSIIO32_IO_REPLY, | ||
395 | SCSIIO32Reply_t, MPI_POINTER pSCSIIO32Reply_t; | ||
396 | |||
397 | |||
398 | /****************************************************************************/ | ||
206 | /* SCSI Task Management messages */ | 399 | /* SCSI Task Management messages */ |
207 | /****************************************************************************/ | 400 | /****************************************************************************/ |
208 | 401 | ||
@@ -310,10 +503,14 @@ typedef struct _MSG_SEP_REQUEST | |||
310 | #define MPI_SEP_REQ_SLOTSTATUS_UNCONFIGURED (0x00000080) | 503 | #define MPI_SEP_REQ_SLOTSTATUS_UNCONFIGURED (0x00000080) |
311 | #define MPI_SEP_REQ_SLOTSTATUS_HOT_SPARE (0x00000100) | 504 | #define MPI_SEP_REQ_SLOTSTATUS_HOT_SPARE (0x00000100) |
312 | #define MPI_SEP_REQ_SLOTSTATUS_REBUILD_STOPPED (0x00000200) | 505 | #define MPI_SEP_REQ_SLOTSTATUS_REBUILD_STOPPED (0x00000200) |
506 | #define MPI_SEP_REQ_SLOTSTATUS_REQ_CONSISTENCY_CHECK (0x00001000) | ||
507 | #define MPI_SEP_REQ_SLOTSTATUS_DISABLE (0x00002000) | ||
508 | #define MPI_SEP_REQ_SLOTSTATUS_REQ_RESERVED_DEVICE (0x00004000) | ||
313 | #define MPI_SEP_REQ_SLOTSTATUS_IDENTIFY_REQUEST (0x00020000) | 509 | #define MPI_SEP_REQ_SLOTSTATUS_IDENTIFY_REQUEST (0x00020000) |
314 | #define MPI_SEP_REQ_SLOTSTATUS_REQUEST_REMOVE (0x00040000) | 510 | #define MPI_SEP_REQ_SLOTSTATUS_REQUEST_REMOVE (0x00040000) |
315 | #define MPI_SEP_REQ_SLOTSTATUS_REQUEST_INSERT (0x00080000) | 511 | #define MPI_SEP_REQ_SLOTSTATUS_REQUEST_INSERT (0x00080000) |
316 | #define MPI_SEP_REQ_SLOTSTATUS_DO_NOT_MOVE (0x00400000) | 512 | #define MPI_SEP_REQ_SLOTSTATUS_DO_NOT_MOVE (0x00400000) |
513 | #define MPI_SEP_REQ_SLOTSTATUS_ACTIVE (0x00800000) | ||
317 | #define MPI_SEP_REQ_SLOTSTATUS_B_ENABLE_BYPASS (0x04000000) | 514 | #define MPI_SEP_REQ_SLOTSTATUS_B_ENABLE_BYPASS (0x04000000) |
318 | #define MPI_SEP_REQ_SLOTSTATUS_A_ENABLE_BYPASS (0x08000000) | 515 | #define MPI_SEP_REQ_SLOTSTATUS_A_ENABLE_BYPASS (0x08000000) |
319 | #define MPI_SEP_REQ_SLOTSTATUS_DEV_OFF (0x10000000) | 516 | #define MPI_SEP_REQ_SLOTSTATUS_DEV_OFF (0x10000000) |
@@ -352,11 +549,15 @@ typedef struct _MSG_SEP_REPLY | |||
352 | #define MPI_SEP_REPLY_SLOTSTATUS_UNCONFIGURED (0x00000080) | 549 | #define MPI_SEP_REPLY_SLOTSTATUS_UNCONFIGURED (0x00000080) |
353 | #define MPI_SEP_REPLY_SLOTSTATUS_HOT_SPARE (0x00000100) | 550 | #define MPI_SEP_REPLY_SLOTSTATUS_HOT_SPARE (0x00000100) |
354 | #define MPI_SEP_REPLY_SLOTSTATUS_REBUILD_STOPPED (0x00000200) | 551 | #define MPI_SEP_REPLY_SLOTSTATUS_REBUILD_STOPPED (0x00000200) |
552 | #define MPI_SEP_REPLY_SLOTSTATUS_CONSISTENCY_CHECK (0x00001000) | ||
553 | #define MPI_SEP_REPLY_SLOTSTATUS_DISABLE (0x00002000) | ||
554 | #define MPI_SEP_REPLY_SLOTSTATUS_RESERVED_DEVICE (0x00004000) | ||
355 | #define MPI_SEP_REPLY_SLOTSTATUS_REPORT (0x00010000) | 555 | #define MPI_SEP_REPLY_SLOTSTATUS_REPORT (0x00010000) |
356 | #define MPI_SEP_REPLY_SLOTSTATUS_IDENTIFY_REQUEST (0x00020000) | 556 | #define MPI_SEP_REPLY_SLOTSTATUS_IDENTIFY_REQUEST (0x00020000) |
357 | #define MPI_SEP_REPLY_SLOTSTATUS_REMOVE_READY (0x00040000) | 557 | #define MPI_SEP_REPLY_SLOTSTATUS_REMOVE_READY (0x00040000) |
358 | #define MPI_SEP_REPLY_SLOTSTATUS_INSERT_READY (0x00080000) | 558 | #define MPI_SEP_REPLY_SLOTSTATUS_INSERT_READY (0x00080000) |
359 | #define MPI_SEP_REPLY_SLOTSTATUS_DO_NOT_REMOVE (0x00400000) | 559 | #define MPI_SEP_REPLY_SLOTSTATUS_DO_NOT_REMOVE (0x00400000) |
560 | #define MPI_SEP_REPLY_SLOTSTATUS_ACTIVE (0x00800000) | ||
360 | #define MPI_SEP_REPLY_SLOTSTATUS_B_BYPASS_ENABLED (0x01000000) | 561 | #define MPI_SEP_REPLY_SLOTSTATUS_B_BYPASS_ENABLED (0x01000000) |
361 | #define MPI_SEP_REPLY_SLOTSTATUS_A_BYPASS_ENABLED (0x02000000) | 562 | #define MPI_SEP_REPLY_SLOTSTATUS_A_BYPASS_ENABLED (0x02000000) |
362 | #define MPI_SEP_REPLY_SLOTSTATUS_B_ENABLE_BYPASS (0x04000000) | 563 | #define MPI_SEP_REPLY_SLOTSTATUS_B_ENABLE_BYPASS (0x04000000) |
diff --git a/drivers/message/fusion/lsi/mpi_ioc.h b/drivers/message/fusion/lsi/mpi_ioc.h index f91eb4efe8cc..93b70e2b4266 100644 --- a/drivers/message/fusion/lsi/mpi_ioc.h +++ b/drivers/message/fusion/lsi/mpi_ioc.h | |||
@@ -6,7 +6,7 @@ | |||
6 | * Title: MPI IOC, Port, Event, FW Download, and FW Upload messages | 6 | * Title: MPI IOC, Port, Event, FW Download, and FW Upload messages |
7 | * Creation Date: August 11, 2000 | 7 | * Creation Date: August 11, 2000 |
8 | * | 8 | * |
9 | * mpi_ioc.h Version: 01.05.08 | 9 | * mpi_ioc.h Version: 01.05.09 |
10 | * | 10 | * |
11 | * Version History | 11 | * Version History |
12 | * --------------- | 12 | * --------------- |
@@ -81,6 +81,8 @@ | |||
81 | * Reply and IOC Init Request. | 81 | * Reply and IOC Init Request. |
82 | * 03-11-05 01.05.08 Added family code for 1068E family. | 82 | * 03-11-05 01.05.08 Added family code for 1068E family. |
83 | * Removed IOCFacts Reply EEDP Capability bit. | 83 | * Removed IOCFacts Reply EEDP Capability bit. |
84 | * 06-24-05 01.05.09 Added 5 new IOCFacts Reply IOCCapabilities bits. | ||
85 | * Added Max SATA Targets to SAS Discovery Error event. | ||
84 | * -------------------------------------------------------------------------- | 86 | * -------------------------------------------------------------------------- |
85 | */ | 87 | */ |
86 | 88 | ||
@@ -261,7 +263,11 @@ typedef struct _MSG_IOC_FACTS_REPLY | |||
261 | #define MPI_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER (0x00000008) | 263 | #define MPI_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER (0x00000008) |
262 | #define MPI_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER (0x00000010) | 264 | #define MPI_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER (0x00000010) |
263 | #define MPI_IOCFACTS_CAPABILITY_EXTENDED_BUFFER (0x00000020) | 265 | #define MPI_IOCFACTS_CAPABILITY_EXTENDED_BUFFER (0x00000020) |
264 | 266 | #define MPI_IOCFACTS_CAPABILITY_EEDP (0x00000040) | |
267 | #define MPI_IOCFACTS_CAPABILITY_BIDIRECTIONAL (0x00000080) | ||
268 | #define MPI_IOCFACTS_CAPABILITY_MULTICAST (0x00000100) | ||
269 | #define MPI_IOCFACTS_CAPABILITY_SCSIIO32 (0x00000200) | ||
270 | #define MPI_IOCFACTS_CAPABILITY_NO_SCSIIO16 (0x00000400) | ||
265 | 271 | ||
266 | 272 | ||
267 | /***************************************************************************** | 273 | /***************************************************************************** |
@@ -677,6 +683,7 @@ typedef struct _EVENT_DATA_DISCOVERY_ERROR | |||
677 | #define MPI_EVENT_DSCVRY_ERR_DS_MULTPL_SUBTRACTIVE (0x00000200) | 683 | #define MPI_EVENT_DSCVRY_ERR_DS_MULTPL_SUBTRACTIVE (0x00000200) |
678 | #define MPI_EVENT_DSCVRY_ERR_DS_TABLE_TO_TABLE (0x00000400) | 684 | #define MPI_EVENT_DSCVRY_ERR_DS_TABLE_TO_TABLE (0x00000400) |
679 | #define MPI_EVENT_DSCVRY_ERR_DS_MULTPL_PATHS (0x00000800) | 685 | #define MPI_EVENT_DSCVRY_ERR_DS_MULTPL_PATHS (0x00000800) |
686 | #define MPI_EVENT_DSCVRY_ERR_DS_MAX_SATA_TARGETS (0x00001000) | ||
680 | 687 | ||
681 | 688 | ||
682 | /***************************************************************************** | 689 | /***************************************************************************** |
diff --git a/drivers/message/fusion/lsi/mpi_targ.h b/drivers/message/fusion/lsi/mpi_targ.h index 623901fd82be..3f462859ceea 100644 --- a/drivers/message/fusion/lsi/mpi_targ.h +++ b/drivers/message/fusion/lsi/mpi_targ.h | |||
@@ -6,7 +6,7 @@ | |||
6 | * Title: MPI Target mode messages and structures | 6 | * Title: MPI Target mode messages and structures |
7 | * Creation Date: June 22, 2000 | 7 | * Creation Date: June 22, 2000 |
8 | * | 8 | * |
9 | * mpi_targ.h Version: 01.05.04 | 9 | * mpi_targ.h Version: 01.05.05 |
10 | * | 10 | * |
11 | * Version History | 11 | * Version History |
12 | * --------------- | 12 | * --------------- |
@@ -53,6 +53,7 @@ | |||
53 | * 10-05-04 01.05.02 MSG_TARGET_CMD_BUFFER_POST_BASE_LIST_REPLY added. | 53 | * 10-05-04 01.05.02 MSG_TARGET_CMD_BUFFER_POST_BASE_LIST_REPLY added. |
54 | * 02-22-05 01.05.03 Changed a comment. | 54 | * 02-22-05 01.05.03 Changed a comment. |
55 | * 03-11-05 01.05.04 Removed TargetAssistExtended Request. | 55 | * 03-11-05 01.05.04 Removed TargetAssistExtended Request. |
56 | * 06-24-05 01.05.05 Added TargetAssistExtended structures and defines. | ||
56 | * -------------------------------------------------------------------------- | 57 | * -------------------------------------------------------------------------- |
57 | */ | 58 | */ |
58 | 59 | ||
@@ -371,6 +372,77 @@ typedef struct _MSG_TARGET_ERROR_REPLY | |||
371 | 372 | ||
372 | 373 | ||
373 | /****************************************************************************/ | 374 | /****************************************************************************/ |
375 | /* Target Assist Extended Request */ | ||
376 | /****************************************************************************/ | ||
377 | |||
378 | typedef struct _MSG_TARGET_ASSIST_EXT_REQUEST | ||
379 | { | ||
380 | U8 StatusCode; /* 00h */ | ||
381 | U8 TargetAssistFlags; /* 01h */ | ||
382 | U8 ChainOffset; /* 02h */ | ||
383 | U8 Function; /* 03h */ | ||
384 | U16 QueueTag; /* 04h */ | ||
385 | U8 Reserved1; /* 06h */ | ||
386 | U8 MsgFlags; /* 07h */ | ||
387 | U32 MsgContext; /* 08h */ | ||
388 | U32 ReplyWord; /* 0Ch */ | ||
389 | U8 LUN[8]; /* 10h */ | ||
390 | U32 RelativeOffset; /* 18h */ | ||
391 | U32 Reserved2; /* 1Ch */ | ||
392 | U32 Reserved3; /* 20h */ | ||
393 | U32 PrimaryReferenceTag; /* 24h */ | ||
394 | U16 PrimaryApplicationTag; /* 28h */ | ||
395 | U16 PrimaryApplicationTagMask; /* 2Ah */ | ||
396 | U32 Reserved4; /* 2Ch */ | ||
397 | U32 DataLength; /* 30h */ | ||
398 | U32 BidirectionalDataLength; /* 34h */ | ||
399 | U32 SecondaryReferenceTag; /* 38h */ | ||
400 | U16 SecondaryApplicationTag; /* 3Ch */ | ||
401 | U16 Reserved5; /* 3Eh */ | ||
402 | U16 EEDPFlags; /* 40h */ | ||
403 | U16 ApplicationTagTranslationMask; /* 42h */ | ||
404 | U32 EEDPBlockSize; /* 44h */ | ||
405 | U8 SGLOffset0; /* 48h */ | ||
406 | U8 SGLOffset1; /* 49h */ | ||
407 | U8 SGLOffset2; /* 4Ah */ | ||
408 | U8 SGLOffset3; /* 4Bh */ | ||
409 | U32 Reserved6; /* 4Ch */ | ||
410 | SGE_IO_UNION SGL[1]; /* 50h */ | ||
411 | } MSG_TARGET_ASSIST_EXT_REQUEST, MPI_POINTER PTR_MSG_TARGET_ASSIST_EXT_REQUEST, | ||
412 | TargetAssistExtRequest_t, MPI_POINTER pTargetAssistExtRequest_t; | ||
413 | |||
414 | /* see the defines after MSG_TARGET_ASSIST_REQUEST for TargetAssistFlags */ | ||
415 | |||
416 | /* defines for the MsgFlags field */ | ||
417 | #define TARGET_ASSIST_EXT_MSGFLAGS_BIDIRECTIONAL (0x20) | ||
418 | #define TARGET_ASSIST_EXT_MSGFLAGS_MULTICAST (0x10) | ||
419 | #define TARGET_ASSIST_EXT_MSGFLAGS_SGL_OFFSET_CHAINS (0x08) | ||
420 | |||
421 | /* defines for the EEDPFlags field */ | ||
422 | #define TARGET_ASSIST_EXT_EEDP_MASK_OP (0x0007) | ||
423 | #define TARGET_ASSIST_EXT_EEDP_NOOP_OP (0x0000) | ||
424 | #define TARGET_ASSIST_EXT_EEDP_CHK_OP (0x0001) | ||
425 | #define TARGET_ASSIST_EXT_EEDP_STRIP_OP (0x0002) | ||
426 | #define TARGET_ASSIST_EXT_EEDP_CHKRM_OP (0x0003) | ||
427 | #define TARGET_ASSIST_EXT_EEDP_INSERT_OP (0x0004) | ||
428 | #define TARGET_ASSIST_EXT_EEDP_REPLACE_OP (0x0006) | ||
429 | #define TARGET_ASSIST_EXT_EEDP_CHKREGEN_OP (0x0007) | ||
430 | |||
431 | #define TARGET_ASSIST_EXT_EEDP_PASS_REF_TAG (0x0008) | ||
432 | |||
433 | #define TARGET_ASSIST_EXT_EEDP_T10_CHK_MASK (0x0700) | ||
434 | #define TARGET_ASSIST_EXT_EEDP_T10_CHK_GUARD (0x0100) | ||
435 | #define TARGET_ASSIST_EXT_EEDP_T10_CHK_APPTAG (0x0200) | ||
436 | #define TARGET_ASSIST_EXT_EEDP_T10_CHK_REFTAG (0x0400) | ||
437 | #define TARGET_ASSIST_EXT_EEDP_T10_CHK_SHIFT (8) | ||
438 | |||
439 | #define TARGET_ASSIST_EXT_EEDP_INC_SEC_APPTAG (0x1000) | ||
440 | #define TARGET_ASSIST_EXT_EEDP_INC_PRI_APPTAG (0x2000) | ||
441 | #define TARGET_ASSIST_EXT_EEDP_INC_SEC_REFTAG (0x4000) | ||
442 | #define TARGET_ASSIST_EXT_EEDP_INC_PRI_REFTAG (0x8000) | ||
443 | |||
444 | |||
445 | /****************************************************************************/ | ||
374 | /* Target Status Send Request */ | 446 | /* Target Status Send Request */ |
375 | /****************************************************************************/ | 447 | /****************************************************************************/ |
376 | 448 | ||
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c index ffbe6f4720e1..f517d0692d5f 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c | |||
@@ -218,8 +218,7 @@ pci_enable_io_access(struct pci_dev *pdev) | |||
218 | * (also referred to as a IO Controller or IOC). | 218 | * (also referred to as a IO Controller or IOC). |
219 | * This routine must clear the interrupt from the adapter and does | 219 | * This routine must clear the interrupt from the adapter and does |
220 | * so by reading the reply FIFO. Multiple replies may be processed | 220 | * so by reading the reply FIFO. Multiple replies may be processed |
221 | * per single call to this routine; up to MPT_MAX_REPLIES_PER_ISR | 221 | * per single call to this routine. |
222 | * which is currently set to 32 in mptbase.h. | ||
223 | * | 222 | * |
224 | * This routine handles register-level access of the adapter but | 223 | * This routine handles register-level access of the adapter but |
225 | * dispatches (calls) a protocol-specific callback routine to handle | 224 | * dispatches (calls) a protocol-specific callback routine to handle |
@@ -279,11 +278,11 @@ mpt_interrupt(int irq, void *bus_id, struct pt_regs *r) | |||
279 | cb_idx = mr->u.frame.hwhdr.msgctxu.fld.cb_idx; | 278 | cb_idx = mr->u.frame.hwhdr.msgctxu.fld.cb_idx; |
280 | mf = MPT_INDEX_2_MFPTR(ioc, req_idx); | 279 | mf = MPT_INDEX_2_MFPTR(ioc, req_idx); |
281 | 280 | ||
282 | dmfprintk((MYIOC_s_INFO_FMT "Got non-TURBO reply=%p req_idx=%x\n", | 281 | dmfprintk((MYIOC_s_INFO_FMT "Got non-TURBO reply=%p req_idx=%x cb_idx=%x Function=%x\n", |
283 | ioc->name, mr, req_idx)); | 282 | ioc->name, mr, req_idx, cb_idx, mr->u.hdr.Function)); |
284 | DBG_DUMP_REPLY_FRAME(mr) | 283 | DBG_DUMP_REPLY_FRAME(mr) |
285 | 284 | ||
286 | /* Check/log IOC log info | 285 | /* Check/log IOC log info |
287 | */ | 286 | */ |
288 | ioc_stat = le16_to_cpu(mr->u.reply.IOCStatus); | 287 | ioc_stat = le16_to_cpu(mr->u.reply.IOCStatus); |
289 | if (ioc_stat & MPI_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE) { | 288 | if (ioc_stat & MPI_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE) { |
@@ -345,7 +344,7 @@ mpt_interrupt(int irq, void *bus_id, struct pt_regs *r) | |||
345 | if ((mf) && ((mf >= MPT_INDEX_2_MFPTR(ioc, ioc->req_depth)) | 344 | if ((mf) && ((mf >= MPT_INDEX_2_MFPTR(ioc, ioc->req_depth)) |
346 | || (mf < ioc->req_frames)) ) { | 345 | || (mf < ioc->req_frames)) ) { |
347 | printk(MYIOC_s_WARN_FMT | 346 | printk(MYIOC_s_WARN_FMT |
348 | "mpt_interrupt: Invalid mf (%p) req_idx (%d)!\n", ioc->name, (void *)mf, req_idx); | 347 | "mpt_interrupt: Invalid mf (%p)!\n", ioc->name, (void *)mf); |
349 | cb_idx = 0; | 348 | cb_idx = 0; |
350 | pa = 0; | 349 | pa = 0; |
351 | freeme = 0; | 350 | freeme = 0; |
@@ -399,7 +398,7 @@ mpt_interrupt(int irq, void *bus_id, struct pt_regs *r) | |||
399 | * @mf: Pointer to original MPT request frame | 398 | * @mf: Pointer to original MPT request frame |
400 | * @reply: Pointer to MPT reply frame (NULL if TurboReply) | 399 | * @reply: Pointer to MPT reply frame (NULL if TurboReply) |
401 | * | 400 | * |
402 | * Returns 1 indicating original alloc'd request frame ptr | 401 | * Returns 1 indicating original alloc'd request frame ptr |
403 | * should be freed, or 0 if it shouldn't. | 402 | * should be freed, or 0 if it shouldn't. |
404 | */ | 403 | */ |
405 | static int | 404 | static int |
@@ -408,28 +407,17 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply) | |||
408 | int freereq = 1; | 407 | int freereq = 1; |
409 | u8 func; | 408 | u8 func; |
410 | 409 | ||
411 | dprintk((MYIOC_s_INFO_FMT "mpt_base_reply() called\n", ioc->name)); | 410 | dmfprintk((MYIOC_s_INFO_FMT "mpt_base_reply() called\n", ioc->name)); |
412 | |||
413 | if ((mf == NULL) || | ||
414 | (mf >= MPT_INDEX_2_MFPTR(ioc, ioc->req_depth))) { | ||
415 | printk(MYIOC_s_ERR_FMT "NULL or BAD request frame ptr! (=%p)\n", | ||
416 | ioc->name, (void *)mf); | ||
417 | return 1; | ||
418 | } | ||
419 | |||
420 | if (reply == NULL) { | ||
421 | dprintk((MYIOC_s_ERR_FMT "Unexpected NULL Event (turbo?) reply!\n", | ||
422 | ioc->name)); | ||
423 | return 1; | ||
424 | } | ||
425 | 411 | ||
412 | #if defined(MPT_DEBUG_MSG_FRAME) | ||
426 | if (!(reply->u.hdr.MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY)) { | 413 | if (!(reply->u.hdr.MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY)) { |
427 | dmfprintk((KERN_INFO MYNAM ": Original request frame (@%p) header\n", mf)); | 414 | dmfprintk((KERN_INFO MYNAM ": Original request frame (@%p) header\n", mf)); |
428 | DBG_DUMP_REQUEST_FRAME_HDR(mf) | 415 | DBG_DUMP_REQUEST_FRAME_HDR(mf) |
429 | } | 416 | } |
417 | #endif | ||
430 | 418 | ||
431 | func = reply->u.hdr.Function; | 419 | func = reply->u.hdr.Function; |
432 | dprintk((MYIOC_s_INFO_FMT "mpt_base_reply, Function=%02Xh\n", | 420 | dmfprintk((MYIOC_s_INFO_FMT "mpt_base_reply, Function=%02Xh\n", |
433 | ioc->name, func)); | 421 | ioc->name, func)); |
434 | 422 | ||
435 | if (func == MPI_FUNCTION_EVENT_NOTIFICATION) { | 423 | if (func == MPI_FUNCTION_EVENT_NOTIFICATION) { |
@@ -448,8 +436,14 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply) | |||
448 | * Hmmm... It seems that EventNotificationReply is an exception | 436 | * Hmmm... It seems that EventNotificationReply is an exception |
449 | * to the rule of one reply per request. | 437 | * to the rule of one reply per request. |
450 | */ | 438 | */ |
451 | if (pEvReply->MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY) | 439 | if (pEvReply->MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY) { |
452 | freereq = 0; | 440 | freereq = 0; |
441 | devtprintk((MYIOC_s_WARN_FMT "EVENT_NOTIFICATION reply %p does not return Request frame\n", | ||
442 | ioc->name, pEvReply)); | ||
443 | } else { | ||
444 | devtprintk((MYIOC_s_WARN_FMT "EVENT_NOTIFICATION reply %p returns Request frame\n", | ||
445 | ioc->name, pEvReply)); | ||
446 | } | ||
453 | 447 | ||
454 | #ifdef CONFIG_PROC_FS | 448 | #ifdef CONFIG_PROC_FS |
455 | // LogEvent(ioc, pEvReply); | 449 | // LogEvent(ioc, pEvReply); |
@@ -491,10 +485,21 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply) | |||
491 | 485 | ||
492 | pCfg->status = status; | 486 | pCfg->status = status; |
493 | if (status == MPI_IOCSTATUS_SUCCESS) { | 487 | if (status == MPI_IOCSTATUS_SUCCESS) { |
494 | pCfg->hdr->PageVersion = pReply->Header.PageVersion; | 488 | if ((pReply->Header.PageType & |
495 | pCfg->hdr->PageLength = pReply->Header.PageLength; | 489 | MPI_CONFIG_PAGETYPE_MASK) == |
496 | pCfg->hdr->PageNumber = pReply->Header.PageNumber; | 490 | MPI_CONFIG_PAGETYPE_EXTENDED) { |
497 | pCfg->hdr->PageType = pReply->Header.PageType; | 491 | pCfg->cfghdr.ehdr->ExtPageLength = |
492 | le16_to_cpu(pReply->ExtPageLength); | ||
493 | pCfg->cfghdr.ehdr->ExtPageType = | ||
494 | pReply->ExtPageType; | ||
495 | } | ||
496 | pCfg->cfghdr.hdr->PageVersion = pReply->Header.PageVersion; | ||
497 | |||
498 | /* If this is a regular header, save PageLength. */ | ||
499 | /* LMP Do this better so not using a reserved field! */ | ||
500 | pCfg->cfghdr.hdr->PageLength = pReply->Header.PageLength; | ||
501 | pCfg->cfghdr.hdr->PageNumber = pReply->Header.PageNumber; | ||
502 | pCfg->cfghdr.hdr->PageType = pReply->Header.PageType; | ||
498 | } | 503 | } |
499 | } | 504 | } |
500 | 505 | ||
@@ -705,7 +710,7 @@ mpt_device_driver_deregister(int cb_idx) | |||
705 | if (dd_cbfunc->remove) | 710 | if (dd_cbfunc->remove) |
706 | dd_cbfunc->remove(ioc->pcidev); | 711 | dd_cbfunc->remove(ioc->pcidev); |
707 | } | 712 | } |
708 | 713 | ||
709 | MptDeviceDriverHandlers[cb_idx] = NULL; | 714 | MptDeviceDriverHandlers[cb_idx] = NULL; |
710 | } | 715 | } |
711 | 716 | ||
@@ -818,7 +823,7 @@ mpt_put_msg_frame(int handle, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf) | |||
818 | } | 823 | } |
819 | #endif | 824 | #endif |
820 | 825 | ||
821 | mf_dma_addr = (ioc->req_frames_low_dma + req_offset) | ioc->RequestNB[req_idx]; | 826 | mf_dma_addr = (ioc->req_frames_low_dma + req_offset) | ioc->RequestNB[req_idx]; |
822 | dsgprintk((MYIOC_s_INFO_FMT "mf_dma_addr=%x req_idx=%d RequestNB=%x\n", ioc->name, mf_dma_addr, req_idx, ioc->RequestNB[req_idx])); | 827 | dsgprintk((MYIOC_s_INFO_FMT "mf_dma_addr=%x req_idx=%d RequestNB=%x\n", ioc->name, mf_dma_addr, req_idx, ioc->RequestNB[req_idx])); |
823 | CHIPREG_WRITE32(&ioc->chip->RequestFifo, mf_dma_addr); | 828 | CHIPREG_WRITE32(&ioc->chip->RequestFifo, mf_dma_addr); |
824 | } | 829 | } |
@@ -920,7 +925,7 @@ mpt_send_handshake_request(int handle, MPT_ADAPTER *ioc, int reqBytes, u32 *req, | |||
920 | 925 | ||
921 | /* Make sure there are no doorbells */ | 926 | /* Make sure there are no doorbells */ |
922 | CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); | 927 | CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); |
923 | 928 | ||
924 | CHIPREG_WRITE32(&ioc->chip->Doorbell, | 929 | CHIPREG_WRITE32(&ioc->chip->Doorbell, |
925 | ((MPI_FUNCTION_HANDSHAKE<<MPI_DOORBELL_FUNCTION_SHIFT) | | 930 | ((MPI_FUNCTION_HANDSHAKE<<MPI_DOORBELL_FUNCTION_SHIFT) | |
926 | ((reqBytes/4)<<MPI_DOORBELL_ADD_DWORDS_SHIFT))); | 931 | ((reqBytes/4)<<MPI_DOORBELL_ADD_DWORDS_SHIFT))); |
@@ -935,14 +940,14 @@ mpt_send_handshake_request(int handle, MPT_ADAPTER *ioc, int reqBytes, u32 *req, | |||
935 | return -5; | 940 | return -5; |
936 | 941 | ||
937 | dhsprintk((KERN_INFO MYNAM ": %s: mpt_send_handshake_request start, WaitCnt=%d\n", | 942 | dhsprintk((KERN_INFO MYNAM ": %s: mpt_send_handshake_request start, WaitCnt=%d\n", |
938 | ioc->name, ii)); | 943 | ioc->name, ii)); |
939 | 944 | ||
940 | CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); | 945 | CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); |
941 | 946 | ||
942 | if ((r = WaitForDoorbellAck(ioc, 5, sleepFlag)) < 0) { | 947 | if ((r = WaitForDoorbellAck(ioc, 5, sleepFlag)) < 0) { |
943 | return -2; | 948 | return -2; |
944 | } | 949 | } |
945 | 950 | ||
946 | /* Send request via doorbell handshake */ | 951 | /* Send request via doorbell handshake */ |
947 | req_as_bytes = (u8 *) req; | 952 | req_as_bytes = (u8 *) req; |
948 | for (ii = 0; ii < reqBytes/4; ii++) { | 953 | for (ii = 0; ii < reqBytes/4; ii++) { |
@@ -988,9 +993,9 @@ mpt_verify_adapter(int iocid, MPT_ADAPTER **iocpp) | |||
988 | if (ioc->id == iocid) { | 993 | if (ioc->id == iocid) { |
989 | *iocpp =ioc; | 994 | *iocpp =ioc; |
990 | return iocid; | 995 | return iocid; |
991 | } | 996 | } |
992 | } | 997 | } |
993 | 998 | ||
994 | *iocpp = NULL; | 999 | *iocpp = NULL; |
995 | return -1; | 1000 | return -1; |
996 | } | 1001 | } |
@@ -1032,9 +1037,9 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1032 | 1037 | ||
1033 | if (pci_enable_device(pdev)) | 1038 | if (pci_enable_device(pdev)) |
1034 | return r; | 1039 | return r; |
1035 | 1040 | ||
1036 | dinitprintk((KERN_WARNING MYNAM ": mpt_adapter_install\n")); | 1041 | dinitprintk((KERN_WARNING MYNAM ": mpt_adapter_install\n")); |
1037 | 1042 | ||
1038 | if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { | 1043 | if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) { |
1039 | dprintk((KERN_INFO MYNAM | 1044 | dprintk((KERN_INFO MYNAM |
1040 | ": 64 BIT PCI BUS DMA ADDRESSING SUPPORTED\n")); | 1045 | ": 64 BIT PCI BUS DMA ADDRESSING SUPPORTED\n")); |
@@ -1059,7 +1064,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1059 | ioc->alloc_total = sizeof(MPT_ADAPTER); | 1064 | ioc->alloc_total = sizeof(MPT_ADAPTER); |
1060 | ioc->req_sz = MPT_DEFAULT_FRAME_SIZE; /* avoid div by zero! */ | 1065 | ioc->req_sz = MPT_DEFAULT_FRAME_SIZE; /* avoid div by zero! */ |
1061 | ioc->reply_sz = MPT_REPLY_FRAME_SIZE; | 1066 | ioc->reply_sz = MPT_REPLY_FRAME_SIZE; |
1062 | 1067 | ||
1063 | ioc->pcidev = pdev; | 1068 | ioc->pcidev = pdev; |
1064 | ioc->diagPending = 0; | 1069 | ioc->diagPending = 0; |
1065 | spin_lock_init(&ioc->diagLock); | 1070 | spin_lock_init(&ioc->diagLock); |
@@ -1088,7 +1093,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1088 | /* Find lookup slot. */ | 1093 | /* Find lookup slot. */ |
1089 | INIT_LIST_HEAD(&ioc->list); | 1094 | INIT_LIST_HEAD(&ioc->list); |
1090 | ioc->id = mpt_ids++; | 1095 | ioc->id = mpt_ids++; |
1091 | 1096 | ||
1092 | mem_phys = msize = 0; | 1097 | mem_phys = msize = 0; |
1093 | port = psize = 0; | 1098 | port = psize = 0; |
1094 | for (ii=0; ii < DEVICE_COUNT_RESOURCE; ii++) { | 1099 | for (ii=0; ii < DEVICE_COUNT_RESOURCE; ii++) { |
@@ -1143,7 +1148,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1143 | ioc->prod_name = "LSIFC909"; | 1148 | ioc->prod_name = "LSIFC909"; |
1144 | ioc->bus_type = FC; | 1149 | ioc->bus_type = FC; |
1145 | } | 1150 | } |
1146 | if (pdev->device == MPI_MANUFACTPAGE_DEVICEID_FC929) { | 1151 | else if (pdev->device == MPI_MANUFACTPAGE_DEVICEID_FC929) { |
1147 | ioc->prod_name = "LSIFC929"; | 1152 | ioc->prod_name = "LSIFC929"; |
1148 | ioc->bus_type = FC; | 1153 | ioc->bus_type = FC; |
1149 | } | 1154 | } |
@@ -1322,7 +1327,7 @@ mpt_detach(struct pci_dev *pdev) | |||
1322 | remove_proc_entry(pname, NULL); | 1327 | remove_proc_entry(pname, NULL); |
1323 | sprintf(pname, MPT_PROCFS_MPTBASEDIR "/%s", ioc->name); | 1328 | sprintf(pname, MPT_PROCFS_MPTBASEDIR "/%s", ioc->name); |
1324 | remove_proc_entry(pname, NULL); | 1329 | remove_proc_entry(pname, NULL); |
1325 | 1330 | ||
1326 | /* call per device driver remove entry point */ | 1331 | /* call per device driver remove entry point */ |
1327 | for(ii=0; ii<MPT_MAX_PROTOCOL_DRIVERS; ii++) { | 1332 | for(ii=0; ii<MPT_MAX_PROTOCOL_DRIVERS; ii++) { |
1328 | if(MptDeviceDriverHandlers[ii] && | 1333 | if(MptDeviceDriverHandlers[ii] && |
@@ -1330,7 +1335,7 @@ mpt_detach(struct pci_dev *pdev) | |||
1330 | MptDeviceDriverHandlers[ii]->remove(pdev); | 1335 | MptDeviceDriverHandlers[ii]->remove(pdev); |
1331 | } | 1336 | } |
1332 | } | 1337 | } |
1333 | 1338 | ||
1334 | /* Disable interrupts! */ | 1339 | /* Disable interrupts! */ |
1335 | CHIPREG_WRITE32(&ioc->chip->IntMask, 0xFFFFFFFF); | 1340 | CHIPREG_WRITE32(&ioc->chip->IntMask, 0xFFFFFFFF); |
1336 | 1341 | ||
@@ -1403,7 +1408,7 @@ mpt_resume(struct pci_dev *pdev) | |||
1403 | u32 device_state = pdev->current_state; | 1408 | u32 device_state = pdev->current_state; |
1404 | int recovery_state; | 1409 | int recovery_state; |
1405 | int ii; | 1410 | int ii; |
1406 | 1411 | ||
1407 | printk(MYIOC_s_INFO_FMT | 1412 | printk(MYIOC_s_INFO_FMT |
1408 | "pci-resume: pdev=0x%p, slot=%s, Previous operating state [D%d]\n", | 1413 | "pci-resume: pdev=0x%p, slot=%s, Previous operating state [D%d]\n", |
1409 | ioc->name, pdev, pci_name(pdev), device_state); | 1414 | ioc->name, pdev, pci_name(pdev), device_state); |
@@ -1534,7 +1539,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag) | |||
1534 | if ((rc = GetIocFacts(ioc, sleepFlag, reason)) == 0) | 1539 | if ((rc = GetIocFacts(ioc, sleepFlag, reason)) == 0) |
1535 | break; | 1540 | break; |
1536 | } | 1541 | } |
1537 | 1542 | ||
1538 | 1543 | ||
1539 | if (ii == 5) { | 1544 | if (ii == 5) { |
1540 | dinitprintk((MYIOC_s_INFO_FMT "Retry IocFacts failed rc=%x\n", ioc->name, rc)); | 1545 | dinitprintk((MYIOC_s_INFO_FMT "Retry IocFacts failed rc=%x\n", ioc->name, rc)); |
@@ -1542,7 +1547,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag) | |||
1542 | } else if (reason == MPT_HOSTEVENT_IOC_BRINGUP) { | 1547 | } else if (reason == MPT_HOSTEVENT_IOC_BRINGUP) { |
1543 | MptDisplayIocCapabilities(ioc); | 1548 | MptDisplayIocCapabilities(ioc); |
1544 | } | 1549 | } |
1545 | 1550 | ||
1546 | if (alt_ioc_ready) { | 1551 | if (alt_ioc_ready) { |
1547 | if ((rc = GetIocFacts(ioc->alt_ioc, sleepFlag, reason)) != 0) { | 1552 | if ((rc = GetIocFacts(ioc->alt_ioc, sleepFlag, reason)) != 0) { |
1548 | dinitprintk((MYIOC_s_INFO_FMT "Initial Alt IocFacts failed rc=%x\n", ioc->name, rc)); | 1553 | dinitprintk((MYIOC_s_INFO_FMT "Initial Alt IocFacts failed rc=%x\n", ioc->name, rc)); |
@@ -1613,7 +1618,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag) | |||
1613 | 1618 | ||
1614 | if (reset_alt_ioc_active && ioc->alt_ioc) { | 1619 | if (reset_alt_ioc_active && ioc->alt_ioc) { |
1615 | /* (re)Enable alt-IOC! (reply interrupt) */ | 1620 | /* (re)Enable alt-IOC! (reply interrupt) */ |
1616 | dprintk((KERN_INFO MYNAM ": alt-%s reply irq re-enabled\n", | 1621 | dinitprintk((KERN_INFO MYNAM ": alt-%s reply irq re-enabled\n", |
1617 | ioc->alt_ioc->name)); | 1622 | ioc->alt_ioc->name)); |
1618 | CHIPREG_WRITE32(&ioc->alt_ioc->chip->IntMask, ~(MPI_HIM_RIM)); | 1623 | CHIPREG_WRITE32(&ioc->alt_ioc->chip->IntMask, ~(MPI_HIM_RIM)); |
1619 | ioc->alt_ioc->active = 1; | 1624 | ioc->alt_ioc->active = 1; |
@@ -1670,7 +1675,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag) | |||
1670 | 1675 | ||
1671 | /* Find IM volumes | 1676 | /* Find IM volumes |
1672 | */ | 1677 | */ |
1673 | if (ioc->facts.MsgVersion >= 0x0102) | 1678 | if (ioc->facts.MsgVersion >= MPI_VERSION_01_02) |
1674 | mpt_findImVolumes(ioc); | 1679 | mpt_findImVolumes(ioc); |
1675 | 1680 | ||
1676 | /* Check, and possibly reset, the coalescing value | 1681 | /* Check, and possibly reset, the coalescing value |
@@ -1700,7 +1705,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag) | |||
1700 | } | 1705 | } |
1701 | 1706 | ||
1702 | if (alt_ioc_ready && MptResetHandlers[ii]) { | 1707 | if (alt_ioc_ready && MptResetHandlers[ii]) { |
1703 | dprintk((MYIOC_s_INFO_FMT "Calling alt-%s post_reset handler #%d\n", | 1708 | drsprintk((MYIOC_s_INFO_FMT "Calling alt-%s post_reset handler #%d\n", |
1704 | ioc->name, ioc->alt_ioc->name, ii)); | 1709 | ioc->name, ioc->alt_ioc->name, ii)); |
1705 | rc += (*(MptResetHandlers[ii]))(ioc->alt_ioc, MPT_IOC_POST_RESET); | 1710 | rc += (*(MptResetHandlers[ii]))(ioc->alt_ioc, MPT_IOC_POST_RESET); |
1706 | handlers++; | 1711 | handlers++; |
@@ -1733,8 +1738,8 @@ mpt_detect_bound_ports(MPT_ADAPTER *ioc, struct pci_dev *pdev) | |||
1733 | 1738 | ||
1734 | dprintk((MYIOC_s_INFO_FMT "PCI device %s devfn=%x/%x," | 1739 | dprintk((MYIOC_s_INFO_FMT "PCI device %s devfn=%x/%x," |
1735 | " searching for devfn match on %x or %x\n", | 1740 | " searching for devfn match on %x or %x\n", |
1736 | ioc->name, pci_name(pdev), pdev->devfn, | 1741 | ioc->name, pci_name(pdev), pdev->bus->number, |
1737 | func-1, func+1)); | 1742 | pdev->devfn, func-1, func+1)); |
1738 | 1743 | ||
1739 | peer = pci_get_slot(pdev->bus, PCI_DEVFN(slot,func-1)); | 1744 | peer = pci_get_slot(pdev->bus, PCI_DEVFN(slot,func-1)); |
1740 | if (!peer) { | 1745 | if (!peer) { |
@@ -1861,36 +1866,39 @@ mpt_adapter_disable(MPT_ADAPTER *ioc) | |||
1861 | static void | 1866 | static void |
1862 | mpt_adapter_dispose(MPT_ADAPTER *ioc) | 1867 | mpt_adapter_dispose(MPT_ADAPTER *ioc) |
1863 | { | 1868 | { |
1864 | if (ioc != NULL) { | 1869 | int sz_first, sz_last; |
1865 | int sz_first, sz_last; | ||
1866 | 1870 | ||
1867 | sz_first = ioc->alloc_total; | 1871 | if (ioc == NULL) |
1872 | return; | ||
1868 | 1873 | ||
1869 | mpt_adapter_disable(ioc); | 1874 | sz_first = ioc->alloc_total; |
1870 | 1875 | ||
1871 | if (ioc->pci_irq != -1) { | 1876 | mpt_adapter_disable(ioc); |
1872 | free_irq(ioc->pci_irq, ioc); | ||
1873 | ioc->pci_irq = -1; | ||
1874 | } | ||
1875 | 1877 | ||
1876 | if (ioc->memmap != NULL) | 1878 | if (ioc->pci_irq != -1) { |
1877 | iounmap(ioc->memmap); | 1879 | free_irq(ioc->pci_irq, ioc); |
1880 | ioc->pci_irq = -1; | ||
1881 | } | ||
1882 | |||
1883 | if (ioc->memmap != NULL) { | ||
1884 | iounmap(ioc->memmap); | ||
1885 | ioc->memmap = NULL; | ||
1886 | } | ||
1878 | 1887 | ||
1879 | #if defined(CONFIG_MTRR) && 0 | 1888 | #if defined(CONFIG_MTRR) && 0 |
1880 | if (ioc->mtrr_reg > 0) { | 1889 | if (ioc->mtrr_reg > 0) { |
1881 | mtrr_del(ioc->mtrr_reg, 0, 0); | 1890 | mtrr_del(ioc->mtrr_reg, 0, 0); |
1882 | dprintk((KERN_INFO MYNAM ": %s: MTRR region de-registered\n", ioc->name)); | 1891 | dprintk((KERN_INFO MYNAM ": %s: MTRR region de-registered\n", ioc->name)); |
1883 | } | 1892 | } |
1884 | #endif | 1893 | #endif |
1885 | 1894 | ||
1886 | /* Zap the adapter lookup ptr! */ | 1895 | /* Zap the adapter lookup ptr! */ |
1887 | list_del(&ioc->list); | 1896 | list_del(&ioc->list); |
1888 | 1897 | ||
1889 | sz_last = ioc->alloc_total; | 1898 | sz_last = ioc->alloc_total; |
1890 | dprintk((KERN_INFO MYNAM ": %s: free'd %d of %d bytes\n", | 1899 | dprintk((KERN_INFO MYNAM ": %s: free'd %d of %d bytes\n", |
1891 | ioc->name, sz_first-sz_last+(int)sizeof(*ioc), sz_first)); | 1900 | ioc->name, sz_first-sz_last+(int)sizeof(*ioc), sz_first)); |
1892 | kfree(ioc); | 1901 | kfree(ioc); |
1893 | } | ||
1894 | } | 1902 | } |
1895 | 1903 | ||
1896 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ | 1904 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ |
@@ -1977,7 +1985,7 @@ MakeIocReady(MPT_ADAPTER *ioc, int force, int sleepFlag) | |||
1977 | } | 1985 | } |
1978 | 1986 | ||
1979 | /* Is it already READY? */ | 1987 | /* Is it already READY? */ |
1980 | if (!statefault && (ioc_state & MPI_IOC_STATE_MASK) == MPI_IOC_STATE_READY) | 1988 | if (!statefault && (ioc_state & MPI_IOC_STATE_MASK) == MPI_IOC_STATE_READY) |
1981 | return 0; | 1989 | return 0; |
1982 | 1990 | ||
1983 | /* | 1991 | /* |
@@ -1995,7 +2003,7 @@ MakeIocReady(MPT_ADAPTER *ioc, int force, int sleepFlag) | |||
1995 | * Hmmm... Did it get left operational? | 2003 | * Hmmm... Did it get left operational? |
1996 | */ | 2004 | */ |
1997 | if ((ioc_state & MPI_IOC_STATE_MASK) == MPI_IOC_STATE_OPERATIONAL) { | 2005 | if ((ioc_state & MPI_IOC_STATE_MASK) == MPI_IOC_STATE_OPERATIONAL) { |
1998 | dinitprintk((MYIOC_s_WARN_FMT "IOC operational unexpected\n", | 2006 | dinitprintk((MYIOC_s_INFO_FMT "IOC operational unexpected\n", |
1999 | ioc->name)); | 2007 | ioc->name)); |
2000 | 2008 | ||
2001 | /* Check WhoInit. | 2009 | /* Check WhoInit. |
@@ -2004,8 +2012,8 @@ MakeIocReady(MPT_ADAPTER *ioc, int force, int sleepFlag) | |||
2004 | * Else, fall through to KickStart case | 2012 | * Else, fall through to KickStart case |
2005 | */ | 2013 | */ |
2006 | whoinit = (ioc_state & MPI_DOORBELL_WHO_INIT_MASK) >> MPI_DOORBELL_WHO_INIT_SHIFT; | 2014 | whoinit = (ioc_state & MPI_DOORBELL_WHO_INIT_MASK) >> MPI_DOORBELL_WHO_INIT_SHIFT; |
2007 | dprintk((KERN_WARNING MYNAM | 2015 | dinitprintk((KERN_INFO MYNAM |
2008 | ": whoinit 0x%x\n statefault %d force %d\n", | 2016 | ": whoinit 0x%x statefault %d force %d\n", |
2009 | whoinit, statefault, force)); | 2017 | whoinit, statefault, force)); |
2010 | if (whoinit == MPI_WHOINIT_PCI_PEER) | 2018 | if (whoinit == MPI_WHOINIT_PCI_PEER) |
2011 | return -4; | 2019 | return -4; |
@@ -2140,8 +2148,8 @@ GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason) | |||
2140 | get_facts.Function = MPI_FUNCTION_IOC_FACTS; | 2148 | get_facts.Function = MPI_FUNCTION_IOC_FACTS; |
2141 | /* Assert: All other get_facts fields are zero! */ | 2149 | /* Assert: All other get_facts fields are zero! */ |
2142 | 2150 | ||
2143 | dinitprintk((MYIOC_s_INFO_FMT | 2151 | dinitprintk((MYIOC_s_INFO_FMT |
2144 | "Sending get IocFacts request req_sz=%d reply_sz=%d\n", | 2152 | "Sending get IocFacts request req_sz=%d reply_sz=%d\n", |
2145 | ioc->name, req_sz, reply_sz)); | 2153 | ioc->name, req_sz, reply_sz)); |
2146 | 2154 | ||
2147 | /* No non-zero fields in the get_facts request are greater than | 2155 | /* No non-zero fields in the get_facts request are greater than |
@@ -2174,7 +2182,7 @@ GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason) | |||
2174 | facts->IOCExceptions = le16_to_cpu(facts->IOCExceptions); | 2182 | facts->IOCExceptions = le16_to_cpu(facts->IOCExceptions); |
2175 | facts->IOCStatus = le16_to_cpu(facts->IOCStatus); | 2183 | facts->IOCStatus = le16_to_cpu(facts->IOCStatus); |
2176 | facts->IOCLogInfo = le32_to_cpu(facts->IOCLogInfo); | 2184 | facts->IOCLogInfo = le32_to_cpu(facts->IOCLogInfo); |
2177 | status = facts->IOCStatus & MPI_IOCSTATUS_MASK; | 2185 | status = le16_to_cpu(facts->IOCStatus) & MPI_IOCSTATUS_MASK; |
2178 | /* CHECKME! IOCStatus, IOCLogInfo */ | 2186 | /* CHECKME! IOCStatus, IOCLogInfo */ |
2179 | 2187 | ||
2180 | facts->ReplyQueueDepth = le16_to_cpu(facts->ReplyQueueDepth); | 2188 | facts->ReplyQueueDepth = le16_to_cpu(facts->ReplyQueueDepth); |
@@ -2221,7 +2229,7 @@ GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason) | |||
2221 | if ( sz & 0x02 ) | 2229 | if ( sz & 0x02 ) |
2222 | sz += 2; | 2230 | sz += 2; |
2223 | facts->FWImageSize = sz; | 2231 | facts->FWImageSize = sz; |
2224 | 2232 | ||
2225 | if (!facts->RequestFrameSize) { | 2233 | if (!facts->RequestFrameSize) { |
2226 | /* Something is wrong! */ | 2234 | /* Something is wrong! */ |
2227 | printk(MYIOC_s_ERR_FMT "IOC reported invalid 0 request size!\n", | 2235 | printk(MYIOC_s_ERR_FMT "IOC reported invalid 0 request size!\n", |
@@ -2240,7 +2248,7 @@ GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason) | |||
2240 | ioc->NBShiftFactor = shiftFactor; | 2248 | ioc->NBShiftFactor = shiftFactor; |
2241 | dinitprintk((MYIOC_s_INFO_FMT "NB_for_64_byte_frame=%x NBShiftFactor=%x BlockSize=%x\n", | 2249 | dinitprintk((MYIOC_s_INFO_FMT "NB_for_64_byte_frame=%x NBShiftFactor=%x BlockSize=%x\n", |
2242 | ioc->name, vv, shiftFactor, r)); | 2250 | ioc->name, vv, shiftFactor, r)); |
2243 | 2251 | ||
2244 | if (reason == MPT_HOSTEVENT_IOC_BRINGUP) { | 2252 | if (reason == MPT_HOSTEVENT_IOC_BRINGUP) { |
2245 | /* | 2253 | /* |
2246 | * Set values for this IOC's request & reply frame sizes, | 2254 | * Set values for this IOC's request & reply frame sizes, |
@@ -2261,7 +2269,7 @@ GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason) | |||
2261 | return r; | 2269 | return r; |
2262 | } | 2270 | } |
2263 | } else { | 2271 | } else { |
2264 | printk(MYIOC_s_ERR_FMT | 2272 | printk(MYIOC_s_ERR_FMT |
2265 | "Invalid IOC facts reply, msgLength=%d offsetof=%zd!\n", | 2273 | "Invalid IOC facts reply, msgLength=%d offsetof=%zd!\n", |
2266 | ioc->name, facts->MsgLength, (offsetof(IOCFactsReply_t, | 2274 | ioc->name, facts->MsgLength, (offsetof(IOCFactsReply_t, |
2267 | RequestFrameSize)/sizeof(u32))); | 2275 | RequestFrameSize)/sizeof(u32))); |
@@ -2413,9 +2421,11 @@ SendIocInit(MPT_ADAPTER *ioc, int sleepFlag) | |||
2413 | 2421 | ||
2414 | dhsprintk((MYIOC_s_INFO_FMT "Sending PortEnable (req @ %p)\n", | 2422 | dhsprintk((MYIOC_s_INFO_FMT "Sending PortEnable (req @ %p)\n", |
2415 | ioc->name, &ioc_init)); | 2423 | ioc->name, &ioc_init)); |
2416 | 2424 | ||
2417 | if ((r = SendPortEnable(ioc, 0, sleepFlag)) != 0) | 2425 | if ((r = SendPortEnable(ioc, 0, sleepFlag)) != 0) { |
2426 | printk(MYIOC_s_ERR_FMT "Sending PortEnable failed(%d)!\n",ioc->name, r); | ||
2418 | return r; | 2427 | return r; |
2428 | } | ||
2419 | 2429 | ||
2420 | /* YIKES! SUPER IMPORTANT!!! | 2430 | /* YIKES! SUPER IMPORTANT!!! |
2421 | * Poll IocState until _OPERATIONAL while IOC is doing | 2431 | * Poll IocState until _OPERATIONAL while IOC is doing |
@@ -2440,7 +2450,7 @@ SendIocInit(MPT_ADAPTER *ioc, int sleepFlag) | |||
2440 | state = mpt_GetIocState(ioc, 1); | 2450 | state = mpt_GetIocState(ioc, 1); |
2441 | count++; | 2451 | count++; |
2442 | } | 2452 | } |
2443 | dhsprintk((MYIOC_s_INFO_FMT "INFO - Wait IOC_OPERATIONAL state (cnt=%d)\n", | 2453 | dinitprintk((MYIOC_s_INFO_FMT "INFO - Wait IOC_OPERATIONAL state (cnt=%d)\n", |
2444 | ioc->name, count)); | 2454 | ioc->name, count)); |
2445 | 2455 | ||
2446 | return r; | 2456 | return r; |
@@ -2529,7 +2539,7 @@ mpt_free_fw_memory(MPT_ADAPTER *ioc) | |||
2529 | int sz; | 2539 | int sz; |
2530 | 2540 | ||
2531 | sz = ioc->facts.FWImageSize; | 2541 | sz = ioc->facts.FWImageSize; |
2532 | dinitprintk((KERN_WARNING MYNAM "free_fw_memory: FW Image @ %p[%p], sz=%d[%x] bytes\n", | 2542 | dinitprintk((KERN_INFO MYNAM "free_fw_memory: FW Image @ %p[%p], sz=%d[%x] bytes\n", |
2533 | ioc->cached_fw, (void *)(ulong)ioc->cached_fw_dma, sz, sz)); | 2543 | ioc->cached_fw, (void *)(ulong)ioc->cached_fw_dma, sz, sz)); |
2534 | pci_free_consistent(ioc->pcidev, sz, | 2544 | pci_free_consistent(ioc->pcidev, sz, |
2535 | ioc->cached_fw, ioc->cached_fw_dma); | 2545 | ioc->cached_fw, ioc->cached_fw_dma); |
@@ -2573,9 +2583,9 @@ mpt_do_upload(MPT_ADAPTER *ioc, int sleepFlag) | |||
2573 | 2583 | ||
2574 | mpt_alloc_fw_memory(ioc, sz); | 2584 | mpt_alloc_fw_memory(ioc, sz); |
2575 | 2585 | ||
2576 | dinitprintk((KERN_WARNING MYNAM ": FW Image @ %p[%p], sz=%d[%x] bytes\n", | 2586 | dinitprintk((KERN_INFO MYNAM ": FW Image @ %p[%p], sz=%d[%x] bytes\n", |
2577 | ioc->cached_fw, (void *)(ulong)ioc->cached_fw_dma, sz, sz)); | 2587 | ioc->cached_fw, (void *)(ulong)ioc->cached_fw_dma, sz, sz)); |
2578 | 2588 | ||
2579 | if (ioc->cached_fw == NULL) { | 2589 | if (ioc->cached_fw == NULL) { |
2580 | /* Major Failure. | 2590 | /* Major Failure. |
2581 | */ | 2591 | */ |
@@ -2605,14 +2615,14 @@ mpt_do_upload(MPT_ADAPTER *ioc, int sleepFlag) | |||
2605 | mpt_add_sge(&request[sgeoffset], flagsLength, ioc->cached_fw_dma); | 2615 | mpt_add_sge(&request[sgeoffset], flagsLength, ioc->cached_fw_dma); |
2606 | 2616 | ||
2607 | sgeoffset += sizeof(u32) + sizeof(dma_addr_t); | 2617 | sgeoffset += sizeof(u32) + sizeof(dma_addr_t); |
2608 | dinitprintk((KERN_WARNING MYNAM "Sending FW Upload (req @ %p) sgeoffset=%d \n", | 2618 | dinitprintk((KERN_INFO MYNAM ": Sending FW Upload (req @ %p) sgeoffset=%d \n", |
2609 | prequest, sgeoffset)); | 2619 | prequest, sgeoffset)); |
2610 | DBG_DUMP_FW_REQUEST_FRAME(prequest) | 2620 | DBG_DUMP_FW_REQUEST_FRAME(prequest) |
2611 | 2621 | ||
2612 | ii = mpt_handshake_req_reply_wait(ioc, sgeoffset, (u32*)prequest, | 2622 | ii = mpt_handshake_req_reply_wait(ioc, sgeoffset, (u32*)prequest, |
2613 | reply_sz, (u16*)preply, 65 /*seconds*/, sleepFlag); | 2623 | reply_sz, (u16*)preply, 65 /*seconds*/, sleepFlag); |
2614 | 2624 | ||
2615 | dinitprintk((KERN_WARNING MYNAM "FW Upload completed rc=%x \n", ii)); | 2625 | dinitprintk((KERN_INFO MYNAM ": FW Upload completed rc=%x \n", ii)); |
2616 | 2626 | ||
2617 | cmdStatus = -EFAULT; | 2627 | cmdStatus = -EFAULT; |
2618 | if (ii == 0) { | 2628 | if (ii == 0) { |
@@ -2627,10 +2637,10 @@ mpt_do_upload(MPT_ADAPTER *ioc, int sleepFlag) | |||
2627 | cmdStatus = 0; | 2637 | cmdStatus = 0; |
2628 | } | 2638 | } |
2629 | } | 2639 | } |
2630 | dinitprintk((MYIOC_s_INFO_FMT ": do_upload status %d \n", | 2640 | dinitprintk((MYIOC_s_INFO_FMT ": do_upload cmdStatus=%d \n", |
2631 | ioc->name, cmdStatus)); | 2641 | ioc->name, cmdStatus)); |
2632 | 2642 | ||
2633 | 2643 | ||
2634 | if (cmdStatus) { | 2644 | if (cmdStatus) { |
2635 | 2645 | ||
2636 | ddlprintk((MYIOC_s_INFO_FMT ": fw upload failed, freeing image \n", | 2646 | ddlprintk((MYIOC_s_INFO_FMT ": fw upload failed, freeing image \n", |
@@ -2761,8 +2771,8 @@ mpt_downloadboot(MPT_ADAPTER *ioc, int sleepFlag) | |||
2761 | fwSize = (pExtImage->ImageSize + 3) >> 2; | 2771 | fwSize = (pExtImage->ImageSize + 3) >> 2; |
2762 | ptrFw = (u32 *)pExtImage; | 2772 | ptrFw = (u32 *)pExtImage; |
2763 | 2773 | ||
2764 | ddlprintk((MYIOC_s_INFO_FMT "Write Ext Image: 0x%x bytes @ %p load_addr=%x\n", | 2774 | ddlprintk((MYIOC_s_INFO_FMT "Write Ext Image: 0x%x (%d) bytes @ %p load_addr=%x\n", |
2765 | ioc->name, fwSize*4, ptrFw, load_addr)); | 2775 | ioc->name, fwSize*4, fwSize*4, ptrFw, load_addr)); |
2766 | CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwAddress, load_addr); | 2776 | CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwAddress, load_addr); |
2767 | 2777 | ||
2768 | while (fwSize--) { | 2778 | while (fwSize--) { |
@@ -2845,9 +2855,9 @@ mpt_downloadboot(MPT_ADAPTER *ioc, int sleepFlag) | |||
2845 | * 0 else | 2855 | * 0 else |
2846 | * | 2856 | * |
2847 | * Returns: | 2857 | * Returns: |
2848 | * 1 - hard reset, READY | 2858 | * 1 - hard reset, READY |
2849 | * 0 - no reset due to History bit, READY | 2859 | * 0 - no reset due to History bit, READY |
2850 | * -1 - no reset due to History bit but not READY | 2860 | * -1 - no reset due to History bit but not READY |
2851 | * OR reset but failed to come READY | 2861 | * OR reset but failed to come READY |
2852 | * -2 - no reset, could not enter DIAG mode | 2862 | * -2 - no reset, could not enter DIAG mode |
2853 | * -3 - reset but bad FW bit | 2863 | * -3 - reset but bad FW bit |
@@ -2990,7 +3000,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag) | |||
2990 | * | 3000 | * |
2991 | */ | 3001 | */ |
2992 | CHIPREG_WRITE32(&ioc->chip->Diagnostic, diag0val | MPI_DIAG_DISABLE_ARM); | 3002 | CHIPREG_WRITE32(&ioc->chip->Diagnostic, diag0val | MPI_DIAG_DISABLE_ARM); |
2993 | mdelay (1); | 3003 | mdelay(1); |
2994 | 3004 | ||
2995 | /* | 3005 | /* |
2996 | * Now hit the reset bit in the Diagnostic register | 3006 | * Now hit the reset bit in the Diagnostic register |
@@ -3170,7 +3180,7 @@ SendIocReset(MPT_ADAPTER *ioc, u8 reset_type, int sleepFlag) | |||
3170 | u32 state; | 3180 | u32 state; |
3171 | int cntdn, count; | 3181 | int cntdn, count; |
3172 | 3182 | ||
3173 | drsprintk((KERN_WARNING MYNAM ": %s: Sending IOC reset(0x%02x)!\n", | 3183 | drsprintk((KERN_INFO MYNAM ": %s: Sending IOC reset(0x%02x)!\n", |
3174 | ioc->name, reset_type)); | 3184 | ioc->name, reset_type)); |
3175 | CHIPREG_WRITE32(&ioc->chip->Doorbell, reset_type<<MPI_DOORBELL_FUNCTION_SHIFT); | 3185 | CHIPREG_WRITE32(&ioc->chip->Doorbell, reset_type<<MPI_DOORBELL_FUNCTION_SHIFT); |
3176 | if ((r = WaitForDoorbellAck(ioc, 5, sleepFlag)) < 0) | 3186 | if ((r = WaitForDoorbellAck(ioc, 5, sleepFlag)) < 0) |
@@ -3374,6 +3384,9 @@ PrimeIocFifos(MPT_ADAPTER *ioc) | |||
3374 | ioc->reply_frames = (MPT_FRAME_HDR *) mem; | 3384 | ioc->reply_frames = (MPT_FRAME_HDR *) mem; |
3375 | ioc->reply_frames_low_dma = (u32) (alloc_dma & 0xFFFFFFFF); | 3385 | ioc->reply_frames_low_dma = (u32) (alloc_dma & 0xFFFFFFFF); |
3376 | 3386 | ||
3387 | dinitprintk((KERN_INFO MYNAM ": %s ReplyBuffers @ %p[%p]\n", | ||
3388 | ioc->name, ioc->reply_frames, (void *)(ulong)alloc_dma)); | ||
3389 | |||
3377 | alloc_dma += reply_sz; | 3390 | alloc_dma += reply_sz; |
3378 | mem += reply_sz; | 3391 | mem += reply_sz; |
3379 | 3392 | ||
@@ -3382,7 +3395,7 @@ PrimeIocFifos(MPT_ADAPTER *ioc) | |||
3382 | ioc->req_frames = (MPT_FRAME_HDR *) mem; | 3395 | ioc->req_frames = (MPT_FRAME_HDR *) mem; |
3383 | ioc->req_frames_dma = alloc_dma; | 3396 | ioc->req_frames_dma = alloc_dma; |
3384 | 3397 | ||
3385 | dinitprintk((KERN_INFO MYNAM ": %s.RequestBuffers @ %p[%p]\n", | 3398 | dinitprintk((KERN_INFO MYNAM ": %s RequestBuffers @ %p[%p]\n", |
3386 | ioc->name, mem, (void *)(ulong)alloc_dma)); | 3399 | ioc->name, mem, (void *)(ulong)alloc_dma)); |
3387 | 3400 | ||
3388 | ioc->req_frames_low_dma = (u32) (alloc_dma & 0xFFFFFFFF); | 3401 | ioc->req_frames_low_dma = (u32) (alloc_dma & 0xFFFFFFFF); |
@@ -3408,7 +3421,7 @@ PrimeIocFifos(MPT_ADAPTER *ioc) | |||
3408 | ioc->ChainBuffer = mem; | 3421 | ioc->ChainBuffer = mem; |
3409 | ioc->ChainBufferDMA = alloc_dma; | 3422 | ioc->ChainBufferDMA = alloc_dma; |
3410 | 3423 | ||
3411 | dinitprintk((KERN_INFO MYNAM " :%s.ChainBuffers @ %p(%p)\n", | 3424 | dinitprintk((KERN_INFO MYNAM " :%s ChainBuffers @ %p(%p)\n", |
3412 | ioc->name, ioc->ChainBuffer, (void *)(ulong)ioc->ChainBufferDMA)); | 3425 | ioc->name, ioc->ChainBuffer, (void *)(ulong)ioc->ChainBufferDMA)); |
3413 | 3426 | ||
3414 | /* Initialize the free chain Q. | 3427 | /* Initialize the free chain Q. |
@@ -3513,7 +3526,7 @@ out_fail: | |||
3513 | */ | 3526 | */ |
3514 | static int | 3527 | static int |
3515 | mpt_handshake_req_reply_wait(MPT_ADAPTER *ioc, int reqBytes, u32 *req, | 3528 | mpt_handshake_req_reply_wait(MPT_ADAPTER *ioc, int reqBytes, u32 *req, |
3516 | int replyBytes, u16 *u16reply, int maxwait, int sleepFlag) | 3529 | int replyBytes, u16 *u16reply, int maxwait, int sleepFlag) |
3517 | { | 3530 | { |
3518 | MPIDefaultReply_t *mptReply; | 3531 | MPIDefaultReply_t *mptReply; |
3519 | int failcnt = 0; | 3532 | int failcnt = 0; |
@@ -3588,7 +3601,7 @@ mpt_handshake_req_reply_wait(MPT_ADAPTER *ioc, int reqBytes, u32 *req, | |||
3588 | */ | 3601 | */ |
3589 | if (!failcnt && (t = WaitForDoorbellReply(ioc, maxwait, sleepFlag)) < 0) | 3602 | if (!failcnt && (t = WaitForDoorbellReply(ioc, maxwait, sleepFlag)) < 0) |
3590 | failcnt++; | 3603 | failcnt++; |
3591 | 3604 | ||
3592 | dhsprintk((MYIOC_s_INFO_FMT "HandShake reply count=%d%s\n", | 3605 | dhsprintk((MYIOC_s_INFO_FMT "HandShake reply count=%d%s\n", |
3593 | ioc->name, t, failcnt ? " - MISSING DOORBELL REPLY!" : "")); | 3606 | ioc->name, t, failcnt ? " - MISSING DOORBELL REPLY!" : "")); |
3594 | 3607 | ||
@@ -3747,7 +3760,7 @@ WaitForDoorbellReply(MPT_ADAPTER *ioc, int howlong, int sleepFlag) | |||
3747 | } | 3760 | } |
3748 | 3761 | ||
3749 | dhsprintk((MYIOC_s_INFO_FMT "WaitCnt=%d First handshake reply word=%08x%s\n", | 3762 | dhsprintk((MYIOC_s_INFO_FMT "WaitCnt=%d First handshake reply word=%08x%s\n", |
3750 | ioc->name, t, le32_to_cpu(*(u32 *)hs_reply), | 3763 | ioc->name, t, le32_to_cpu(*(u32 *)hs_reply), |
3751 | failcnt ? " - MISSING DOORBELL HANDSHAKE!" : "")); | 3764 | failcnt ? " - MISSING DOORBELL HANDSHAKE!" : "")); |
3752 | 3765 | ||
3753 | /* | 3766 | /* |
@@ -3819,7 +3832,7 @@ GetLanConfigPages(MPT_ADAPTER *ioc) | |||
3819 | hdr.PageLength = 0; | 3832 | hdr.PageLength = 0; |
3820 | hdr.PageNumber = 0; | 3833 | hdr.PageNumber = 0; |
3821 | hdr.PageType = MPI_CONFIG_PAGETYPE_LAN; | 3834 | hdr.PageType = MPI_CONFIG_PAGETYPE_LAN; |
3822 | cfg.hdr = &hdr; | 3835 | cfg.cfghdr.hdr = &hdr; |
3823 | cfg.physAddr = -1; | 3836 | cfg.physAddr = -1; |
3824 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; | 3837 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; |
3825 | cfg.dir = 0; | 3838 | cfg.dir = 0; |
@@ -3863,7 +3876,7 @@ GetLanConfigPages(MPT_ADAPTER *ioc) | |||
3863 | hdr.PageLength = 0; | 3876 | hdr.PageLength = 0; |
3864 | hdr.PageNumber = 1; | 3877 | hdr.PageNumber = 1; |
3865 | hdr.PageType = MPI_CONFIG_PAGETYPE_LAN; | 3878 | hdr.PageType = MPI_CONFIG_PAGETYPE_LAN; |
3866 | cfg.hdr = &hdr; | 3879 | cfg.cfghdr.hdr = &hdr; |
3867 | cfg.physAddr = -1; | 3880 | cfg.physAddr = -1; |
3868 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; | 3881 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; |
3869 | cfg.dir = 0; | 3882 | cfg.dir = 0; |
@@ -3930,7 +3943,7 @@ GetFcPortPage0(MPT_ADAPTER *ioc, int portnum) | |||
3930 | hdr.PageLength = 0; | 3943 | hdr.PageLength = 0; |
3931 | hdr.PageNumber = 0; | 3944 | hdr.PageNumber = 0; |
3932 | hdr.PageType = MPI_CONFIG_PAGETYPE_FC_PORT; | 3945 | hdr.PageType = MPI_CONFIG_PAGETYPE_FC_PORT; |
3933 | cfg.hdr = &hdr; | 3946 | cfg.cfghdr.hdr = &hdr; |
3934 | cfg.physAddr = -1; | 3947 | cfg.physAddr = -1; |
3935 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; | 3948 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; |
3936 | cfg.dir = 0; | 3949 | cfg.dir = 0; |
@@ -4012,7 +4025,7 @@ GetIoUnitPage2(MPT_ADAPTER *ioc) | |||
4012 | hdr.PageLength = 0; | 4025 | hdr.PageLength = 0; |
4013 | hdr.PageNumber = 2; | 4026 | hdr.PageNumber = 2; |
4014 | hdr.PageType = MPI_CONFIG_PAGETYPE_IO_UNIT; | 4027 | hdr.PageType = MPI_CONFIG_PAGETYPE_IO_UNIT; |
4015 | cfg.hdr = &hdr; | 4028 | cfg.cfghdr.hdr = &hdr; |
4016 | cfg.physAddr = -1; | 4029 | cfg.physAddr = -1; |
4017 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; | 4030 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; |
4018 | cfg.dir = 0; | 4031 | cfg.dir = 0; |
@@ -4102,7 +4115,7 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum) | |||
4102 | header.PageLength = 0; | 4115 | header.PageLength = 0; |
4103 | header.PageNumber = 0; | 4116 | header.PageNumber = 0; |
4104 | header.PageType = MPI_CONFIG_PAGETYPE_SCSI_PORT; | 4117 | header.PageType = MPI_CONFIG_PAGETYPE_SCSI_PORT; |
4105 | cfg.hdr = &header; | 4118 | cfg.cfghdr.hdr = &header; |
4106 | cfg.physAddr = -1; | 4119 | cfg.physAddr = -1; |
4107 | cfg.pageAddr = portnum; | 4120 | cfg.pageAddr = portnum; |
4108 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; | 4121 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; |
@@ -4122,6 +4135,8 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum) | |||
4122 | ioc->spi_data.minSyncFactor = MPT_ASYNC; | 4135 | ioc->spi_data.minSyncFactor = MPT_ASYNC; |
4123 | ioc->spi_data.busType = MPT_HOST_BUS_UNKNOWN; | 4136 | ioc->spi_data.busType = MPT_HOST_BUS_UNKNOWN; |
4124 | rc = 1; | 4137 | rc = 1; |
4138 | ddvprintk((MYIOC_s_INFO_FMT "Unable to read PortPage0 minSyncFactor=%x\n", | ||
4139 | ioc->name, ioc->spi_data.minSyncFactor)); | ||
4125 | } else { | 4140 | } else { |
4126 | /* Save the Port Page 0 data | 4141 | /* Save the Port Page 0 data |
4127 | */ | 4142 | */ |
@@ -4131,7 +4146,7 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum) | |||
4131 | 4146 | ||
4132 | if ( (pPP0->Capabilities & MPI_SCSIPORTPAGE0_CAP_QAS) == 0 ) { | 4147 | if ( (pPP0->Capabilities & MPI_SCSIPORTPAGE0_CAP_QAS) == 0 ) { |
4133 | ioc->spi_data.noQas |= MPT_TARGET_NO_NEGO_QAS; | 4148 | ioc->spi_data.noQas |= MPT_TARGET_NO_NEGO_QAS; |
4134 | dinitprintk((KERN_INFO MYNAM " :%s noQas due to Capabilities=%x\n", | 4149 | ddvprintk((KERN_INFO MYNAM " :%s noQas due to Capabilities=%x\n", |
4135 | ioc->name, pPP0->Capabilities)); | 4150 | ioc->name, pPP0->Capabilities)); |
4136 | } | 4151 | } |
4137 | ioc->spi_data.maxBusWidth = pPP0->Capabilities & MPI_SCSIPORTPAGE0_CAP_WIDE ? 1 : 0; | 4152 | ioc->spi_data.maxBusWidth = pPP0->Capabilities & MPI_SCSIPORTPAGE0_CAP_WIDE ? 1 : 0; |
@@ -4140,6 +4155,8 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum) | |||
4140 | ioc->spi_data.maxSyncOffset = (u8) (data >> 16); | 4155 | ioc->spi_data.maxSyncOffset = (u8) (data >> 16); |
4141 | data = pPP0->Capabilities & MPI_SCSIPORTPAGE0_CAP_MIN_SYNC_PERIOD_MASK; | 4156 | data = pPP0->Capabilities & MPI_SCSIPORTPAGE0_CAP_MIN_SYNC_PERIOD_MASK; |
4142 | ioc->spi_data.minSyncFactor = (u8) (data >> 8); | 4157 | ioc->spi_data.minSyncFactor = (u8) (data >> 8); |
4158 | ddvprintk((MYIOC_s_INFO_FMT "PortPage0 minSyncFactor=%x\n", | ||
4159 | ioc->name, ioc->spi_data.minSyncFactor)); | ||
4143 | } else { | 4160 | } else { |
4144 | ioc->spi_data.maxSyncOffset = 0; | 4161 | ioc->spi_data.maxSyncOffset = 0; |
4145 | ioc->spi_data.minSyncFactor = MPT_ASYNC; | 4162 | ioc->spi_data.minSyncFactor = MPT_ASYNC; |
@@ -4152,8 +4169,11 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum) | |||
4152 | if ((ioc->spi_data.busType == MPI_SCSIPORTPAGE0_PHY_SIGNAL_HVD) || | 4169 | if ((ioc->spi_data.busType == MPI_SCSIPORTPAGE0_PHY_SIGNAL_HVD) || |
4153 | (ioc->spi_data.busType == MPI_SCSIPORTPAGE0_PHY_SIGNAL_SE)) { | 4170 | (ioc->spi_data.busType == MPI_SCSIPORTPAGE0_PHY_SIGNAL_SE)) { |
4154 | 4171 | ||
4155 | if (ioc->spi_data.minSyncFactor < MPT_ULTRA) | 4172 | if (ioc->spi_data.minSyncFactor < MPT_ULTRA) { |
4156 | ioc->spi_data.minSyncFactor = MPT_ULTRA; | 4173 | ioc->spi_data.minSyncFactor = MPT_ULTRA; |
4174 | ddvprintk((MYIOC_s_INFO_FMT "HVD or SE detected, minSyncFactor=%x\n", | ||
4175 | ioc->name, ioc->spi_data.minSyncFactor)); | ||
4176 | } | ||
4157 | } | 4177 | } |
4158 | } | 4178 | } |
4159 | if (pbuf) { | 4179 | if (pbuf) { |
@@ -4168,7 +4188,7 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum) | |||
4168 | header.PageLength = 0; | 4188 | header.PageLength = 0; |
4169 | header.PageNumber = 2; | 4189 | header.PageNumber = 2; |
4170 | header.PageType = MPI_CONFIG_PAGETYPE_SCSI_PORT; | 4190 | header.PageType = MPI_CONFIG_PAGETYPE_SCSI_PORT; |
4171 | cfg.hdr = &header; | 4191 | cfg.cfghdr.hdr = &header; |
4172 | cfg.physAddr = -1; | 4192 | cfg.physAddr = -1; |
4173 | cfg.pageAddr = portnum; | 4193 | cfg.pageAddr = portnum; |
4174 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; | 4194 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; |
@@ -4236,7 +4256,7 @@ mpt_readScsiDevicePageHeaders(MPT_ADAPTER *ioc, int portnum) | |||
4236 | header.PageLength = 0; | 4256 | header.PageLength = 0; |
4237 | header.PageNumber = 1; | 4257 | header.PageNumber = 1; |
4238 | header.PageType = MPI_CONFIG_PAGETYPE_SCSI_DEVICE; | 4258 | header.PageType = MPI_CONFIG_PAGETYPE_SCSI_DEVICE; |
4239 | cfg.hdr = &header; | 4259 | cfg.cfghdr.hdr = &header; |
4240 | cfg.physAddr = -1; | 4260 | cfg.physAddr = -1; |
4241 | cfg.pageAddr = portnum; | 4261 | cfg.pageAddr = portnum; |
4242 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; | 4262 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; |
@@ -4245,8 +4265,8 @@ mpt_readScsiDevicePageHeaders(MPT_ADAPTER *ioc, int portnum) | |||
4245 | if (mpt_config(ioc, &cfg) != 0) | 4265 | if (mpt_config(ioc, &cfg) != 0) |
4246 | return -EFAULT; | 4266 | return -EFAULT; |
4247 | 4267 | ||
4248 | ioc->spi_data.sdp1version = cfg.hdr->PageVersion; | 4268 | ioc->spi_data.sdp1version = cfg.cfghdr.hdr->PageVersion; |
4249 | ioc->spi_data.sdp1length = cfg.hdr->PageLength; | 4269 | ioc->spi_data.sdp1length = cfg.cfghdr.hdr->PageLength; |
4250 | 4270 | ||
4251 | header.PageVersion = 0; | 4271 | header.PageVersion = 0; |
4252 | header.PageLength = 0; | 4272 | header.PageLength = 0; |
@@ -4255,8 +4275,8 @@ mpt_readScsiDevicePageHeaders(MPT_ADAPTER *ioc, int portnum) | |||
4255 | if (mpt_config(ioc, &cfg) != 0) | 4275 | if (mpt_config(ioc, &cfg) != 0) |
4256 | return -EFAULT; | 4276 | return -EFAULT; |
4257 | 4277 | ||
4258 | ioc->spi_data.sdp0version = cfg.hdr->PageVersion; | 4278 | ioc->spi_data.sdp0version = cfg.cfghdr.hdr->PageVersion; |
4259 | ioc->spi_data.sdp0length = cfg.hdr->PageLength; | 4279 | ioc->spi_data.sdp0length = cfg.cfghdr.hdr->PageLength; |
4260 | 4280 | ||
4261 | dcprintk((MYIOC_s_INFO_FMT "Headers: 0: version %d length %d\n", | 4281 | dcprintk((MYIOC_s_INFO_FMT "Headers: 0: version %d length %d\n", |
4262 | ioc->name, ioc->spi_data.sdp0version, ioc->spi_data.sdp0length)); | 4282 | ioc->name, ioc->spi_data.sdp0version, ioc->spi_data.sdp0length)); |
@@ -4298,7 +4318,7 @@ mpt_findImVolumes(MPT_ADAPTER *ioc) | |||
4298 | header.PageLength = 0; | 4318 | header.PageLength = 0; |
4299 | header.PageNumber = 2; | 4319 | header.PageNumber = 2; |
4300 | header.PageType = MPI_CONFIG_PAGETYPE_IOC; | 4320 | header.PageType = MPI_CONFIG_PAGETYPE_IOC; |
4301 | cfg.hdr = &header; | 4321 | cfg.cfghdr.hdr = &header; |
4302 | cfg.physAddr = -1; | 4322 | cfg.physAddr = -1; |
4303 | cfg.pageAddr = 0; | 4323 | cfg.pageAddr = 0; |
4304 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; | 4324 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; |
@@ -4394,7 +4414,7 @@ mpt_read_ioc_pg_3(MPT_ADAPTER *ioc) | |||
4394 | header.PageLength = 0; | 4414 | header.PageLength = 0; |
4395 | header.PageNumber = 3; | 4415 | header.PageNumber = 3; |
4396 | header.PageType = MPI_CONFIG_PAGETYPE_IOC; | 4416 | header.PageType = MPI_CONFIG_PAGETYPE_IOC; |
4397 | cfg.hdr = &header; | 4417 | cfg.cfghdr.hdr = &header; |
4398 | cfg.physAddr = -1; | 4418 | cfg.physAddr = -1; |
4399 | cfg.pageAddr = 0; | 4419 | cfg.pageAddr = 0; |
4400 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; | 4420 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; |
@@ -4446,7 +4466,7 @@ mpt_read_ioc_pg_4(MPT_ADAPTER *ioc) | |||
4446 | header.PageLength = 0; | 4466 | header.PageLength = 0; |
4447 | header.PageNumber = 4; | 4467 | header.PageNumber = 4; |
4448 | header.PageType = MPI_CONFIG_PAGETYPE_IOC; | 4468 | header.PageType = MPI_CONFIG_PAGETYPE_IOC; |
4449 | cfg.hdr = &header; | 4469 | cfg.cfghdr.hdr = &header; |
4450 | cfg.physAddr = -1; | 4470 | cfg.physAddr = -1; |
4451 | cfg.pageAddr = 0; | 4471 | cfg.pageAddr = 0; |
4452 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; | 4472 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; |
@@ -4498,7 +4518,7 @@ mpt_read_ioc_pg_1(MPT_ADAPTER *ioc) | |||
4498 | header.PageLength = 0; | 4518 | header.PageLength = 0; |
4499 | header.PageNumber = 1; | 4519 | header.PageNumber = 1; |
4500 | header.PageType = MPI_CONFIG_PAGETYPE_IOC; | 4520 | header.PageType = MPI_CONFIG_PAGETYPE_IOC; |
4501 | cfg.hdr = &header; | 4521 | cfg.cfghdr.hdr = &header; |
4502 | cfg.physAddr = -1; | 4522 | cfg.physAddr = -1; |
4503 | cfg.pageAddr = 0; | 4523 | cfg.pageAddr = 0; |
4504 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; | 4524 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; |
@@ -4580,13 +4600,13 @@ SendEventNotification(MPT_ADAPTER *ioc, u8 EvSwitch) | |||
4580 | 4600 | ||
4581 | evnp = (EventNotification_t *) mpt_get_msg_frame(mpt_base_index, ioc); | 4601 | evnp = (EventNotification_t *) mpt_get_msg_frame(mpt_base_index, ioc); |
4582 | if (evnp == NULL) { | 4602 | if (evnp == NULL) { |
4583 | dprintk((MYIOC_s_WARN_FMT "Unable to allocate event request frame!\n", | 4603 | devtprintk((MYIOC_s_WARN_FMT "Unable to allocate event request frame!\n", |
4584 | ioc->name)); | 4604 | ioc->name)); |
4585 | return 0; | 4605 | return 0; |
4586 | } | 4606 | } |
4587 | memset(evnp, 0, sizeof(*evnp)); | 4607 | memset(evnp, 0, sizeof(*evnp)); |
4588 | 4608 | ||
4589 | dprintk((MYIOC_s_INFO_FMT "Sending EventNotification(%d)\n", ioc->name, EvSwitch)); | 4609 | devtprintk((MYIOC_s_INFO_FMT "Sending EventNotification (%d) request %p\n", ioc->name, EvSwitch, evnp)); |
4590 | 4610 | ||
4591 | evnp->Function = MPI_FUNCTION_EVENT_NOTIFICATION; | 4611 | evnp->Function = MPI_FUNCTION_EVENT_NOTIFICATION; |
4592 | evnp->ChainOffset = 0; | 4612 | evnp->ChainOffset = 0; |
@@ -4610,8 +4630,10 @@ SendEventAck(MPT_ADAPTER *ioc, EventNotificationReply_t *evnp) | |||
4610 | EventAck_t *pAck; | 4630 | EventAck_t *pAck; |
4611 | 4631 | ||
4612 | if ((pAck = (EventAck_t *) mpt_get_msg_frame(mpt_base_index, ioc)) == NULL) { | 4632 | if ((pAck = (EventAck_t *) mpt_get_msg_frame(mpt_base_index, ioc)) == NULL) { |
4613 | printk(MYIOC_s_WARN_FMT "Unable to allocate event ACK request frame!\n", | 4633 | printk(MYIOC_s_WARN_FMT "Unable to allocate event ACK " |
4614 | ioc->name); | 4634 | "request frame for Event=%x EventContext=%x EventData=%x!\n", |
4635 | ioc->name, evnp->Event, le32_to_cpu(evnp->EventContext), | ||
4636 | le32_to_cpu(evnp->Data[0])); | ||
4615 | return -1; | 4637 | return -1; |
4616 | } | 4638 | } |
4617 | memset(pAck, 0, sizeof(*pAck)); | 4639 | memset(pAck, 0, sizeof(*pAck)); |
@@ -4647,10 +4669,11 @@ int | |||
4647 | mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg) | 4669 | mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg) |
4648 | { | 4670 | { |
4649 | Config_t *pReq; | 4671 | Config_t *pReq; |
4672 | ConfigExtendedPageHeader_t *pExtHdr = NULL; | ||
4650 | MPT_FRAME_HDR *mf; | 4673 | MPT_FRAME_HDR *mf; |
4651 | unsigned long flags; | 4674 | unsigned long flags; |
4652 | int ii, rc; | 4675 | int ii, rc; |
4653 | u32 flagsLength; | 4676 | int flagsLength; |
4654 | int in_isr; | 4677 | int in_isr; |
4655 | 4678 | ||
4656 | /* Prevent calling wait_event() (below), if caller happens | 4679 | /* Prevent calling wait_event() (below), if caller happens |
@@ -4675,16 +4698,30 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg) | |||
4675 | pReq->Reserved = 0; | 4698 | pReq->Reserved = 0; |
4676 | pReq->ChainOffset = 0; | 4699 | pReq->ChainOffset = 0; |
4677 | pReq->Function = MPI_FUNCTION_CONFIG; | 4700 | pReq->Function = MPI_FUNCTION_CONFIG; |
4701 | |||
4702 | /* Assume page type is not extended and clear "reserved" fields. */ | ||
4678 | pReq->ExtPageLength = 0; | 4703 | pReq->ExtPageLength = 0; |
4679 | pReq->ExtPageType = 0; | 4704 | pReq->ExtPageType = 0; |
4680 | pReq->MsgFlags = 0; | 4705 | pReq->MsgFlags = 0; |
4706 | |||
4681 | for (ii=0; ii < 8; ii++) | 4707 | for (ii=0; ii < 8; ii++) |
4682 | pReq->Reserved2[ii] = 0; | 4708 | pReq->Reserved2[ii] = 0; |
4683 | 4709 | ||
4684 | pReq->Header.PageVersion = pCfg->hdr->PageVersion; | 4710 | pReq->Header.PageVersion = pCfg->cfghdr.hdr->PageVersion; |
4685 | pReq->Header.PageLength = pCfg->hdr->PageLength; | 4711 | pReq->Header.PageLength = pCfg->cfghdr.hdr->PageLength; |
4686 | pReq->Header.PageNumber = pCfg->hdr->PageNumber; | 4712 | pReq->Header.PageNumber = pCfg->cfghdr.hdr->PageNumber; |
4687 | pReq->Header.PageType = (pCfg->hdr->PageType & MPI_CONFIG_PAGETYPE_MASK); | 4713 | pReq->Header.PageType = (pCfg->cfghdr.hdr->PageType & MPI_CONFIG_PAGETYPE_MASK); |
4714 | |||
4715 | if ((pCfg->cfghdr.hdr->PageType & MPI_CONFIG_PAGETYPE_MASK) == MPI_CONFIG_PAGETYPE_EXTENDED) { | ||
4716 | pExtHdr = (ConfigExtendedPageHeader_t *)pCfg->cfghdr.ehdr; | ||
4717 | pReq->ExtPageLength = cpu_to_le16(pExtHdr->ExtPageLength); | ||
4718 | pReq->ExtPageType = pExtHdr->ExtPageType; | ||
4719 | pReq->Header.PageType = MPI_CONFIG_PAGETYPE_EXTENDED; | ||
4720 | |||
4721 | /* Page Length must be treated as a reserved field for the extended header. */ | ||
4722 | pReq->Header.PageLength = 0; | ||
4723 | } | ||
4724 | |||
4688 | pReq->PageAddress = cpu_to_le32(pCfg->pageAddr); | 4725 | pReq->PageAddress = cpu_to_le32(pCfg->pageAddr); |
4689 | 4726 | ||
4690 | /* Add a SGE to the config request. | 4727 | /* Add a SGE to the config request. |
@@ -4694,12 +4731,20 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg) | |||
4694 | else | 4731 | else |
4695 | flagsLength = MPT_SGE_FLAGS_SSIMPLE_READ; | 4732 | flagsLength = MPT_SGE_FLAGS_SSIMPLE_READ; |
4696 | 4733 | ||
4697 | flagsLength |= pCfg->hdr->PageLength * 4; | 4734 | if ((pCfg->cfghdr.hdr->PageType & MPI_CONFIG_PAGETYPE_MASK) == MPI_CONFIG_PAGETYPE_EXTENDED) { |
4735 | flagsLength |= pExtHdr->ExtPageLength * 4; | ||
4698 | 4736 | ||
4699 | mpt_add_sge((char *)&pReq->PageBufferSGE, flagsLength, pCfg->physAddr); | 4737 | dcprintk((MYIOC_s_INFO_FMT "Sending Config request type %d, page %d and action %d\n", |
4738 | ioc->name, pReq->ExtPageType, pReq->Header.PageNumber, pReq->Action)); | ||
4739 | } | ||
4740 | else { | ||
4741 | flagsLength |= pCfg->cfghdr.hdr->PageLength * 4; | ||
4742 | |||
4743 | dcprintk((MYIOC_s_INFO_FMT "Sending Config request type %d, page %d and action %d\n", | ||
4744 | ioc->name, pReq->Header.PageType, pReq->Header.PageNumber, pReq->Action)); | ||
4745 | } | ||
4700 | 4746 | ||
4701 | dcprintk((MYIOC_s_INFO_FMT "Sending Config request type %d, page %d and action %d\n", | 4747 | mpt_add_sge((char *)&pReq->PageBufferSGE, flagsLength, pCfg->physAddr); |
4702 | ioc->name, pReq->Header.PageType, pReq->Header.PageNumber, pReq->Action)); | ||
4703 | 4748 | ||
4704 | /* Append pCfg pointer to end of mf | 4749 | /* Append pCfg pointer to end of mf |
4705 | */ | 4750 | */ |
@@ -4789,8 +4834,8 @@ mpt_toolbox(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg) | |||
4789 | pReq->Reserved3 = 0; | 4834 | pReq->Reserved3 = 0; |
4790 | pReq->NumAddressBytes = 0x01; | 4835 | pReq->NumAddressBytes = 0x01; |
4791 | pReq->Reserved4 = 0; | 4836 | pReq->Reserved4 = 0; |
4792 | pReq->DataLength = 0x04; | 4837 | pReq->DataLength = cpu_to_le16(0x04); |
4793 | pdev = (struct pci_dev *) ioc->pcidev; | 4838 | pdev = ioc->pcidev; |
4794 | if (pdev->devfn & 1) | 4839 | if (pdev->devfn & 1) |
4795 | pReq->DeviceAddr = 0xB2; | 4840 | pReq->DeviceAddr = 0xB2; |
4796 | else | 4841 | else |
@@ -5504,6 +5549,8 @@ ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply | |||
5504 | * If needed, send (a single) EventAck. | 5549 | * If needed, send (a single) EventAck. |
5505 | */ | 5550 | */ |
5506 | if (pEventReply->AckRequired == MPI_EVENT_NOTIFICATION_ACK_REQUIRED) { | 5551 | if (pEventReply->AckRequired == MPI_EVENT_NOTIFICATION_ACK_REQUIRED) { |
5552 | devtprintk((MYIOC_s_WARN_FMT | ||
5553 | "EventAck required\n",ioc->name)); | ||
5507 | if ((ii = SendEventAck(ioc, pEventReply)) != 0) { | 5554 | if ((ii = SendEventAck(ioc, pEventReply)) != 0) { |
5508 | devtprintk((MYIOC_s_WARN_FMT "SendEventAck returned %d\n", | 5555 | devtprintk((MYIOC_s_WARN_FMT "SendEventAck returned %d\n", |
5509 | ioc->name, ii)); | 5556 | ioc->name, ii)); |
@@ -5584,7 +5631,7 @@ mpt_sp_log_info(MPT_ADAPTER *ioc, u32 log_info) | |||
5584 | case 0x00080000: | 5631 | case 0x00080000: |
5585 | desc = "Outbound DMA Overrun"; | 5632 | desc = "Outbound DMA Overrun"; |
5586 | break; | 5633 | break; |
5587 | 5634 | ||
5588 | case 0x00090000: | 5635 | case 0x00090000: |
5589 | desc = "Task Management"; | 5636 | desc = "Task Management"; |
5590 | break; | 5637 | break; |
@@ -5600,7 +5647,7 @@ mpt_sp_log_info(MPT_ADAPTER *ioc, u32 log_info) | |||
5600 | case 0x000C0000: | 5647 | case 0x000C0000: |
5601 | desc = "Untagged Table Size"; | 5648 | desc = "Untagged Table Size"; |
5602 | break; | 5649 | break; |
5603 | 5650 | ||
5604 | } | 5651 | } |
5605 | 5652 | ||
5606 | printk(MYIOC_s_INFO_FMT "LogInfo(0x%08x): F/W: %s\n", ioc->name, log_info, desc); | 5653 | printk(MYIOC_s_INFO_FMT "LogInfo(0x%08x): F/W: %s\n", ioc->name, log_info, desc); |
@@ -5692,7 +5739,7 @@ mpt_sp_ioc_info(MPT_ADAPTER *ioc, u32 ioc_status, MPT_FRAME_HDR *mf) | |||
5692 | break; | 5739 | break; |
5693 | 5740 | ||
5694 | case MPI_IOCSTATUS_SCSI_DATA_UNDERRUN: /* 0x0045 */ | 5741 | case MPI_IOCSTATUS_SCSI_DATA_UNDERRUN: /* 0x0045 */ |
5695 | /* This error is checked in scsi_io_done(). Skip. | 5742 | /* This error is checked in scsi_io_done(). Skip. |
5696 | desc = "SCSI Data Underrun"; | 5743 | desc = "SCSI Data Underrun"; |
5697 | */ | 5744 | */ |
5698 | break; | 5745 | break; |
diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h index 848fb236b175..f4827d923731 100644 --- a/drivers/message/fusion/mptbase.h +++ b/drivers/message/fusion/mptbase.h | |||
@@ -915,7 +915,10 @@ struct scsi_cmnd; | |||
915 | typedef struct _x_config_parms { | 915 | typedef struct _x_config_parms { |
916 | struct list_head linkage; /* linked list */ | 916 | struct list_head linkage; /* linked list */ |
917 | struct timer_list timer; /* timer function for this request */ | 917 | struct timer_list timer; /* timer function for this request */ |
918 | ConfigPageHeader_t *hdr; | 918 | union { |
919 | ConfigExtendedPageHeader_t *ehdr; | ||
920 | ConfigPageHeader_t *hdr; | ||
921 | } cfghdr; | ||
919 | dma_addr_t physAddr; | 922 | dma_addr_t physAddr; |
920 | int wait_done; /* wait for this request */ | 923 | int wait_done; /* wait for this request */ |
921 | u32 pageAddr; /* properly formatted */ | 924 | u32 pageAddr; /* properly formatted */ |
diff --git a/drivers/message/fusion/mptctl.c b/drivers/message/fusion/mptctl.c index 05ea5944c487..7577c2417e2e 100644 --- a/drivers/message/fusion/mptctl.c +++ b/drivers/message/fusion/mptctl.c | |||
@@ -242,7 +242,7 @@ mptctl_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply) | |||
242 | /* Set the command status to GOOD if IOC Status is GOOD | 242 | /* Set the command status to GOOD if IOC Status is GOOD |
243 | * OR if SCSI I/O cmd and data underrun or recovered error. | 243 | * OR if SCSI I/O cmd and data underrun or recovered error. |
244 | */ | 244 | */ |
245 | iocStatus = reply->u.reply.IOCStatus & MPI_IOCSTATUS_MASK; | 245 | iocStatus = le16_to_cpu(reply->u.reply.IOCStatus) & MPI_IOCSTATUS_MASK; |
246 | if (iocStatus == MPI_IOCSTATUS_SUCCESS) | 246 | if (iocStatus == MPI_IOCSTATUS_SUCCESS) |
247 | ioc->ioctl->status |= MPT_IOCTL_STATUS_COMMAND_GOOD; | 247 | ioc->ioctl->status |= MPT_IOCTL_STATUS_COMMAND_GOOD; |
248 | 248 | ||
@@ -2324,7 +2324,7 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size) | |||
2324 | hdr.PageLength = 0; | 2324 | hdr.PageLength = 0; |
2325 | hdr.PageNumber = 0; | 2325 | hdr.PageNumber = 0; |
2326 | hdr.PageType = MPI_CONFIG_PAGETYPE_MANUFACTURING; | 2326 | hdr.PageType = MPI_CONFIG_PAGETYPE_MANUFACTURING; |
2327 | cfg.hdr = &hdr; | 2327 | cfg.cfghdr.hdr = &hdr; |
2328 | cfg.physAddr = -1; | 2328 | cfg.physAddr = -1; |
2329 | cfg.pageAddr = 0; | 2329 | cfg.pageAddr = 0; |
2330 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; | 2330 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; |
@@ -2333,7 +2333,7 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size) | |||
2333 | 2333 | ||
2334 | strncpy(karg.serial_number, " ", 24); | 2334 | strncpy(karg.serial_number, " ", 24); |
2335 | if (mpt_config(ioc, &cfg) == 0) { | 2335 | if (mpt_config(ioc, &cfg) == 0) { |
2336 | if (cfg.hdr->PageLength > 0) { | 2336 | if (cfg.cfghdr.hdr->PageLength > 0) { |
2337 | /* Issue the second config page request */ | 2337 | /* Issue the second config page request */ |
2338 | cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT; | 2338 | cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT; |
2339 | 2339 | ||
@@ -2479,7 +2479,7 @@ mptctl_hp_targetinfo(unsigned long arg) | |||
2479 | hdr.PageNumber = 0; | 2479 | hdr.PageNumber = 0; |
2480 | hdr.PageType = MPI_CONFIG_PAGETYPE_SCSI_DEVICE; | 2480 | hdr.PageType = MPI_CONFIG_PAGETYPE_SCSI_DEVICE; |
2481 | 2481 | ||
2482 | cfg.hdr = &hdr; | 2482 | cfg.cfghdr.hdr = &hdr; |
2483 | cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT; | 2483 | cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT; |
2484 | cfg.dir = 0; | 2484 | cfg.dir = 0; |
2485 | cfg.timeout = 0; | 2485 | cfg.timeout = 0; |
@@ -2527,15 +2527,15 @@ mptctl_hp_targetinfo(unsigned long arg) | |||
2527 | hdr.PageNumber = 3; | 2527 | hdr.PageNumber = 3; |
2528 | hdr.PageType = MPI_CONFIG_PAGETYPE_SCSI_DEVICE; | 2528 | hdr.PageType = MPI_CONFIG_PAGETYPE_SCSI_DEVICE; |
2529 | 2529 | ||
2530 | cfg.hdr = &hdr; | 2530 | cfg.cfghdr.hdr = &hdr; |
2531 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; | 2531 | cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER; |
2532 | cfg.dir = 0; | 2532 | cfg.dir = 0; |
2533 | cfg.timeout = 0; | 2533 | cfg.timeout = 0; |
2534 | cfg.physAddr = -1; | 2534 | cfg.physAddr = -1; |
2535 | if ((mpt_config(ioc, &cfg) == 0) && (cfg.hdr->PageLength > 0)) { | 2535 | if ((mpt_config(ioc, &cfg) == 0) && (cfg.cfghdr.hdr->PageLength > 0)) { |
2536 | /* Issue the second config page request */ | 2536 | /* Issue the second config page request */ |
2537 | cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT; | 2537 | cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT; |
2538 | data_sz = (int) cfg.hdr->PageLength * 4; | 2538 | data_sz = (int) cfg.cfghdr.hdr->PageLength * 4; |
2539 | pg3_alloc = (SCSIDevicePage3_t *) pci_alloc_consistent( | 2539 | pg3_alloc = (SCSIDevicePage3_t *) pci_alloc_consistent( |
2540 | ioc->pcidev, data_sz, &page_dma); | 2540 | ioc->pcidev, data_sz, &page_dma); |
2541 | if (pg3_alloc) { | 2541 | if (pg3_alloc) { |
diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c index b9d4f78725b4..4a003dc5fde8 100644 --- a/drivers/message/fusion/mptscsih.c +++ b/drivers/message/fusion/mptscsih.c | |||
@@ -281,12 +281,12 @@ mptscsih_getFreeChainBuffer(MPT_ADAPTER *ioc, int *retIndex) | |||
281 | offset = (u8 *)chainBuf - (u8 *)ioc->ChainBuffer; | 281 | offset = (u8 *)chainBuf - (u8 *)ioc->ChainBuffer; |
282 | chain_idx = offset / ioc->req_sz; | 282 | chain_idx = offset / ioc->req_sz; |
283 | rc = SUCCESS; | 283 | rc = SUCCESS; |
284 | dsgprintk((MYIOC_s_INFO_FMT "getFreeChainBuffer (index %d), got buf=%p\n", | 284 | dsgprintk((MYIOC_s_ERR_FMT "getFreeChainBuffer chainBuf=%p ChainBuffer=%p offset=%d chain_idx=%d\n", |
285 | ioc->name, *retIndex, chainBuf)); | 285 | ioc->name, chainBuf, ioc->ChainBuffer, offset, chain_idx)); |
286 | } else { | 286 | } else { |
287 | rc = FAILED; | 287 | rc = FAILED; |
288 | chain_idx = MPT_HOST_NO_CHAIN; | 288 | chain_idx = MPT_HOST_NO_CHAIN; |
289 | dfailprintk((MYIOC_s_ERR_FMT "getFreeChainBuffer failed\n", | 289 | dfailprintk((MYIOC_s_INFO_FMT "getFreeChainBuffer failed\n", |
290 | ioc->name)); | 290 | ioc->name)); |
291 | } | 291 | } |
292 | spin_unlock_irqrestore(&ioc->FreeQlock, flags); | 292 | spin_unlock_irqrestore(&ioc->FreeQlock, flags); |
@@ -432,7 +432,7 @@ nextSGEset: | |||
432 | */ | 432 | */ |
433 | pReq->ChainOffset = 0; | 433 | pReq->ChainOffset = 0; |
434 | RequestNB = (((sgeOffset - 1) >> ioc->NBShiftFactor) + 1) & 0x03; | 434 | RequestNB = (((sgeOffset - 1) >> ioc->NBShiftFactor) + 1) & 0x03; |
435 | dsgprintk((MYIOC_s_ERR_FMT | 435 | dsgprintk((MYIOC_s_INFO_FMT |
436 | "Single Buffer RequestNB=%x, sgeOffset=%d\n", ioc->name, RequestNB, sgeOffset)); | 436 | "Single Buffer RequestNB=%x, sgeOffset=%d\n", ioc->name, RequestNB, sgeOffset)); |
437 | ioc->RequestNB[req_idx] = RequestNB; | 437 | ioc->RequestNB[req_idx] = RequestNB; |
438 | } | 438 | } |
@@ -491,11 +491,12 @@ nextSGEset: | |||
491 | /* NOTE: psge points to the beginning of the chain element | 491 | /* NOTE: psge points to the beginning of the chain element |
492 | * in current buffer. Get a chain buffer. | 492 | * in current buffer. Get a chain buffer. |
493 | */ | 493 | */ |
494 | dsgprintk((MYIOC_s_INFO_FMT | 494 | if ((mptscsih_getFreeChainBuffer(ioc, &newIndex)) == FAILED) { |
495 | "calling getFreeChainBuffer SCSI cmd=%02x (%p)\n", | 495 | dfailprintk((MYIOC_s_INFO_FMT |
496 | ioc->name, pReq->CDB[0], SCpnt)); | 496 | "getFreeChainBuffer FAILED SCSI cmd=%02x (%p)\n", |
497 | if ((mptscsih_getFreeChainBuffer(ioc, &newIndex)) == FAILED) | 497 | ioc->name, pReq->CDB[0], SCpnt)); |
498 | return FAILED; | 498 | return FAILED; |
499 | } | ||
499 | 500 | ||
500 | /* Update the tracking arrays. | 501 | /* Update the tracking arrays. |
501 | * If chainSge == NULL, update ReqToChain, else ChainToChain | 502 | * If chainSge == NULL, update ReqToChain, else ChainToChain |
@@ -577,14 +578,20 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr) | |||
577 | return 1; | 578 | return 1; |
578 | } | 579 | } |
579 | 580 | ||
580 | dmfprintk((MYIOC_s_INFO_FMT | ||
581 | "ScsiDone (mf=%p,mr=%p,sc=%p,idx=%d)\n", | ||
582 | ioc->name, mf, mr, sc, req_idx)); | ||
583 | |||
584 | sc->result = DID_OK << 16; /* Set default reply as OK */ | 581 | sc->result = DID_OK << 16; /* Set default reply as OK */ |
585 | pScsiReq = (SCSIIORequest_t *) mf; | 582 | pScsiReq = (SCSIIORequest_t *) mf; |
586 | pScsiReply = (SCSIIOReply_t *) mr; | 583 | pScsiReply = (SCSIIOReply_t *) mr; |
587 | 584 | ||
585 | if((ioc->facts.MsgVersion >= MPI_VERSION_01_05) && pScsiReply){ | ||
586 | dmfprintk((MYIOC_s_INFO_FMT | ||
587 | "ScsiDone (mf=%p,mr=%p,sc=%p,idx=%d,task-tag=%d)\n", | ||
588 | ioc->name, mf, mr, sc, req_idx, pScsiReply->TaskTag)); | ||
589 | }else{ | ||
590 | dmfprintk((MYIOC_s_INFO_FMT | ||
591 | "ScsiDone (mf=%p,mr=%p,sc=%p,idx=%d)\n", | ||
592 | ioc->name, mf, mr, sc, req_idx)); | ||
593 | } | ||
594 | |||
588 | if (pScsiReply == NULL) { | 595 | if (pScsiReply == NULL) { |
589 | /* special context reply handling */ | 596 | /* special context reply handling */ |
590 | ; | 597 | ; |
@@ -658,8 +665,8 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr) | |||
658 | /* Sufficient data transfer occurred */ | 665 | /* Sufficient data transfer occurred */ |
659 | sc->result = (DID_OK << 16) | scsi_status; | 666 | sc->result = (DID_OK << 16) | scsi_status; |
660 | } else if ( xfer_cnt == 0 ) { | 667 | } else if ( xfer_cnt == 0 ) { |
661 | /* A CRC Error causes this condition; retry */ | 668 | /* A CRC Error causes this condition; retry */ |
662 | sc->result = (DRIVER_SENSE << 24) | (DID_OK << 16) | | 669 | sc->result = (DRIVER_SENSE << 24) | (DID_OK << 16) | |
663 | (CHECK_CONDITION << 1); | 670 | (CHECK_CONDITION << 1); |
664 | sc->sense_buffer[0] = 0x70; | 671 | sc->sense_buffer[0] = 0x70; |
665 | sc->sense_buffer[2] = NO_SENSE; | 672 | sc->sense_buffer[2] = NO_SENSE; |
@@ -668,7 +675,9 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr) | |||
668 | } else { | 675 | } else { |
669 | sc->result = DID_SOFT_ERROR << 16; | 676 | sc->result = DID_SOFT_ERROR << 16; |
670 | } | 677 | } |
671 | dreplyprintk((KERN_NOTICE "RESIDUAL_MISMATCH: result=%x on id=%d\n", sc->result, sc->target)); | 678 | dreplyprintk((KERN_NOTICE |
679 | "RESIDUAL_MISMATCH: result=%x on id=%d\n", | ||
680 | sc->result, sc->device->id)); | ||
672 | break; | 681 | break; |
673 | 682 | ||
674 | case MPI_IOCSTATUS_SCSI_DATA_UNDERRUN: /* 0x0045 */ | 683 | case MPI_IOCSTATUS_SCSI_DATA_UNDERRUN: /* 0x0045 */ |
@@ -796,7 +805,6 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr) | |||
796 | return 1; | 805 | return 1; |
797 | } | 806 | } |
798 | 807 | ||
799 | |||
800 | /* | 808 | /* |
801 | * mptscsih_flush_running_cmds - For each command found, search | 809 | * mptscsih_flush_running_cmds - For each command found, search |
802 | * Scsi_Host instance taskQ and reply to OS. | 810 | * Scsi_Host instance taskQ and reply to OS. |
@@ -1017,7 +1025,7 @@ mptscsih_remove(struct pci_dev *pdev) | |||
1017 | scsi_host_put(host); | 1025 | scsi_host_put(host); |
1018 | 1026 | ||
1019 | mpt_detach(pdev); | 1027 | mpt_detach(pdev); |
1020 | 1028 | ||
1021 | } | 1029 | } |
1022 | 1030 | ||
1023 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ | 1031 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ |
@@ -1072,7 +1080,7 @@ mptscsih_resume(struct pci_dev *pdev) | |||
1072 | MPT_SCSI_HOST *hd; | 1080 | MPT_SCSI_HOST *hd; |
1073 | 1081 | ||
1074 | mpt_resume(pdev); | 1082 | mpt_resume(pdev); |
1075 | 1083 | ||
1076 | if(!host) | 1084 | if(!host) |
1077 | return 0; | 1085 | return 0; |
1078 | 1086 | ||
@@ -1214,8 +1222,8 @@ mptscsih_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t off | |||
1214 | int size = 0; | 1222 | int size = 0; |
1215 | 1223 | ||
1216 | if (func) { | 1224 | if (func) { |
1217 | /* | 1225 | /* |
1218 | * write is not supported | 1226 | * write is not supported |
1219 | */ | 1227 | */ |
1220 | } else { | 1228 | } else { |
1221 | if (start) | 1229 | if (start) |
@@ -1535,17 +1543,17 @@ mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 target, u8 lun, in | |||
1535 | */ | 1543 | */ |
1536 | if (mptscsih_tm_pending_wait(hd) == FAILED) { | 1544 | if (mptscsih_tm_pending_wait(hd) == FAILED) { |
1537 | if (type == MPI_SCSITASKMGMT_TASKTYPE_ABORT_TASK) { | 1545 | if (type == MPI_SCSITASKMGMT_TASKTYPE_ABORT_TASK) { |
1538 | dtmprintk((KERN_WARNING MYNAM ": %s: TMHandler abort: " | 1546 | dtmprintk((KERN_INFO MYNAM ": %s: TMHandler abort: " |
1539 | "Timed out waiting for last TM (%d) to complete! \n", | 1547 | "Timed out waiting for last TM (%d) to complete! \n", |
1540 | hd->ioc->name, hd->tmPending)); | 1548 | hd->ioc->name, hd->tmPending)); |
1541 | return FAILED; | 1549 | return FAILED; |
1542 | } else if (type == MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET) { | 1550 | } else if (type == MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET) { |
1543 | dtmprintk((KERN_WARNING MYNAM ": %s: TMHandler target reset: " | 1551 | dtmprintk((KERN_INFO MYNAM ": %s: TMHandler target reset: " |
1544 | "Timed out waiting for last TM (%d) to complete! \n", | 1552 | "Timed out waiting for last TM (%d) to complete! \n", |
1545 | hd->ioc->name, hd->tmPending)); | 1553 | hd->ioc->name, hd->tmPending)); |
1546 | return FAILED; | 1554 | return FAILED; |
1547 | } else if (type == MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS) { | 1555 | } else if (type == MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS) { |
1548 | dtmprintk((KERN_WARNING MYNAM ": %s: TMHandler bus reset: " | 1556 | dtmprintk((KERN_INFO MYNAM ": %s: TMHandler bus reset: " |
1549 | "Timed out waiting for last TM (%d) to complete! \n", | 1557 | "Timed out waiting for last TM (%d) to complete! \n", |
1550 | hd->ioc->name, hd->tmPending)); | 1558 | hd->ioc->name, hd->tmPending)); |
1551 | if (hd->tmPending & (1 << MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS)) | 1559 | if (hd->tmPending & (1 << MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS)) |
@@ -1631,8 +1639,7 @@ mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 target, u8 lun | |||
1631 | if ((mf = mpt_get_msg_frame(hd->ioc->TaskCtx, hd->ioc)) == NULL) { | 1639 | if ((mf = mpt_get_msg_frame(hd->ioc->TaskCtx, hd->ioc)) == NULL) { |
1632 | dfailprintk((MYIOC_s_ERR_FMT "IssueTaskMgmt, no msg frames!!\n", | 1640 | dfailprintk((MYIOC_s_ERR_FMT "IssueTaskMgmt, no msg frames!!\n", |
1633 | hd->ioc->name)); | 1641 | hd->ioc->name)); |
1634 | //return FAILED; | 1642 | return FAILED; |
1635 | return -999; | ||
1636 | } | 1643 | } |
1637 | dtmprintk((MYIOC_s_INFO_FMT "IssueTaskMgmt request @ %p\n", | 1644 | dtmprintk((MYIOC_s_INFO_FMT "IssueTaskMgmt request @ %p\n", |
1638 | hd->ioc->name, mf)); | 1645 | hd->ioc->name, mf)); |
@@ -1661,9 +1668,8 @@ mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 target, u8 lun | |||
1661 | 1668 | ||
1662 | pScsiTm->TaskMsgContext = ctx2abort; | 1669 | pScsiTm->TaskMsgContext = ctx2abort; |
1663 | 1670 | ||
1664 | dtmprintk((MYIOC_s_INFO_FMT | 1671 | dtmprintk((MYIOC_s_INFO_FMT "IssueTaskMgmt: ctx2abort (0x%08x) type=%d\n", |
1665 | "IssueTaskMgmt: ctx2abort (0x%08x) type=%d\n", | 1672 | hd->ioc->name, ctx2abort, type)); |
1666 | hd->ioc->name, ctx2abort, type)); | ||
1667 | 1673 | ||
1668 | DBG_DUMP_TM_REQUEST_FRAME((u32 *)pScsiTm); | 1674 | DBG_DUMP_TM_REQUEST_FRAME((u32 *)pScsiTm); |
1669 | 1675 | ||
@@ -1902,13 +1908,13 @@ mptscsih_host_reset(struct scsi_cmnd *SCpnt) | |||
1902 | 1908 | ||
1903 | /* If we can't locate the host to reset, then we failed. */ | 1909 | /* If we can't locate the host to reset, then we failed. */ |
1904 | if ((hd = (MPT_SCSI_HOST *) SCpnt->device->host->hostdata) == NULL){ | 1910 | if ((hd = (MPT_SCSI_HOST *) SCpnt->device->host->hostdata) == NULL){ |
1905 | dtmprintk( ( KERN_WARNING MYNAM ": mptscsih_host_reset: " | 1911 | dtmprintk( ( KERN_INFO MYNAM ": mptscsih_host_reset: " |
1906 | "Can't locate host! (sc=%p)\n", | 1912 | "Can't locate host! (sc=%p)\n", |
1907 | SCpnt ) ); | 1913 | SCpnt ) ); |
1908 | return FAILED; | 1914 | return FAILED; |
1909 | } | 1915 | } |
1910 | 1916 | ||
1911 | printk(KERN_WARNING MYNAM ": %s: >> Attempting host reset! (sc=%p)\n", | 1917 | printk(KERN_WARNING MYNAM ": %s: Attempting host reset! (sc=%p)\n", |
1912 | hd->ioc->name, SCpnt); | 1918 | hd->ioc->name, SCpnt); |
1913 | 1919 | ||
1914 | /* If our attempts to reset the host failed, then return a failed | 1920 | /* If our attempts to reset the host failed, then return a failed |
@@ -1924,7 +1930,7 @@ mptscsih_host_reset(struct scsi_cmnd *SCpnt) | |||
1924 | hd->tmState = TM_STATE_NONE; | 1930 | hd->tmState = TM_STATE_NONE; |
1925 | } | 1931 | } |
1926 | 1932 | ||
1927 | dtmprintk( ( KERN_WARNING MYNAM ": mptscsih_host_reset: " | 1933 | dtmprintk( ( KERN_INFO MYNAM ": mptscsih_host_reset: " |
1928 | "Status = %s\n", | 1934 | "Status = %s\n", |
1929 | (status == SUCCESS) ? "SUCCESS" : "FAILED" ) ); | 1935 | (status == SUCCESS) ? "SUCCESS" : "FAILED" ) ); |
1930 | 1936 | ||
@@ -1951,8 +1957,8 @@ mptscsih_tm_pending_wait(MPT_SCSI_HOST * hd) | |||
1951 | if (hd->tmState == TM_STATE_NONE) { | 1957 | if (hd->tmState == TM_STATE_NONE) { |
1952 | hd->tmState = TM_STATE_IN_PROGRESS; | 1958 | hd->tmState = TM_STATE_IN_PROGRESS; |
1953 | hd->tmPending = 1; | 1959 | hd->tmPending = 1; |
1954 | status = SUCCESS; | ||
1955 | spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags); | 1960 | spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags); |
1961 | status = SUCCESS; | ||
1956 | break; | 1962 | break; |
1957 | } | 1963 | } |
1958 | spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags); | 1964 | spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags); |
@@ -1980,7 +1986,7 @@ mptscsih_tm_wait_for_completion(MPT_SCSI_HOST * hd, ulong timeout ) | |||
1980 | spin_lock_irqsave(&hd->ioc->FreeQlock, flags); | 1986 | spin_lock_irqsave(&hd->ioc->FreeQlock, flags); |
1981 | if(hd->tmPending == 0) { | 1987 | if(hd->tmPending == 0) { |
1982 | status = SUCCESS; | 1988 | status = SUCCESS; |
1983 | spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags); | 1989 | spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags); |
1984 | break; | 1990 | break; |
1985 | } | 1991 | } |
1986 | spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags); | 1992 | spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags); |
@@ -2318,10 +2324,10 @@ mptscsih_slave_configure(struct scsi_device *device) | |||
2318 | if (pTarget == NULL) { | 2324 | if (pTarget == NULL) { |
2319 | /* Driver doesn't know about this device. | 2325 | /* Driver doesn't know about this device. |
2320 | * Kernel may generate a "Dummy Lun 0" which | 2326 | * Kernel may generate a "Dummy Lun 0" which |
2321 | * may become a real Lun if a | 2327 | * may become a real Lun if a |
2322 | * "scsi add-single-device" command is executed | 2328 | * "scsi add-single-device" command is executed |
2323 | * while the driver is active (hot-plug a | 2329 | * while the driver is active (hot-plug a |
2324 | * device). LSI Raid controllers need | 2330 | * device). LSI Raid controllers need |
2325 | * queue_depth set to DEV_HIGH for this reason. | 2331 | * queue_depth set to DEV_HIGH for this reason. |
2326 | */ | 2332 | */ |
2327 | scsi_adjust_queue_depth(device, MSG_SIMPLE_TAG, | 2333 | scsi_adjust_queue_depth(device, MSG_SIMPLE_TAG, |
@@ -2691,7 +2697,7 @@ mptscsih_initTarget(MPT_SCSI_HOST *hd, int bus_id, int target_id, u8 lun, char * | |||
2691 | * If the peripheral qualifier filter is enabled then if the target reports a 0x1 | 2697 | * If the peripheral qualifier filter is enabled then if the target reports a 0x1 |
2692 | * (i.e. The targer is capable of supporting the specified peripheral device type | 2698 | * (i.e. The targer is capable of supporting the specified peripheral device type |
2693 | * on this logical unit; however, the physical device is not currently connected | 2699 | * on this logical unit; however, the physical device is not currently connected |
2694 | * to this logical unit) it will be converted to a 0x3 (i.e. The target is not | 2700 | * to this logical unit) it will be converted to a 0x3 (i.e. The target is not |
2695 | * capable of supporting a physical device on this logical unit). This is to work | 2701 | * capable of supporting a physical device on this logical unit). This is to work |
2696 | * around a bug in th emid-layer in some distributions in which the mid-layer will | 2702 | * around a bug in th emid-layer in some distributions in which the mid-layer will |
2697 | * continue to try to communicate to the LUN and evntually create a dummy LUN. | 2703 | * continue to try to communicate to the LUN and evntually create a dummy LUN. |
@@ -3194,8 +3200,8 @@ mptscsih_writeSDP1(MPT_SCSI_HOST *hd, int portnum, int target_id, int flags) | |||
3194 | /* Get a MF for this command. | 3200 | /* Get a MF for this command. |
3195 | */ | 3201 | */ |
3196 | if ((mf = mpt_get_msg_frame(ioc->DoneCtx, ioc)) == NULL) { | 3202 | if ((mf = mpt_get_msg_frame(ioc->DoneCtx, ioc)) == NULL) { |
3197 | dprintk((MYIOC_s_WARN_FMT "write SDP1: no msg frames!\n", | 3203 | dfailprintk((MYIOC_s_WARN_FMT "write SDP1: no msg frames!\n", |
3198 | ioc->name)); | 3204 | ioc->name)); |
3199 | return -EAGAIN; | 3205 | return -EAGAIN; |
3200 | } | 3206 | } |
3201 | 3207 | ||
@@ -3289,7 +3295,7 @@ mptscsih_writeIOCPage4(MPT_SCSI_HOST *hd, int target_id, int bus) | |||
3289 | /* Get a MF for this command. | 3295 | /* Get a MF for this command. |
3290 | */ | 3296 | */ |
3291 | if ((mf = mpt_get_msg_frame(ioc->DoneCtx, ioc)) == NULL) { | 3297 | if ((mf = mpt_get_msg_frame(ioc->DoneCtx, ioc)) == NULL) { |
3292 | dprintk((MYIOC_s_WARN_FMT "writeIOCPage4 : no msg frames!\n", | 3298 | dfailprintk((MYIOC_s_WARN_FMT "writeIOCPage4 : no msg frames!\n", |
3293 | ioc->name)); | 3299 | ioc->name)); |
3294 | return -EAGAIN; | 3300 | return -EAGAIN; |
3295 | } | 3301 | } |
@@ -3447,7 +3453,7 @@ mptscsih_scandv_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr) | |||
3447 | * some type of error occurred. | 3453 | * some type of error occurred. |
3448 | */ | 3454 | */ |
3449 | MpiRaidActionReply_t *pr = (MpiRaidActionReply_t *)mr; | 3455 | MpiRaidActionReply_t *pr = (MpiRaidActionReply_t *)mr; |
3450 | if (pr->ActionStatus == MPI_RAID_ACTION_ASTATUS_SUCCESS) | 3456 | if (le16_to_cpu(pr->ActionStatus) == MPI_RAID_ACTION_ASTATUS_SUCCESS) |
3451 | completionCode = MPT_SCANDV_GOOD; | 3457 | completionCode = MPT_SCANDV_GOOD; |
3452 | else | 3458 | else |
3453 | completionCode = MPT_SCANDV_SOME_ERROR; | 3459 | completionCode = MPT_SCANDV_SOME_ERROR; |
@@ -3955,7 +3961,7 @@ mptscsih_synchronize_cache(MPT_SCSI_HOST *hd, int portnum) | |||
3955 | header1.PageLength = ioc->spi_data.sdp1length; | 3961 | header1.PageLength = ioc->spi_data.sdp1length; |
3956 | header1.PageNumber = 1; | 3962 | header1.PageNumber = 1; |
3957 | header1.PageType = MPI_CONFIG_PAGETYPE_SCSI_DEVICE; | 3963 | header1.PageType = MPI_CONFIG_PAGETYPE_SCSI_DEVICE; |
3958 | cfg.hdr = &header1; | 3964 | cfg.cfghdr.hdr = &header1; |
3959 | cfg.physAddr = cfg1_dma_addr; | 3965 | cfg.physAddr = cfg1_dma_addr; |
3960 | cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT; | 3966 | cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT; |
3961 | cfg.dir = 1; | 3967 | cfg.dir = 1; |
@@ -3996,9 +4002,9 @@ mptscsih_synchronize_cache(MPT_SCSI_HOST *hd, int portnum) | |||
3996 | dnegoprintk(("syncronize cache: id=%d width=0 factor=MPT_ASYNC " | 4002 | dnegoprintk(("syncronize cache: id=%d width=0 factor=MPT_ASYNC " |
3997 | "offset=0 negoFlags=%x request=%x config=%x\n", | 4003 | "offset=0 negoFlags=%x request=%x config=%x\n", |
3998 | id, flags, requested, configuration)); | 4004 | id, flags, requested, configuration)); |
3999 | pcfg1Data->RequestedParameters = le32_to_cpu(requested); | 4005 | pcfg1Data->RequestedParameters = cpu_to_le32(requested); |
4000 | pcfg1Data->Reserved = 0; | 4006 | pcfg1Data->Reserved = 0; |
4001 | pcfg1Data->Configuration = le32_to_cpu(configuration); | 4007 | pcfg1Data->Configuration = cpu_to_le32(configuration); |
4002 | cfg.pageAddr = (bus<<8) | id; | 4008 | cfg.pageAddr = (bus<<8) | id; |
4003 | mpt_config(hd->ioc, &cfg); | 4009 | mpt_config(hd->ioc, &cfg); |
4004 | } | 4010 | } |
@@ -4353,7 +4359,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id) | |||
4353 | /* Prep cfg structure | 4359 | /* Prep cfg structure |
4354 | */ | 4360 | */ |
4355 | cfg.pageAddr = (bus<<8) | id; | 4361 | cfg.pageAddr = (bus<<8) | id; |
4356 | cfg.hdr = NULL; | 4362 | cfg.cfghdr.hdr = NULL; |
4357 | 4363 | ||
4358 | /* Prep SDP0 header | 4364 | /* Prep SDP0 header |
4359 | */ | 4365 | */ |
@@ -4399,7 +4405,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id) | |||
4399 | pcfg1Data = (SCSIDevicePage1_t *) (pDvBuf + sz); | 4405 | pcfg1Data = (SCSIDevicePage1_t *) (pDvBuf + sz); |
4400 | cfg1_dma_addr = dvbuf_dma + sz; | 4406 | cfg1_dma_addr = dvbuf_dma + sz; |
4401 | 4407 | ||
4402 | /* Skip this ID? Set cfg.hdr to force config page write | 4408 | /* Skip this ID? Set cfg.cfghdr.hdr to force config page write |
4403 | */ | 4409 | */ |
4404 | { | 4410 | { |
4405 | ScsiCfgData *pspi_data = &hd->ioc->spi_data; | 4411 | ScsiCfgData *pspi_data = &hd->ioc->spi_data; |
@@ -4417,7 +4423,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id) | |||
4417 | 4423 | ||
4418 | dv.cmd = MPT_SET_MAX; | 4424 | dv.cmd = MPT_SET_MAX; |
4419 | mptscsih_dv_parms(hd, &dv, (void *)pcfg1Data); | 4425 | mptscsih_dv_parms(hd, &dv, (void *)pcfg1Data); |
4420 | cfg.hdr = &header1; | 4426 | cfg.cfghdr.hdr = &header1; |
4421 | 4427 | ||
4422 | /* Save the final negotiated settings to | 4428 | /* Save the final negotiated settings to |
4423 | * SCSI device page 1. | 4429 | * SCSI device page 1. |
@@ -4483,7 +4489,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id) | |||
4483 | dv.cmd = MPT_SET_MIN; | 4489 | dv.cmd = MPT_SET_MIN; |
4484 | mptscsih_dv_parms(hd, &dv, (void *)pcfg1Data); | 4490 | mptscsih_dv_parms(hd, &dv, (void *)pcfg1Data); |
4485 | 4491 | ||
4486 | cfg.hdr = &header1; | 4492 | cfg.cfghdr.hdr = &header1; |
4487 | cfg.physAddr = cfg1_dma_addr; | 4493 | cfg.physAddr = cfg1_dma_addr; |
4488 | cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT; | 4494 | cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT; |
4489 | cfg.dir = 1; | 4495 | cfg.dir = 1; |
@@ -4596,8 +4602,8 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id) | |||
4596 | if ((pbuf1[56] & 0x02) == 0) { | 4602 | if ((pbuf1[56] & 0x02) == 0) { |
4597 | pTarget->negoFlags |= MPT_TARGET_NO_NEGO_QAS; | 4603 | pTarget->negoFlags |= MPT_TARGET_NO_NEGO_QAS; |
4598 | hd->ioc->spi_data.noQas = MPT_TARGET_NO_NEGO_QAS; | 4604 | hd->ioc->spi_data.noQas = MPT_TARGET_NO_NEGO_QAS; |
4599 | ddvprintk((MYIOC_s_NOTE_FMT | 4605 | ddvprintk((MYIOC_s_NOTE_FMT |
4600 | "DV: Start Basic noQas on id=%d due to pbuf1[56]=%x\n", | 4606 | "DV: Start Basic noQas on id=%d due to pbuf1[56]=%x\n", |
4601 | ioc->name, id, pbuf1[56])); | 4607 | ioc->name, id, pbuf1[56])); |
4602 | } | 4608 | } |
4603 | } | 4609 | } |
@@ -4637,7 +4643,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id) | |||
4637 | u32 sdp0_info; | 4643 | u32 sdp0_info; |
4638 | u32 sdp0_nego; | 4644 | u32 sdp0_nego; |
4639 | 4645 | ||
4640 | cfg.hdr = &header0; | 4646 | cfg.cfghdr.hdr = &header0; |
4641 | cfg.physAddr = cfg0_dma_addr; | 4647 | cfg.physAddr = cfg0_dma_addr; |
4642 | cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT; | 4648 | cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT; |
4643 | cfg.dir = 0; | 4649 | cfg.dir = 0; |
@@ -4673,7 +4679,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id) | |||
4673 | if (!firstPass) | 4679 | if (!firstPass) |
4674 | doFallback = 1; | 4680 | doFallback = 1; |
4675 | } else { | 4681 | } else { |
4676 | ddvprintk((MYIOC_s_NOTE_FMT | 4682 | ddvprintk((MYIOC_s_NOTE_FMT |
4677 | "DV:Inquiry compared id=%d, calling initTarget\n", ioc->name, id)); | 4683 | "DV:Inquiry compared id=%d, calling initTarget\n", ioc->name, id)); |
4678 | hd->ioc->spi_data.dvStatus[id] &= ~MPT_SCSICFG_DV_NOT_DONE; | 4684 | hd->ioc->spi_data.dvStatus[id] &= ~MPT_SCSICFG_DV_NOT_DONE; |
4679 | mptscsih_initTarget(hd, | 4685 | mptscsih_initTarget(hd, |
@@ -4689,8 +4695,8 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id) | |||
4689 | 4695 | ||
4690 | } else if (rc == MPT_SCANDV_ISSUE_SENSE) | 4696 | } else if (rc == MPT_SCANDV_ISSUE_SENSE) |
4691 | doFallback = 1; /* set fallback flag */ | 4697 | doFallback = 1; /* set fallback flag */ |
4692 | else if ((rc == MPT_SCANDV_DID_RESET) || | 4698 | else if ((rc == MPT_SCANDV_DID_RESET) || |
4693 | (rc == MPT_SCANDV_SENSE) || | 4699 | (rc == MPT_SCANDV_SENSE) || |
4694 | (rc == MPT_SCANDV_FALLBACK)) | 4700 | (rc == MPT_SCANDV_FALLBACK)) |
4695 | doFallback = 1; /* set fallback flag */ | 4701 | doFallback = 1; /* set fallback flag */ |
4696 | else | 4702 | else |
@@ -4722,7 +4728,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id) | |||
4722 | * 4) release | 4728 | * 4) release |
4723 | * 5) update nego parms to target struct | 4729 | * 5) update nego parms to target struct |
4724 | */ | 4730 | */ |
4725 | cfg.hdr = &header1; | 4731 | cfg.cfghdr.hdr = &header1; |
4726 | cfg.physAddr = cfg1_dma_addr; | 4732 | cfg.physAddr = cfg1_dma_addr; |
4727 | cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT; | 4733 | cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT; |
4728 | cfg.dir = 1; | 4734 | cfg.dir = 1; |
@@ -5121,12 +5127,12 @@ target_done: | |||
5121 | 5127 | ||
5122 | /* Set if cfg1_dma_addr contents is valid | 5128 | /* Set if cfg1_dma_addr contents is valid |
5123 | */ | 5129 | */ |
5124 | if ((cfg.hdr != NULL) && (retcode == 0)){ | 5130 | if ((cfg.cfghdr.hdr != NULL) && (retcode == 0)){ |
5125 | /* If disk, not U320, disable QAS | 5131 | /* If disk, not U320, disable QAS |
5126 | */ | 5132 | */ |
5127 | if ((inq0 == 0) && (dv.now.factor > MPT_ULTRA320)) { | 5133 | if ((inq0 == 0) && (dv.now.factor > MPT_ULTRA320)) { |
5128 | hd->ioc->spi_data.noQas = MPT_TARGET_NO_NEGO_QAS; | 5134 | hd->ioc->spi_data.noQas = MPT_TARGET_NO_NEGO_QAS; |
5129 | ddvprintk((MYIOC_s_NOTE_FMT | 5135 | ddvprintk((MYIOC_s_NOTE_FMT |
5130 | "noQas set due to id=%d has factor=%x\n", ioc->name, id, dv.now.factor)); | 5136 | "noQas set due to id=%d has factor=%x\n", ioc->name, id, dv.now.factor)); |
5131 | } | 5137 | } |
5132 | 5138 | ||
@@ -5137,7 +5143,7 @@ target_done: | |||
5137 | * skip save of the final negotiated settings to | 5143 | * skip save of the final negotiated settings to |
5138 | * SCSI device page 1. | 5144 | * SCSI device page 1. |
5139 | * | 5145 | * |
5140 | cfg.hdr = &header1; | 5146 | cfg.cfghdr.hdr = &header1; |
5141 | cfg.physAddr = cfg1_dma_addr; | 5147 | cfg.physAddr = cfg1_dma_addr; |
5142 | cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT; | 5148 | cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT; |
5143 | cfg.dir = 1; | 5149 | cfg.dir = 1; |
@@ -5248,7 +5254,7 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVPARAMETERS *dv,void *pPage) | |||
5248 | /* Update tmax values with those from Device Page 0.*/ | 5254 | /* Update tmax values with those from Device Page 0.*/ |
5249 | pPage0 = (SCSIDevicePage0_t *) pPage; | 5255 | pPage0 = (SCSIDevicePage0_t *) pPage; |
5250 | if (pPage0) { | 5256 | if (pPage0) { |
5251 | val = cpu_to_le32(pPage0->NegotiatedParameters); | 5257 | val = le32_to_cpu(pPage0->NegotiatedParameters); |
5252 | dv->max.width = val & MPI_SCSIDEVPAGE0_NP_WIDE ? 1 : 0; | 5258 | dv->max.width = val & MPI_SCSIDEVPAGE0_NP_WIDE ? 1 : 0; |
5253 | dv->max.offset = (val&MPI_SCSIDEVPAGE0_NP_NEG_SYNC_OFFSET_MASK) >> 16; | 5259 | dv->max.offset = (val&MPI_SCSIDEVPAGE0_NP_NEG_SYNC_OFFSET_MASK) >> 16; |
5254 | dv->max.factor = (val&MPI_SCSIDEVPAGE0_NP_NEG_SYNC_PERIOD_MASK) >> 8; | 5260 | dv->max.factor = (val&MPI_SCSIDEVPAGE0_NP_NEG_SYNC_PERIOD_MASK) >> 8; |
@@ -5276,12 +5282,12 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVPARAMETERS *dv,void *pPage) | |||
5276 | dv->now.offset, &val, &configuration, dv->now.flags); | 5282 | dv->now.offset, &val, &configuration, dv->now.flags); |
5277 | dnegoprintk(("Setting Max: id=%d width=%d factor=%x offset=%x negoFlags=%x request=%x config=%x\n", | 5283 | dnegoprintk(("Setting Max: id=%d width=%d factor=%x offset=%x negoFlags=%x request=%x config=%x\n", |
5278 | id, dv->now.width, dv->now.factor, dv->now.offset, dv->now.flags, val, configuration)); | 5284 | id, dv->now.width, dv->now.factor, dv->now.offset, dv->now.flags, val, configuration)); |
5279 | pPage1->RequestedParameters = le32_to_cpu(val); | 5285 | pPage1->RequestedParameters = cpu_to_le32(val); |
5280 | pPage1->Reserved = 0; | 5286 | pPage1->Reserved = 0; |
5281 | pPage1->Configuration = le32_to_cpu(configuration); | 5287 | pPage1->Configuration = cpu_to_le32(configuration); |
5282 | } | 5288 | } |
5283 | 5289 | ||
5284 | ddvprintk(("id=%d width=%d factor=%x offset=%x flags=%x request=%x configuration=%x\n", | 5290 | ddvprintk(("id=%d width=%d factor=%x offset=%x negoFlags=%x request=%x configuration=%x\n", |
5285 | id, dv->now.width, dv->now.factor, dv->now.offset, dv->now.flags, val, configuration)); | 5291 | id, dv->now.width, dv->now.factor, dv->now.offset, dv->now.flags, val, configuration)); |
5286 | break; | 5292 | break; |
5287 | 5293 | ||
@@ -5301,9 +5307,9 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVPARAMETERS *dv,void *pPage) | |||
5301 | offset, &val, &configuration, negoFlags); | 5307 | offset, &val, &configuration, negoFlags); |
5302 | dnegoprintk(("Setting Min: id=%d width=%d factor=%x offset=%x negoFlags=%x request=%x config=%x\n", | 5308 | dnegoprintk(("Setting Min: id=%d width=%d factor=%x offset=%x negoFlags=%x request=%x config=%x\n", |
5303 | id, width, factor, offset, negoFlags, val, configuration)); | 5309 | id, width, factor, offset, negoFlags, val, configuration)); |
5304 | pPage1->RequestedParameters = le32_to_cpu(val); | 5310 | pPage1->RequestedParameters = cpu_to_le32(val); |
5305 | pPage1->Reserved = 0; | 5311 | pPage1->Reserved = 0; |
5306 | pPage1->Configuration = le32_to_cpu(configuration); | 5312 | pPage1->Configuration = cpu_to_le32(configuration); |
5307 | } | 5313 | } |
5308 | ddvprintk(("id=%d width=%d factor=%x offset=%x request=%x config=%x negoFlags=%x\n", | 5314 | ddvprintk(("id=%d width=%d factor=%x offset=%x request=%x config=%x negoFlags=%x\n", |
5309 | id, width, factor, offset, val, configuration, negoFlags)); | 5315 | id, width, factor, offset, val, configuration, negoFlags)); |
@@ -5377,12 +5383,12 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVPARAMETERS *dv,void *pPage) | |||
5377 | if (pPage1) { | 5383 | if (pPage1) { |
5378 | mptscsih_setDevicePage1Flags (width, factor, offset, &val, | 5384 | mptscsih_setDevicePage1Flags (width, factor, offset, &val, |
5379 | &configuration, dv->now.flags); | 5385 | &configuration, dv->now.flags); |
5380 | dnegoprintk(("Finish: id=%d width=%d offset=%d factor=%x flags=%x request=%x config=%x\n", | 5386 | dnegoprintk(("Finish: id=%d width=%d offset=%d factor=%x negoFlags=%x request=%x config=%x\n", |
5381 | id, width, offset, factor, dv->now.flags, val, configuration)); | 5387 | id, width, offset, factor, dv->now.flags, val, configuration)); |
5382 | 5388 | ||
5383 | pPage1->RequestedParameters = le32_to_cpu(val); | 5389 | pPage1->RequestedParameters = cpu_to_le32(val); |
5384 | pPage1->Reserved = 0; | 5390 | pPage1->Reserved = 0; |
5385 | pPage1->Configuration = le32_to_cpu(configuration); | 5391 | pPage1->Configuration = cpu_to_le32(configuration); |
5386 | } | 5392 | } |
5387 | 5393 | ||
5388 | ddvprintk(("Finish: id=%d offset=%d factor=%x width=%d request=%x config=%x\n", | 5394 | ddvprintk(("Finish: id=%d offset=%d factor=%x width=%d request=%x config=%x\n", |
diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c index dfa8806b1e13..587d1274fd74 100644 --- a/drivers/message/fusion/mptspi.c +++ b/drivers/message/fusion/mptspi.c | |||
@@ -162,15 +162,15 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
162 | u8 *mem; | 162 | u8 *mem; |
163 | int error=0; | 163 | int error=0; |
164 | int r; | 164 | int r; |
165 | 165 | ||
166 | if ((r = mpt_attach(pdev,id)) != 0) | 166 | if ((r = mpt_attach(pdev,id)) != 0) |
167 | return r; | 167 | return r; |
168 | 168 | ||
169 | ioc = pci_get_drvdata(pdev); | 169 | ioc = pci_get_drvdata(pdev); |
170 | ioc->DoneCtx = mptspiDoneCtx; | 170 | ioc->DoneCtx = mptspiDoneCtx; |
171 | ioc->TaskCtx = mptspiTaskCtx; | 171 | ioc->TaskCtx = mptspiTaskCtx; |
172 | ioc->InternalCtx = mptspiInternalCtx; | 172 | ioc->InternalCtx = mptspiInternalCtx; |
173 | 173 | ||
174 | /* Added sanity check on readiness of the MPT adapter. | 174 | /* Added sanity check on readiness of the MPT adapter. |
175 | */ | 175 | */ |
176 | if (ioc->last_state != MPI_IOC_STATE_OPERATIONAL) { | 176 | if (ioc->last_state != MPI_IOC_STATE_OPERATIONAL) { |