Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 14 Apr 2006 08:28:16 GMT
From:      John-Mark Gurney <jmg@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 95237 for review
Message-ID:  <200604140828.k3E8SGiB023413@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=95237

Change 95237 by jmg@jmg_arlene on 2006/04/14 08:28:08

	pull in updated mpt driver to see if this'll improve anything..

Affected files ...

.. //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpilib/mpi.h#3 integrate
.. //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpilib/mpi_cnfg.h#3 integrate
.. //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpilib/mpi_ioc.h#3 integrate
.. //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpilib/mpi_sas.h#3 integrate
.. //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpilib/mpi_type.h#3 integrate
.. //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpt.c#3 integrate
.. //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpt.h#3 integrate
.. //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpt_cam.c#3 integrate
.. //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpt_cam.h#3 integrate
.. //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpt_debug.c#3 integrate
.. //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpt_pci.c#3 edit
.. //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpt_raid.c#3 integrate
.. //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpt_reg.h#3 integrate

Differences ...

==== //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpilib/mpi.h#3 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/mpt/mpilib/mpi.h,v 1.7 2006/01/21 00:29:51 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/mpt/mpilib/mpi.h,v 1.8 2006/02/25 07:45:54 mjacob Exp $ */
 /*-
  * Copyright (c) 2000-2005, LSI Logic Corporation and its contributors.
  * All rights reserved.
@@ -33,7 +33,7 @@
  *          Title:  MPI Message independent structures and definitions
  *  Creation Date:  July 27, 2000
  *
- *    mpi.h Version:  01.05.09
+ *    mpi.h Version:  01.05.10
  *
  *  Version History
  *  ---------------
@@ -102,6 +102,7 @@
  *                      TargetAssistExtended requests.
  *                      Added EEDP IOCStatus codes.
  *  08-03-05  01.05.09  Bumped MPI_HEADER_VERSION_UNIT.
+ *  08-30-05  01.05.10  Added 2 new IOCStatus codes for Target.
  *  --------------------------------------------------------------------------
  */
 
@@ -132,7 +133,7 @@
 /* Note: The major versions of 0xe0 through 0xff are reserved */
 
 /* versioning for this MPI header set */
-#define MPI_HEADER_VERSION_UNIT             (0x0B)
+#define MPI_HEADER_VERSION_UNIT             (0x0C)
 #define MPI_HEADER_VERSION_DEV              (0x00)
 #define MPI_HEADER_VERSION_UNIT_MASK        (0xFF00)
 #define MPI_HEADER_VERSION_UNIT_SHIFT       (8)
@@ -739,6 +740,8 @@
 #define MPI_IOCSTATUS_TARGET_DATA_OFFSET_ERROR   (0x006D)
 #define MPI_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA (0x006E)
 #define MPI_IOCSTATUS_TARGET_IU_TOO_SHORT        (0x006F)
+#define MPI_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT     (0x0070)
+#define MPI_IOCSTATUS_TARGET_NAK_RECEIVED        (0x0071)
 
 /****************************************************************************/
 /*  Additional FCP target values (obsolete)                                 */

==== //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpilib/mpi_cnfg.h#3 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/mpt/mpilib/mpi_cnfg.h,v 1.7 2006/01/21 00:29:51 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/mpt/mpilib/mpi_cnfg.h,v 1.8 2006/02/25 07:45:54 mjacob Exp $ */
 /*-
  * Copyright (c) 2000-2005, LSI Logic Corporation and its contributors.
  * All rights reserved.
@@ -33,7 +33,7 @@
  *          Title:  MPI Config message, structures, and Pages
  *  Creation Date:  July 27, 2000
  *
- *    mpi_cnfg.h Version:  01.05.10
+ *    mpi_cnfg.h Version:  01.05.11
  *
  *  Version History
  *  ---------------
@@ -285,6 +285,14 @@
  *                      Added EnclosureHandle field to SAS Expander page 0.
  *                      Removed redundant NumTableEntriesProg field from SAS
  *                      Expander Page 1.
+ *  08-30-05  01.05.11  Added DeviceID for FC949E and changed the DeviceID for
+ *                      SAS1078.
+ *                      Added more defines for Manufacturing Page 4 Flags field.
+ *                      Added more defines for IOCSettings and added
+ *                      ExpanderSpinup field to Bios Page 1.
+ *                      Added postpone SATA Init bit to SAS IO Unit Page 1
+ *                      ControlFlags.
+ *                      Changed LogEntry format for Log Page 0.
  *  --------------------------------------------------------------------------
  */
 
@@ -530,7 +538,7 @@
 #define MPI_MANUFACTPAGE_DEVICEID_FC929X            (0x0626)
 #define MPI_MANUFACTPAGE_DEVICEID_FC939X            (0x0642)
 #define MPI_MANUFACTPAGE_DEVICEID_FC949X            (0x0640)
-#define MPI_MANUFACTPAGE_DEVICEID_FC949ES           (0x0646)
+#define MPI_MANUFACTPAGE_DEVICEID_FC949E            (0x0646)
 /* SCSI */
 #define MPI_MANUFACTPAGE_DEVID_53C1030              (0x0030)
 #define MPI_MANUFACTPAGE_DEVID_53C1030ZC            (0x0031)
@@ -546,7 +554,7 @@
 #define MPI_MANUFACTPAGE_DEVID_SAS1066E             (0x005A)
 #define MPI_MANUFACTPAGE_DEVID_SAS1068              (0x0054)
 #define MPI_MANUFACTPAGE_DEVID_SAS1068E             (0x0058)
-#define MPI_MANUFACTPAGE_DEVID_SAS1078              (0x0060)
+#define MPI_MANUFACTPAGE_DEVID_SAS1078              (0x0062)
 
 
 typedef struct _CONFIG_PAGE_MANUFACTURING_0
@@ -650,9 +658,14 @@
 } CONFIG_PAGE_MANUFACTURING_4, MPI_POINTER PTR_CONFIG_PAGE_MANUFACTURING_4,
   ManufacturingPage4_t, MPI_POINTER pManufacturingPage4_t;
 
