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) { |