-#define MPI_MANUFACTURING4_PAGEVERSION                  (0x02)
+#define MPI_MANUFACTURING4_PAGEVERSION                  (0x03)
 
 /* defines for the Flags field */
+#define MPI_MANPAGE4_IME_DISABLE                        (0x20)
+#define MPI_MANPAGE4_IM_DISABLE                         (0x10)
+#define MPI_MANPAGE4_IS_DISABLE                         (0x08)
+#define MPI_MANPAGE4_IR_MODEPAGE8_DISABLE               (0x04)
+#define MPI_MANPAGE4_IM_RESYNC_CACHE_ENABLE             (0x02)
 #define MPI_MANPAGE4_IR_NO_MIX_SAS_SATA                 (0x01)
 
 
@@ -1002,7 +1015,8 @@
     U32                     Reserved1;                  /* 0Ch */
     U32                     DeviceSettings;             /* 10h */
     U16                     NumberOfDevices;            /* 14h */
-    U16                     Reserved2;                  /* 16h */
+    U8                      ExpanderSpinup;             /* 16h */
+    U8                      Reserved2;                  /* 17h */
     U16                     IOTimeoutBlockDevicesNonRM; /* 18h */
     U16                     IOTimeoutSequential;        /* 1Ah */
     U16                     IOTimeoutOther;             /* 1Ch */
@@ -1010,7 +1024,7 @@
 } CONFIG_PAGE_BIOS_1, MPI_POINTER PTR_CONFIG_PAGE_BIOS_1,
   BIOSPage1_t, MPI_POINTER pBIOSPage1_t;
 
-#define MPI_BIOSPAGE1_PAGEVERSION                       (0x02)
+#define MPI_BIOSPAGE1_PAGEVERSION                       (0x03)
 
 /* values for the BiosOptions field */
 #define MPI_BIOSPAGE1_OPTIONS_SPI_ENABLE                (0x00000400)
@@ -1019,8 +1033,15 @@
 #define MPI_BIOSPAGE1_OPTIONS_DISABLE_BIOS              (0x00000001)
 
 /* values for the IOCSettings field */
+#define MPI_BIOSPAGE1_IOCSET_MASK_INITIAL_SPINUP_DELAY  (0x0F000000)
+#define MPI_BIOSPAGE1_IOCSET_SHIFT_INITIAL_SPINUP_DELAY (24)
+
 #define MPI_BIOSPAGE1_IOCSET_MASK_PORT_ENABLE_DELAY     (0x00F00000)
 #define MPI_BIOSPAGE1_IOCSET_SHIFT_PORT_ENABLE_DELAY    (20)
+
+#define MPI_BIOSPAGE1_IOCSET_AUTO_PORT_ENABLE           (0x00080000)
+#define MPI_BIOSPAGE1_IOCSET_DIRECT_ATTACH_SPINUP_MODE  (0x00040000)
+
 #define MPI_BIOSPAGE1_IOCSET_MASK_BOOT_PREFERENCE       (0x00030000)
 #define MPI_BIOSPAGE1_IOCSET_ENCLOSURE_SLOT_BOOT        (0x00000000)
 #define MPI_BIOSPAGE1_IOCSET_SAS_ADDRESS_BOOT           (0x00010000)
@@ -1050,6 +1071,11 @@
 #define MPI_BIOSPAGE1_DEVSET_DISABLE_NON_RM_LUN         (0x00000002)
 #define MPI_BIOSPAGE1_DEVSET_DISABLE_OTHER_LUN          (0x00000001)
 
+/* defines for the ExpanderSpinup field */
+#define MPI_BIOSPAGE1_EXPSPINUP_MASK_MAX_TARGET         (0xF0)
+#define MPI_BIOSPAGE1_EXPSPINUP_SHIFT_MAX_TARGET        (4)
+#define MPI_BIOSPAGE1_EXPSPINUP_MASK_DELAY              (0x0F)
+
 typedef struct _MPI_BOOT_DEVICE_ADAPTER_ORDER
 {
     U32         Reserved1;                              /* 00h */
@@ -1267,13 +1293,13 @@
 
 #define MPI_SCSIPORTPAGE0_CAP_SHIFT_MIN_SYNC_PERIOD     (8)
 #define MPI_SCSIPORTPAGE0_CAP_GET_MIN_SYNC_PERIOD(Cap)      \
-    (  ((Cap) & MPI_SCSIPORTPAGE0_CAP_MASK_MIN_SYNC_PERIOD) \
+    (  ((Cap) & MPI_SCSIPORTPAGE0_CAP_MIN_SYNC_PERIOD_MASK) \
     >> MPI_SCSIPORTPAGE0_CAP_SHIFT_MIN_SYNC_PERIOD          \
     )
 #define MPI_SCSIPORTPAGE0_CAP_MAX_SYNC_OFFSET_MASK      (0x00FF0000)
 #define MPI_SCSIPORTPAGE0_CAP_SHIFT_MAX_SYNC_OFFSET     (16)
 #define MPI_SCSIPORTPAGE0_CAP_GET_MAX_SYNC_OFFSET(Cap)      \
-    (  ((Cap) & MPI_SCSIPORTPAGE0_CAP_MASK_MAX_SYNC_OFFSET) \
+    (  ((Cap) & MPI_SCSIPORTPAGE0_CAP_MAX_SYNC_OFFSET_MASK) \
     >> MPI_SCSIPORTPAGE0_CAP_SHIFT_MAX_SYNC_OFFSET          \
     )
 #define MPI_SCSIPORTPAGE0_CAP_IDP                       (0x08000000)
@@ -2404,7 +2430,7 @@
 } CONFIG_PAGE_SAS_IO_UNIT_1, MPI_POINTER PTR_CONFIG_PAGE_SAS_IO_UNIT_1,
   SasIOUnitPage1_t, MPI_POINTER pSasIOUnitPage1_t;
 
-#define MPI_SASIOUNITPAGE1_PAGEVERSION      (0x04)
+#define MPI_SASIOUNITPAGE1_PAGEVERSION      (0x05)
 
 /* values for SAS IO Unit Page 1 ControlFlags */
 #define MPI_SAS_IOUNIT1_CONTROL_DEVICE_SELF_TEST            (0x8000)
@@ -2419,6 +2445,7 @@
 #define MPI_SAS_IOUNIT1_CONTROL_DEV_SAS_SUPPORT             (0x01)
 #define MPI_SAS_IOUNIT1_CONTROL_DEV_SATA_SUPPORT            (0x02)
 
+#define MPI_SAS_IOUNIT1_CONTROL_POSTPONE_SATA_INIT          (0x0100)
 #define MPI_SAS_IOUNIT1_CONTROL_SATA_48BIT_LBA_REQUIRED     (0x0080)
 #define MPI_SAS_IOUNIT1_CONTROL_SATA_SMART_REQUIRED         (0x0040)
 #define MPI_SAS_IOUNIT1_CONTROL_SATA_NCQ_REQUIRED           (0x0020)
@@ -2803,16 +2830,15 @@
 #define MPI_LOG_0_NUM_LOG_ENTRIES        (1)
 #endif
 
-#define MPI_LOG_0_LOG_DATA_LENGTH        (20)
+#define MPI_LOG_0_LOG_DATA_LENGTH        (0x1C)
 
 typedef struct _MPI_LOG_0_ENTRY
 {
-    U64         WWID;                               /* 00h */
-    U32         TimeStamp;                          /* 08h */
-    U32         Reserved1;                          /* 0Ch */
-    U16         LogSequence;                        /* 10h */
-    U16         LogEntryQualifier;                  /* 12h */
-    U8          LogData[MPI_LOG_0_LOG_DATA_LENGTH]; /* 14h */
+    U32         TimeStamp;                          /* 00h */
+    U32         Reserved1;                          /* 04h */
+    U16         LogSequence;                        /* 08h */
+    U16         LogEntryQualifier;                  /* 0Ah */
+    U8          LogData[MPI_LOG_0_LOG_DATA_LENGTH]; /* 0Ch */
 } MPI_LOG_0_ENTRY, MPI_POINTER PTR_MPI_LOG_0_ENTRY,
   MpiLog0Entry_t, MPI_POINTER pMpiLog0Entry_t;
 
@@ -2831,7 +2857,7 @@
 } CONFIG_PAGE_LOG_0, MPI_POINTER PTR_CONFIG_PAGE_LOG_0,
   LogPage0_t, MPI_POINTER pLogPage0_t;
 
-#define MPI_LOG_0_PAGEVERSION               (0x00)
+#define MPI_LOG_0_PAGEVERSION               (0x01)
 
 
 #endif

==== //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpilib/mpi_ioc.h#3 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/mpt/mpilib/mpi_ioc.h,v 1.7 2006/01/21 00:29:51 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/mpt/mpilib/mpi_ioc.h,v 1.8 2006/02/25 07:45:54 mjacob Exp $ */
 /*-
  * Copyright (c) 2000-2005, LSI Logic Corporation and its contributors.
  * All rights reserved.
@@ -34,7 +34,7 @@
  *          Title:  MPI IOC, Port, Event, FW Download, and FW Upload messages
  *  Creation Date:  August 11, 2000
  *
- *    mpi_ioc.h Version:  01.05.09
+ *    mpi_ioc.h Version:  01.05.10
  *
  *  Version History
  *  ---------------
@@ -111,6 +111,10 @@
  *                      Removed IOCFacts Reply EEDP Capability bit.
  *  06-24-05  01.05.09  Added 5 new IOCFacts Reply IOCCapabilities bits.
  *                      Added Max SATA Targets to SAS Discovery Error event.
+ *  08-30-05  01.05.10  Added 4 new events and their event data structures.
+ *                      Added new ReasonCode value for SAS Device Status Change
+ *                      event.
+ *                      Added new family code for FC949E.
  *  --------------------------------------------------------------------------
  */
 
@@ -492,6 +496,10 @@
 #define MPI_EVENT_PERSISTENT_TABLE_FULL     (0x00000011)
 #define MPI_EVENT_SAS_PHY_LINK_STATUS       (0x00000012)
 #define MPI_EVENT_SAS_DISCOVERY_ERROR       (0x00000013)
+#define MPI_EVENT_IR_RESYNC_UPDATE          (0x00000014)
+#define MPI_EVENT_IR2                       (0x00000015)
+#define MPI_EVENT_SAS_DISCOVERY             (0x00000016)
+#define MPI_EVENT_LOG_ENTRY_ADDED           (0x00000021)
 
 /* AckRequired field values */
 
@@ -508,6 +516,29 @@
 } EVENT_DATA_EVENT_CHANGE, MPI_POINTER PTR_EVENT_DATA_EVENT_CHANGE,
   EventDataEventChange_t, MPI_POINTER pEventDataEventChange_t;
 
+/* LogEntryAdded Event data */
+
+/* this structure matches MPI_LOG_0_ENTRY in mpi_cnfg.h */
+#define MPI_EVENT_DATA_LOG_ENTRY_DATA_LENGTH    (0x1C)
+typedef struct _EVENT_DATA_LOG_ENTRY
+{
+    U32         TimeStamp;                          /* 00h */
+    U32         Reserved1;                          /* 04h */
+    U16         LogSequence;                        /* 08h */
+    U16         LogEntryQualifier;                  /* 0Ah */
+    U8          LogData[MPI_EVENT_DATA_LOG_ENTRY_DATA_LENGTH]; /* 0Ch */
+} EVENT_DATA_LOG_ENTRY, MPI_POINTER PTR_EVENT_DATA_LOG_ENTRY,
+  MpiEventDataLogEntry_t, MPI_POINTER pMpiEventDataLogEntry_t;
+
+typedef struct _EVENT_DATA_LOG_ENTRY_ADDED
+{
+    U16                     LogSequence;            /* 00h */
+    U16                     Reserved1;              /* 02h */
+    U32                     Reserved2;              /* 04h */
+    EVENT_DATA_LOG_ENTRY    LogEntry;               /* 08h */
+} EVENT_DATA_LOG_ENTRY_ADDED, MPI_POINTER PTR_EVENT_DATA_LOG_ENTRY_ADDED,
+  MpiEventDataLogEntryAdded_t, MPI_POINTER pMpiEventDataLogEntryAdded_t;
+
 /* SCSI Event data for Port, Bus and Device forms */
 
 typedef struct _EVENT_DATA_SCSI
@@ -566,6 +597,7 @@
 #define MPI_EVENT_SAS_DEV_STAT_RC_SMART_DATA            (0x05)
 #define MPI_EVENT_SAS_DEV_STAT_RC_NO_PERSIST_ADDED      (0x06)
 #define MPI_EVENT_SAS_DEV_STAT_RC_UNSUPPORTED           (0x07)
+#define MPI_EVENT_SAS_DEV_STAT_RC_INTERNAL_DEVICE_RESET (0x08)
 
 
 /* SCSI Event data for Queue Full event */
@@ -607,6 +639,79 @@
 #define MPI_EVENT_RAID_RC_SMART_DATA                    (0x0A)
 #define MPI_EVENT_RAID_RC_REPLACE_ACTION_STARTED        (0x0B)
 
+
+/* MPI Integrated RAID Resync Update Event data */
+
+typedef struct _MPI_EVENT_DATA_IR_RESYNC_UPDATE
+{
+    U8                      VolumeID;                   /* 00h */
+    U8                      VolumeBus;                  /* 01h */
+    U8                      ResyncComplete;             /* 02h */
+    U8                      Reserved1;                  /* 03h */
+    U32                     Reserved2;                  /* 04h */
+} MPI_EVENT_DATA_IR_RESYNC_UPDATE,
+  MPI_POINTER PTR_MPI_EVENT_DATA_IR_RESYNC_UPDATE,
+  MpiEventDataIrResyncUpdate_t, MPI_POINTER pMpiEventDataIrResyncUpdate_t;
+
+/* MPI IR2 Event data */
+
+/* MPI_LD_STATE or MPI_PD_STATE */
+typedef struct _IR2_STATE_CHANGED
+{
+    U16                 PreviousState;  /* 00h */
+    U16                 NewState;       /* 02h */
+} IR2_STATE_CHANGED, MPI_POINTER PTR_IR2_STATE_CHANGED;
+
+typedef struct _IR2_PD_INFO
+{
+    U16                 DeviceHandle;           /* 00h */
+    U8                  TruncEnclosureHandle;   /* 02h */
+    U8                  TruncatedSlot;          /* 03h */
+} IR2_PD_INFO, MPI_POINTER PTR_IR2_PD_INFO;
+
+typedef union _MPI_IR2_RC_EVENT_DATA
+{
+    IR2_STATE_CHANGED   StateChanged;
+    U32                 Lba;
+    IR2_PD_INFO         PdInfo;
+} MPI_IR2_RC_EVENT_DATA, MPI_POINTER PTR_MPI_IR2_RC_EVENT_DATA;
+
+typedef struct _MPI_EVENT_DATA_IR2
+{
+    U8                      TargetID;             /* 00h */
+    U8                      Bus;                  /* 01h */
+    U8                      ReasonCode;           /* 02h */
+    U8                      PhysDiskNum;          /* 03h */
+    MPI_IR2_RC_EVENT_DATA   IR2EventData;         /* 04h */
+} MPI_EVENT_DATA_IR2, MPI_POINTER PTR_MPI_EVENT_DATA_IR2,
+  MpiEventDataIR2_t, MPI_POINTER pMpiEventDataIR2_t;
+
+/* MPI IR2 Event data ReasonCode values */
+#define MPI_EVENT_IR2_RC_LD_STATE_CHANGED           (0x01)
+#define MPI_EVENT_IR2_RC_PD_STATE_CHANGED           (0x02)
+#define MPI_EVENT_IR2_RC_BAD_BLOCK_TABLE_FULL       (0x03)
+#define MPI_EVENT_IR2_RC_PD_INSERTED                (0x04)
+#define MPI_EVENT_IR2_RC_PD_REMOVED                 (0x05)
+#define MPI_EVENT_IR2_RC_FOREIGN_CFG_DETECTED       (0x06)
+#define MPI_EVENT_IR2_RC_REBUILD_MEDIUM_ERROR       (0x07)
+
+/* defines for logical disk states */
+#define MPI_LD_STATE_OPTIMAL                        (0x00)
+#define MPI_LD_STATE_DEGRADED                       (0x01)
+#define MPI_LD_STATE_FAILED                         (0x02)
+#define MPI_LD_STATE_MISSING                        (0x03)
+#define MPI_LD_STATE_OFFLINE                        (0x04)
+
+/* defines for physical disk states */
+#define MPI_PD_STATE_ONLINE                         (0x00)
+#define MPI_PD_STATE_MISSING                        (0x01)
+#define MPI_PD_STATE_NOT_COMPATIBLE                 (0x02)
+#define MPI_PD_STATE_FAILED                         (0x03)
+#define MPI_PD_STATE_INITIALIZING                   (0x04)
+#define MPI_PD_STATE_OFFLINE_AT_HOST_REQUEST        (0x05)
+#define MPI_PD_STATE_FAILED_AT_HOST_REQUEST         (0x06)
+#define MPI_PD_STATE_OFFLINE_FOR_ANOTHER_REASON     (0xFF)
+
 /* MPI Link Status Change Event data */
 
 typedef struct _EVENT_DATA_LINK_STATUS
@@ -688,6 +793,20 @@
 #define MPI_EVENT_SAS_PLS_LR_RATE_1_5                       (0x08)
 #define MPI_EVENT_SAS_PLS_LR_RATE_3_0                       (0x09)
 
+/* SAS Discovery Event data */
+
+typedef struct _EVENT_DATA_SAS_DISCOVERY
+{
+    U32                     DiscoveryStatus;            /* 00h */
+    U32                     Reserved1;                  /* 04h */
+} EVENT_DATA_SAS_DISCOVERY, MPI_POINTER PTR_EVENT_DATA_SAS_DISCOVERY,
+  EventDataSasDiscovery_t, MPI_POINTER pEventDataSasDiscovery_t;
+
+#define MPI_EVENT_SAS_DSCVRY_COMPLETE                       (0x00000000)
+#define MPI_EVENT_SAS_DSCVRY_IN_PROGRESS                    (0x00000001)
+#define MPI_EVENT_SAS_DSCVRY_PHY_BITS_MASK                  (0xFFFF0000)
+#define MPI_EVENT_SAS_DSCVRY_PHY_BITS_SHIFT                 (16)
+
 /* SAS Discovery Errror Event data */
 
 typedef struct _EVENT_DATA_DISCOVERY_ERROR
@@ -897,6 +1016,7 @@
 #define MPI_FW_HEADER_PID_FAMILY_919XL_FC       (0x0003) /* 919XL and 929XL */
 #define MPI_FW_HEADER_PID_FAMILY_939X_FC        (0x0004) /* 939X and 949X   */
 #define MPI_FW_HEADER_PID_FAMILY_959_FC         (0x0005)
+#define MPI_FW_HEADER_PID_FAMILY_949E_FC        (0x0006)
 /* SAS */
 #define MPI_FW_HEADER_PID_FAMILY_1064_SAS       (0x0001)
 #define MPI_FW_HEADER_PID_FAMILY_1068_SAS       (0x0002)

==== //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpilib/mpi_sas.h#3 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/mpt/mpilib/mpi_sas.h,v 1.1 2006/01/21 00:29:51 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/mpt/mpilib/mpi_sas.h,v 1.2 2006/02/25 07:45:54 mjacob Exp $ */
 /*-
  * Copyright (c) 2000-2005, LSI Logic Corporation and its contributors.
  * All rights reserved.
@@ -34,7 +34,7 @@
  *          Title:  MPI Serial Attached SCSI structures and definitions
  *  Creation Date:  August 19, 2004
  *
- *    mpi_sas.h Version:  01.05.01
+ *    mpi_sas.h Version:  01.05.02
  *
  *  Version History
  *  ---------------
@@ -42,6 +42,9 @@
  *  Date      Version   Description
  *  --------  --------  ------------------------------------------------------
  *  08-19-04  01.05.01  Original release.
+ *  08-30-05  01.05.02  Added DeviceInfo bit for SEP.
+ *                      Added PrimFlags and Primitive field to SAS IO Unit
+ *                      Control request, and added a new operation code.
  *  --------------------------------------------------------------------------
  */
 
@@ -79,6 +82,7 @@
  * Values for the SAS DeviceInfo field used in SAS Device Status Change Event
  * data and SAS IO Unit Configuration pages.
  */
+#define MPI_SAS_DEVICE_INFO_SEP                 (0x00004000)
 #define MPI_SAS_DEVICE_INFO_ATAPI_DEVICE        (0x00002000)
 #define MPI_SAS_DEVICE_INFO_LSI_DEVICE          (0x00001000)
 #define MPI_SAS_DEVICE_INFO_DIRECT_ATTACH       (0x00000800)
@@ -240,10 +244,10 @@
     U8                      TargetID;           /* 0Ch */
     U8                      Bus;                /* 0Dh */
     U8                      PhyNum;             /* 0Eh */
-    U8                      Reserved4;          /* 0Fh */
-    U32                     Reserved5;          /* 10h */
+    U8                      PrimFlags;          /* 0Fh */
+    U32                     Primitive;          /* 10h */
     U64                     SASAddress;         /* 14h */
-    U32                     Reserved6;          /* 1Ch */
+    U32                     Reserved4;          /* 1Ch */
 } MSG_SAS_IOUNIT_CONTROL_REQUEST, MPI_POINTER PTR_MSG_SAS_IOUNIT_CONTROL_REQUEST,
   SasIoUnitControlRequest_t, MPI_POINTER pSasIoUnitControlRequest_t;
 
@@ -254,7 +258,13 @@
 #define MPI_SAS_OP_PHY_HARD_RESET                (0x07)
 #define MPI_SAS_OP_PHY_CLEAR_ERROR_LOG           (0x08)
 #define MPI_SAS_OP_MAP_CURRENT                   (0x09)
+#define MPI_SAS_OP_SEND_PRIMITIVE               (0x0A)
 
+/* values for the PrimFlags field */
+#define MPI_SAS_PRIMFLAGS_SINGLE                (0x08)
+#define MPI_SAS_PRIMFLAGS_TRIPLE                (0x02)
+#define MPI_SAS_PRIMFLAGS_REDUNDANT             (0x01)
+
 
 /* SAS IO Unit Control Reply */
 typedef struct _MSG_SAS_IOUNIT_CONTROL_REPLY
@@ -274,3 +284,5 @@
   SasIoUnitControlReply_t, MPI_POINTER pSasIoUnitControlReply_t;
 
 #endif
+
+

==== //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpilib/mpi_type.h#3 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/mpt/mpilib/mpi_type.h,v 1.8 2006/01/21 00:29:51 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/mpt/mpilib/mpi_type.h,v 1.10 2006/02/26 22:50:14 mjacob Exp $ */
 /*
  * Copyright (c) 2000-2005, LSI Logic Corporation and its contributors.
  * All rights reserved.
@@ -34,7 +34,7 @@
  *          Title:  MPI Basic type definitions
  *  Creation Date:  June 6, 2000
  *
- *    mpi_type.h Version:  01.05.01
+ *    mpi_type.h Version:  01.05.02
  *
  *  Version History
  *  ---------------
@@ -48,6 +48,7 @@
  *  08-08-01  01.02.01  Original release for v1.2 work.
  *  05-11-04  01.03.01  Original release for MPI v1.3.
  *  08-19-04  01.05.01  Original release for MPI v1.5.
+ *  08-30-05  01.05.02  Added PowerPC option to #ifdef's.
  *  --------------------------------------------------------------------------
  */
 
@@ -71,13 +72,32 @@
 *
 *****************************************************************************/
 
-typedef int8_t   S8;
-typedef uint8_t  U8;
-typedef int16_t  S16;
-typedef uint16_t U16;
+typedef signed   char   S8;
+typedef unsigned char   U8;
+typedef signed   short  S16;
+typedef unsigned short  U16;
+
+#ifdef	__FreeBSD__
+
 typedef int32_t  S32;
 typedef uint32_t U32;
 
+#else
+
+#if defined(unix) || defined(__arm) || defined(ALPHA) || defined(__PPC__) || defined(__ppc)
+
+    typedef signed   int   S32;
+    typedef unsigned int   U32;
+
+#else
+
+    typedef signed   long  S32;
+    typedef unsigned long  U32;
+
+#endif
+#endif
+
+
 typedef struct _S64
 {
     U32          Low;

==== //depot/projects/kmacy_sun4v/src/sys/dev/mpt/mpt.c#3 (text+ko) ====

@@ -1,5 +1,5 @@
 /*-
- * Generic routines for LSI '909 FC  adapters.
+ * Generic routines for LSI Fusion adapters.
  * FreeBSD Version.
  *
  * Copyright (c) 2000, 2001 by Greg Ansley
@@ -24,15 +24,46 @@
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
+ */
+/*-
+ * Copyright (c) 2002, 2006 by Matthew Jacob
+ * All rights reserved.
  *
- * Additional Copyright (c) 2002 by Matthew Jacob under same license.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    substantially similar to the "NO WARRANTY" disclaimer below
+ *    ("Disclaimer") and any redistribution must be conditioned upon including
+ *    a substantially similar Disclaimer requirement for further binary
+ *    redistribution.
+ * 3. Neither the names of the above listed copyright holders nor the names
+ *    of any contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE COPYRIGHT
+ * OWNER OR CONTRIBUTOR IS ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Support from Chris Ellsworth in order to make SAS adapters work
+ * is gratefully acknowledged.
  */
-/*
+/*-
  * Copyright (c) 2004, Avid Technology, Inc. and its contributors.
  * Copyright (c) 2005, WHEEL Sp. z o.o.
  * Copyright (c) 2004, 2005 Justin T. Gibbs
  * All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
  * met:
@@ -46,7 +77,7 @@
  * 3. Neither the names of the above listed copyright holders nor the names
  *    of any contributors may be used to endorse or promote products derived
  *    from this software without specific prior written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -61,7 +92,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt.c,v 1.15 2006/02/11 01:35:29 mjacob Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt.c,v 1.26 2006/04/11 16:47:30 mjacob Exp $");
 
 #include <dev/mpt/mpt.h>
 #include <dev/mpt/mpt_cam.h> /* XXX For static handler registration */
@@ -69,6 +100,8 @@
 
 #include <dev/mpt/mpilib/mpi.h>
 #include <dev/mpt/mpilib/mpi_ioc.h>
+#include <dev/mpt/mpilib/mpi_fc.h>
+#include <dev/mpt/mpilib/mpi_targ.h>
 
 #include <sys/sysctl.h>
 
@@ -92,7 +125,7 @@
 static int mpt_soft_reset(struct mpt_softc *mpt);
 static void mpt_hard_reset(struct mpt_softc *mpt);
 static int mpt_configure_ioc(struct mpt_softc *mpt);
-static int mpt_enable_ioc(struct mpt_softc *mpt);
+static int mpt_enable_ioc(struct mpt_softc *mpt, int);
 
 /************************* Personality Module Support *************************/
 /*
@@ -119,7 +152,7 @@
 }
 
 /*
- * Used infrequenstly, so no need to optimize like a forward
+ * Used infrequently, so no need to optimize like a forward
  * traversal where we use the MAX+1 is guaranteed to be NULL
  * trick.
  */
@@ -148,6 +181,7 @@
 static mpt_load_handler_t      mpt_stdload;
 static mpt_probe_handler_t     mpt_stdprobe;
 static mpt_attach_handler_t    mpt_stdattach;
+static mpt_enable_handler_t    mpt_stdenable;
 static mpt_event_handler_t     mpt_stdevent;
 static mpt_reset_handler_t     mpt_stdreset;
 static mpt_shutdown_handler_t  mpt_stdshutdown;
@@ -158,6 +192,7 @@
 	.load		= mpt_stdload,
 	.probe		= mpt_stdprobe,
 	.attach		= mpt_stdattach,
+	.enable		= mpt_stdenable,
 	.event		= mpt_stdevent,
 	.reset		= mpt_stdreset,
 	.shutdown	= mpt_stdshutdown,
@@ -167,6 +202,7 @@
 
 static mpt_load_handler_t      mpt_core_load;
 static mpt_attach_handler_t    mpt_core_attach;
+static mpt_enable_handler_t    mpt_core_enable;
 static mpt_reset_handler_t     mpt_core_ioc_reset;
 static mpt_event_handler_t     mpt_core_event;
 static mpt_shutdown_handler_t  mpt_core_shutdown;
@@ -177,6 +213,7 @@
 	.name		= "mpt_core",
 	.load		= mpt_core_load,
 	.attach		= mpt_core_attach,
+	.enable		= mpt_core_enable,
 	.event		= mpt_core_event,
 	.reset		= mpt_core_ioc_reset,
 	.shutdown	= mpt_core_shutdown,
@@ -195,8 +232,7 @@
 DECLARE_MODULE(mpt_core, mpt_core_mod, SI_SUB_DRIVERS, SI_ORDER_FIRST);
 MODULE_VERSION(mpt_core, 1);
 
-#define MPT_PERS_ATACHED(pers, mpt) \
-	((mpt)->pers_mask & (0x1 << pers->id))
+#define MPT_PERS_ATTACHED(pers, mpt) ((mpt)->mpt_pers_mask & (0x1 << pers->id))
 
 
 int
@@ -243,8 +279,10 @@
 	}
 	case MOD_SHUTDOWN:
 		break;
+#if __FreeBSD_version >= 500000
 	case MOD_QUIESCE:
 		break;
+#endif
 	case MOD_UNLOAD:
 		error = pers->unload(pers);
 		mpt_personalities[pers->id] = NULL;
@@ -278,6 +316,13 @@
 }
 
 int
+mpt_stdenable(struct mpt_softc *mpt)
+{
+	/* Enable is always successfull. */
+	return (0);
+}
+
+int
 mpt_stdevent(struct mpt_softc *mpt, request_t *req, MSG_EVENT_NOTIFY_REPLY *msg)
 {
 	mpt_lprt(mpt, MPT_PRT_DEBUG, "mpt_stdevent: 0x%x\n", msg->Event & 0xFF);
@@ -354,13 +399,14 @@
 			 * that the full table is checked to see if
 			 * this handler was previously registered.
 			 */
-			if (free_cbi == MPT_HANDLER_ID_NONE
-			 && (mpt_reply_handlers[cbi]
+			if (free_cbi == MPT_HANDLER_ID_NONE &&
+			    (mpt_reply_handlers[cbi]
 			  == mpt_default_reply_handler))
 				free_cbi = cbi;
 		}
-		if (free_cbi == MPT_HANDLER_ID_NONE)
+		if (free_cbi == MPT_HANDLER_ID_NONE) {
 			return (ENOMEM);
+		}
 		mpt_reply_handlers[free_cbi] = handler.reply_handler;
 		*phandler_id = MPT_CBI_TO_HID(free_cbi);
 		break;
@@ -398,22 +444,23 @@
 
 static int
 mpt_default_reply_handler(struct mpt_softc *mpt, request_t *req,
-			  MSG_DEFAULT_REPLY *reply_frame)
+	uint32_t reply_desc, MSG_DEFAULT_REPLY *reply_frame)
 {
-	mpt_prt(mpt, "XXXX Default Handler Called.  Req %p, Frame %p\n",
-		req, reply_frame);
+	mpt_prt(mpt,
+	    "Default Handler Called: req=%p:%u reply_descriptor=%x frame=%p\n",
+	    req, req->serno, reply_desc, reply_frame);
 
 	if (reply_frame != NULL)
 		mpt_dump_reply_frame(mpt, reply_frame);
 
-	mpt_prt(mpt, "XXXX Reply Frame Ignored\n");
+	mpt_prt(mpt, "Reply Frame Ignored\n");
 
 	return (/*free_reply*/TRUE);
 }
 
 static int
 mpt_config_reply_handler(struct mpt_softc *mpt, request_t *req,
-				MSG_DEFAULT_REPLY *reply_frame)
+ uint32_t reply_desc, MSG_DEFAULT_REPLY *reply_frame)
 {
 	if (req != NULL) {
 
@@ -430,32 +477,30 @@
 		req->state &= ~REQ_STATE_QUEUED;
 		req->state |= REQ_STATE_DONE;
 		TAILQ_REMOVE(&mpt->request_pending_list, req, links);
-
-		if ((req->state & REQ_STATE_NEED_WAKEUP) != 0)
+		if ((req->state & REQ_STATE_NEED_WAKEUP) != 0) {
 			wakeup(req);
+		}
 	}
 
-	return (/*free_reply*/TRUE);
+	return (TRUE);
 }
 
 static int
 mpt_handshake_reply_handler(struct mpt_softc *mpt, request_t *req,
-			 MSG_DEFAULT_REPLY *reply_frame)
+ uint32_t reply_desc, MSG_DEFAULT_REPLY *reply_frame)
 {
 	/* Nothing to be done. */
-	return (/*free_reply*/TRUE);
+	return (TRUE);
 }
 
 static int
 mpt_event_reply_handler(struct mpt_softc *mpt, request_t *req,
-			MSG_DEFAULT_REPLY *reply_frame)
+    uint32_t reply_desc, MSG_DEFAULT_REPLY *reply_frame)
 {
 	int free_reply;
 
-	if (reply_frame == NULL) {
-		mpt_prt(mpt, "Event Handler: req %p - Unexpected NULL reply\n");
-		return (/*free_reply*/TRUE);
-	}
+	KASSERT(reply_frame != NULL, ("null reply in mpt_event_reply_handler"));
+	KASSERT(req != NULL, ("null request in mpt_event_reply_handler"));
 
 	free_reply = TRUE;
 	switch (reply_frame->Function) {
@@ -471,12 +516,12 @@
 			handled += pers->event(mpt, req, msg);
 
 		if (handled == 0 && mpt->mpt_pers_mask == 0) {
-			mpt_lprt(mpt, MPT_PRT_WARN,
+			mpt_lprt(mpt, MPT_PRT_INFO,
 				"No Handlers For Any Event Notify Frames. "
 				"Event %#x (ACK %sequired).\n",
 				msg->Event, msg->AckRequired? "r" : "not r");
 		} else if (handled == 0) {
-			mpt_prt(mpt,
+			mpt_lprt(mpt, MPT_PRT_WARN,
 				"Unhandled Event Notify Frame. Event %#x "
 				"(ACK %sequired).\n",
 				msg->Event, msg->AckRequired? "r" : "not r");
@@ -487,7 +532,7 @@
 			uint32_t context;
 
 			context = htole32(req->index|MPT_REPLY_HANDLER_EVENTS);
-			ack_req = mpt_get_request(mpt, /*sleep_ok*/FALSE);
+			ack_req = mpt_get_request(mpt, FALSE);
 			if (ack_req == NULL) {
 				struct mpt_evtf_record *evtf;
 
@@ -498,32 +543,59 @@
 				break;
 			}
 			mpt_send_event_ack(mpt, ack_req, msg, context);
+			/*
+			 * Don't check for CONTINUATION_REPLY here
+			 */
+			return (free_reply);
 		}
 		break;
 	}
 	case MPI_FUNCTION_PORT_ENABLE:
-		mpt_lprt(mpt, MPT_PRT_DEBUG, "enable port reply\n");
+		mpt_lprt(mpt, MPT_PRT_DEBUG , "enable port reply\n");
 		break;
 	case MPI_FUNCTION_EVENT_ACK:
 		break;
 	default:
-		mpt_prt(mpt, "Unknown Event Function: %x\n",
+		mpt_prt(mpt, "unknown event function: %x\n",
 			reply_frame->Function);
 		break;
 	}
 
-	if (req != NULL
-	 && (reply_frame->MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY) == 0) {
-
-		req->state &= ~REQ_STATE_QUEUED;
-		req->state |= REQ_STATE_DONE;
+	/*
+	 * I'm not sure that this continuation stuff works as it should.
+	 *
+	 * I've had FC async events occur that free the frame up because
+	 * the continuation bit isn't set, and then additional async events
+	 * then occur using the same context. As you might imagine, this
+	 * leads to Very Bad Thing.
+	 *
+	 *  Let's just be safe for now and not free them up until we figure
+	 * out what's actually happening here.
+	 */
+#if	0
+	if ((reply_frame->MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY) == 0) {
 		TAILQ_REMOVE(&mpt->request_pending_list, req, links);
-
-		if ((req->state & REQ_STATE_NEED_WAKEUP) != 0)
-			wakeup(req);
-		else
-			mpt_free_request(mpt, req);
+		mpt_free_request(mpt, req);
+		mpt_prt(mpt, "event_reply %x for req %p:%u NOT a continuation",
+		    reply_frame->Function, req, req->serno);
+		if (reply_frame->Function == MPI_FUNCTION_EVENT_NOTIFICATION) {
+			MSG_EVENT_NOTIFY_REPLY *msg =
+			    (MSG_EVENT_NOTIFY_REPLY *)reply_frame;
+			mpt_prtc(mpt, " Event=0x%x AckReq=%d",
+			    msg->Event, msg->AckRequired);
+		}
+	} else {
+		mpt_prt(mpt, "event_reply %x for %p:%u IS a continuation",
+		    reply_frame->Function, req, req->serno);
+		if (reply_frame->Function == MPI_FUNCTION_EVENT_NOTIFICATION) {
+			MSG_EVENT_NOTIFY_REPLY *msg =
+			    (MSG_EVENT_NOTIFY_REPLY *)reply_frame;
+			mpt_prtc(mpt, " Event=0x%x AckReq=%d",
+			    msg->Event, msg->AckRequired);
+		}
+		mpt_prtc(mpt, "\n");
 	}
+#endif
 	return (free_reply);
 }
 
@@ -561,10 +633,10 @@
 	case MPI_EVENT_SAS_DEVICE_STATUS_CHANGE:
 		break;
 	default:
-		return (/*handled*/0);
+		return (0);
 		break;
 	}
-	return (/*handled*/1);
+	return (1);
 }
 
 static void
@@ -574,7 +646,7 @@
 	MSG_EVENT_ACK *ackp;
 
 	ackp = (MSG_EVENT_ACK *)ack_req->req_vbuf;
-	bzero(ackp, sizeof *ackp);
+	memset(ackp, 0, sizeof (*ackp));
 	ackp->Function = MPI_FUNCTION_EVENT_ACK;
 	ackp->Event = msg->Event;
 	ackp->EventContext = msg->EventContext;
@@ -588,44 +660,137 @@
 mpt_intr(void *arg)
 {
 	struct mpt_softc *mpt;
-	uint32_t     reply_desc;
+	uint32_t reply_desc;
+	uint32_t last_reply_desc = MPT_REPLY_EMPTY;
+	int ntrips = 0;
 
 	mpt = (struct mpt_softc *)arg;
+	mpt_lprt(mpt, MPT_PRT_DEBUG2, "enter mpt_intr\n");
 	while ((reply_desc = mpt_pop_reply_queue(mpt)) != MPT_REPLY_EMPTY) {
 		request_t	  *req;
 		MSG_DEFAULT_REPLY *reply_frame;
 		uint32_t	   reply_baddr;
+		uint32_t           ctxt_idx;
 		u_int		   cb_index;
 		u_int		   req_index;
 		int		   free_rf;
 
+		if (reply_desc == last_reply_desc) {
+			mpt_prt(mpt, "debounce reply_desc 0x%x\n", reply_desc);
+			if (ntrips++ == 1000) {
+				break;
+			}
+			continue;
+		}
+		last_reply_desc = reply_desc;
+
 		req = NULL;
 		reply_frame = NULL;
 		reply_baddr = 0;
 		if ((reply_desc & MPI_ADDRESS_REPLY_A_BIT) != 0) {
 			u_int offset;
-
 			/*
 			 * Insure that the reply frame is coherent.
 			 */
-			reply_baddr = (reply_desc << 1);
+			reply_baddr = MPT_REPLY_BADDR(reply_desc);
 			offset = reply_baddr - (mpt->reply_phys & 0xFFFFFFFF);
-			bus_dmamap_sync_range(mpt->reply_dmat, mpt->reply_dmap,
-					      offset, MPT_REPLY_SIZE,
-					      BUS_DMASYNC_POSTREAD);
+			bus_dmamap_sync_range(mpt->reply_dmat,
+			    mpt->reply_dmap, offset, MPT_REPLY_SIZE,
+			    BUS_DMASYNC_POSTREAD);
 			reply_frame = MPT_REPLY_OTOV(mpt, offset);
-			reply_desc = le32toh(reply_frame->MsgContext);
+			ctxt_idx = le32toh(reply_frame->MsgContext);
+		} else {
+			uint32_t type;
+
+			type = MPI_GET_CONTEXT_REPLY_TYPE(reply_desc);
+			ctxt_idx = reply_desc;
+			mpt_lprt(mpt, MPT_PRT_DEBUG1, "Context Reply: 0x%08x\n",
+				    reply_desc);
+

>>> TRUNCATED FOR MAIL (1000 lines) <<<



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200604140828.k3E8SGiB023413>