Update mpr(4) driver from v15 to v18 from Broadcom site.

Version 16 is just a number bump, since we already had those changes.

Version 17 introduces new AdapterType value, that allows new user-space
tools from Broadcom to differentiate adapter generations 3 and 3.5.

Version 18 updates headers and adds SAS_DEVICE_DISCOVERY_ERROR reporting.

MFC after:	2 weeks
This commit is contained in:
mav 2018-03-19 23:21:45 +00:00
parent 7854cb198f
commit b5f2c5035d
9 changed files with 148 additions and 37 deletions

View File

@ -44,7 +44,7 @@
* scatter/gather formats.
* Creation Date: June 21, 2006
*
* mpi2.h Version: 02.00.46
* mpi2.h Version: 02.00.48
*
* NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
* prefix are for use only on MPI v2.5 products, and must not be used
@ -151,6 +151,8 @@
* 04-10-16 02.00.44 Bumped MPI2_HEADER_VERSION_UNIT.
* 07-06-16 02.00.45 Bumped MPI2_HEADER_VERSION_UNIT.
* 09-02-16 02.00.46 Bumped MPI2_HEADER_VERSION_UNIT.
* 11-23-16 02.00.47 Bumped MPI2_HEADER_VERSION_UNIT.
* 02-03-17 02.00.48 Bumped MPI2_HEADER_VERSION_UNIT.
* --------------------------------------------------------------------------
*/
@ -194,7 +196,7 @@
/* Unit and Dev versioning for this MPI header set */
#define MPI2_HEADER_VERSION_UNIT (0x2E)
#define MPI2_HEADER_VERSION_UNIT (0x30)
#define MPI2_HEADER_VERSION_DEV (0x00)
#define MPI2_HEADER_VERSION_UNIT_MASK (0xFF00)
#define MPI2_HEADER_VERSION_UNIT_SHIFT (8)

View File

@ -42,7 +42,7 @@
* Title: MPI Configuration messages and pages
* Creation Date: November 10, 2006
*
* mpi2_cnfg.h Version: 02.00.39
* mpi2_cnfg.h Version: 02.00.40
*
* NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
* prefix are for use only on MPI v2.5 products, and must not be used
@ -255,6 +255,10 @@
* 09-01-16 02.00.39 Added MPI26_CONFIG_PAGE_ENCLOSURE_0 and related defines.
* Added MPI26_ENCLOS_PGAD_FORM_GET_NEXT_HANDLE and
* MPI26_ENCLOS_PGAD_FORM_HANDLE page address formats.
* 02-02-17 02.00.40 Added MPI2_MANPAGE7_SLOT_UNKNOWN.
* Added ChassisSlot field to SAS Enclosure Page 0.
* Added ChassisSlot Valid bit (bit 5) to the Flags field
* in SAS Enclosure Page 0.
* --------------------------------------------------------------------------
*/
@ -853,6 +857,9 @@ typedef struct _MPI2_MANPAGE7_CONNECTOR_INFO
#define MPI2_MANPAGE7_LOCATION_NOT_PRESENT (0x20)
#define MPI2_MANPAGE7_LOCATION_NOT_CONNECTED (0x80)
/* defines for the Slot field */
#define MPI2_MANPAGE7_SLOT_UNKNOWN (0xFFFF)
/*
* Host code (drivers, BIOS, utilities, etc.) should leave this define set to
* one and check the value returned for NumPhys at runtime.
@ -3092,11 +3099,11 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0
U16 EnclosureHandle; /* 0x16 */
U16 NumSlots; /* 0x18 */
U16 StartSlot; /* 0x1A */
U8 Reserved2; /* 0x1C */
U8 ChassisSlot; /* 0x1C */
U8 EnclosureLevel; /* 0x1D */
U16 SEPDevHandle; /* 0x1E */
U32 Reserved3; /* 0x20 */
U32 Reserved4; /* 0x24 */
U32 Reserved2; /* 0x20 */
U32 Reserved3; /* 0x24 */
} MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0,
MPI2_POINTER PTR_MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0,
Mpi2SasEnclosurePage0_t, MPI2_POINTER pMpi2SasEnclosurePage0_t,
@ -3107,6 +3114,7 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0
#define MPI2_SASENCLOSURE0_PAGEVERSION (0x04)
/* values for SAS Enclosure Page 0 Flags field */
#define MPI2_SAS_ENCLS0_FLAGS_CHASSIS_SLOT_VALID (0x0020)
#define MPI2_SAS_ENCLS0_FLAGS_ENCL_LEVEL_VALID (0x0010)
#define MPI2_SAS_ENCLS0_FLAGS_MNG_MASK (0x000F)
#define MPI2_SAS_ENCLS0_FLAGS_MNG_UNKNOWN (0x0000)
@ -3119,6 +3127,7 @@ typedef struct _MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0
#define MPI26_ENCLOSURE0_PAGEVERSION (0x04)
/* Values for Enclosure Page 0 Flags field */
#define MPI26_ENCLS0_FLAGS_CHASSIS_SLOT_VALID (0x0020)
#define MPI26_ENCLS0_FLAGS_ENCL_LEVEL_VALID (0x0010)
#define MPI26_ENCLS0_FLAGS_MNG_MASK (0x000F)
#define MPI26_ENCLS0_FLAGS_MNG_UNKNOWN (0x0000)

View File

@ -41,16 +41,16 @@
All rights reserved.
---------------------------------------
Header Set Release Version: 02.00.46
Header Set Release Date: 09-07-16
Header Set Release Version: 02.00.48
Header Set Release Date: 02-03-17
---------------------------------------
Filename Current version Prior version
---------- --------------- -------------
mpi2.h 02.00.46 02.00.45
mpi2_cnfg.h 02.00.39 02.00.38
mpi2.h 02.00.48 02.00.47
mpi2_cnfg.h 02.00.40 02.00.39
mpi2_init.h 02.00.21 02.00.21
mpi2_ioc.h 02.00.30 02.00.29
mpi2_ioc.h 02.00.32 02.00.31
mpi2_raid.h 02.00.11 02.00.11
mpi2_sas.h 02.00.10 02.00.10
mpi2_targ.h 02.00.09 02.00.09
@ -59,7 +59,7 @@
mpi2_ra.h 02.00.01 02.00.01
mpi2_hbd.h 02.00.04 02.00.04
mpi2_pci.h 02.00.02 02.00.02
mpi2_history.txt 02.00.43 02.00.43
mpi2_history.txt 02.00.45 02.00.44
* Date Version Description
@ -161,6 +161,8 @@ mpi2.h
* 04-10-16 02.00.44 Bumped MPI2_HEADER_VERSION_UNIT.
* 07-06-16 02.00.45 Bumped MPI2_HEADER_VERSION_UNIT.
* 09-02-16 02.00.46 Bumped MPI2_HEADER_VERSION_UNIT.
* 11-23-16 02.00.47 Bumped MPI2_HEADER_VERSION_UNIT.
* 02-03-17 02.00.48 Bumped MPI2_HEADER_VERSION_UNIT.
* --------------------------------------------------------------------------
mpi2_cnfg.h
@ -363,8 +365,12 @@ mpi2_cnfg.h
* phy data.
* Added InitStatus to PCIe IO Unit Page 1 header.
* 09-01-16 02.00.39 Added MPI26_CONFIG_PAGE_ENCLOSURE_0 and related defines.
* Added MPI26_ENCLOS_PGAD_FORM_GET_NEXT_HANDLE and
* MPI26_ENCLOS_PGAD_FORM_HANDLE page address formats.
* Added MPI26_ENCLOS_PGAD_FORM_GET_NEXT_HANDLE and
* MPI26_ENCLOS_PGAD_FORM_HANDLE page address formats.
* 02-02-17 02.00.40 Added MPI2_MANPAGE7_SLOT_UNKNOWN.
* Added ChassisSlot field to SAS Enclosure Page 0.
* Added ChassisSlot Valid bit (bit 5) to the Flags field
* in SAS Enclosure Page 0.
* --------------------------------------------------------------------------
mpi2_init.h
@ -551,10 +557,15 @@ mpi2_ioc.h
* Request Message.
* Added new values for the RegionType field in the Layout
* Data sections of the FLASH Layout Extended Image Data.
* Added new defines for the ReasonCode field of
* Added new defines for the ReasonCode field of
* Active Cable Exception Event.
* Added MPI2_EVENT_ENCL_DEVICE_STATUS_CHANGE and
* MPI26_EVENT_DATA_ENCL_DEV_STATUS_CHANGE.
* Added MPI2_EVENT_ENCL_DEVICE_STATUS_CHANGE and
* MPI26_EVENT_DATA_ENCL_DEV_STATUS_CHANGE.
* 11-23-16 02.00.31 Added MPI2_EVENT_SAS_DEVICE_DISCOVERY_ERROR and
* MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR.
* 02-02-17 02.00.32 Added MPI2_FW_DOWNLOAD_ITYPE_CBB_BACKUP.
* Added MPI25_EVENT_DATA_ACTIVE_CABLE_EXCEPT and related
* defines for the ReasonCode field.
* --------------------------------------------------------------------------
mpi2_raid.h
@ -676,20 +687,35 @@ mpi2_pci.h
mpi2_history.txt Parts list history
Filename 02.00.46 02.00.45 02.00.44 02.00.43 02.00.42
---------- -------- -------- -------- -------- --------
mpi2.h 02.00.46 02.00.45 02.00.44 02.00.43 02.00.42
mpi2_cnfg.h 02.00.39 02.00.38 02.00.37 02.00.36 02.00.35
mpi2_init.h 02.00.21 02.00.21 02.00.21 02.00.21 02.00.20
mpi2_ioc.h 02.00.30 02.00.29 02.00.28 02.00.28 02.00.27
mpi2_raid.h 02.00.11 02.00.11 02.00.11 02.00.11 02.00.11
mpi2_sas.h 02.00.10 02.00.10 02.00.10 02.00.10 02.00.10
mpi2_targ.h 02.00.09 02.00.09 02.00.09 02.00.09 02.00.09
mpi2_tool.h 02.00.14 02.00.13 02.00.13 02.00.13 02.00.13
mpi2_type.h 02.00.01 02.00.01 02.00.01 02.00.01 02.00.01
mpi2_ra.h 02.00.01 02.00.01 02.00.01 02.00.01 02.00.01
mpi2_hbd.h 02.00.04 02.00.04 02.00.04 02.00.04 02.00.03
mpi2_pci.h 02.00.02 02.00.02 02.00.01 02.00.01 02.00.00
Filename 02.00.48
---------- --------
mpi2.h 02.00.48
mpi2_cnfg.h 02.00.40
mpi2_init.h 02.00.21
mpi2_ioc.h 02.00.32
mpi2_raid.h 02.00.11
mpi2_sas.h 02.00.10
mpi2_targ.h 02.00.09
mpi2_tool.h 02.00.14
mpi2_type.h 02.00.01
mpi2_ra.h 02.00.01
mpi2_hbd.h 02.00.04
mpi2_pci.h 02.00.02
Filename 02.00.47 02.00.46 02.00.45 02.00.44 02.00.43 02.00.42
---------- -------- -------- -------- -------- -------- --------
mpi2.h 02.00.47 02.00.46 02.00.45 02.00.44 02.00.43 02.00.42
mpi2_cnfg.h 02.00.39 02.00.39 02.00.38 02.00.37 02.00.36 02.00.35
mpi2_init.h 02.00.21 02.00.21 02.00.21 02.00.21 02.00.21 02.00.20
mpi2_ioc.h 02.00.31 02.00.30 02.00.29 02.00.28 02.00.28 02.00.27
mpi2_raid.h 02.00.11 02.00.11 02.00.11 02.00.11 02.00.11 02.00.11
mpi2_sas.h 02.00.10 02.00.10 02.00.10 02.00.10 02.00.10 02.00.10
mpi2_targ.h 02.00.09 02.00.09 02.00.09 02.00.09 02.00.09 02.00.09
mpi2_tool.h 02.00.14 02.00.14 02.00.13 02.00.13 02.00.13 02.00.13
mpi2_type.h 02.00.01 02.00.01 02.00.01 02.00.01 02.00.01 02.00.01
mpi2_ra.h 02.00.01 02.00.01 02.00.01 02.00.01 02.00.01 02.00.01
mpi2_hbd.h 02.00.04 02.00.04 02.00.04 02.00.04 02.00.04 02.00.03
mpi2_pci.h 02.00.02 02.00.02 02.00.02 02.00.01 02.00.01 02.00.00
Filename 02.00.41 02.00.40 02.00.39 02.00.38 02.00.37 02.00.36
---------- -------- -------- -------- -------- -------- --------

View File

@ -42,7 +42,7 @@
* Title: MPI IOC, Port, Event, FW Download, and FW Upload messages
* Creation Date: October 11, 2006
*
* mpi2_ioc.h Version: 02.00.30
* mpi2_ioc.h Version: 02.00.32
*
* NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
* prefix are for use only on MPI v2.5 products, and must not be used
@ -200,6 +200,11 @@
* Active Cable Exception Event.
* Added MPI2_EVENT_ENCL_DEVICE_STATUS_CHANGE and
* MPI26_EVENT_DATA_ENCL_DEV_STATUS_CHANGE.
* 11-23-16 02.00.31 Added MPI2_EVENT_SAS_DEVICE_DISCOVERY_ERROR and
* MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR.
* 02-02-17 02.00.32 Added MPI2_FW_DOWNLOAD_ITYPE_CBB_BACKUP.
* Added MPI25_EVENT_DATA_ACTIVE_CABLE_EXCEPT and related
* defines for the ReasonCode field.
* --------------------------------------------------------------------------
*/
@ -610,6 +615,7 @@ typedef struct _MPI2_EVENT_NOTIFICATION_REPLY
#define MPI2_EVENT_PCIE_TOPOLOGY_CHANGE_LIST (0x0032) /* MPI v2.6 and later */
#define MPI2_EVENT_PCIE_LINK_COUNTER (0x0033) /* MPI v2.6 and later */
#define MPI2_EVENT_ACTIVE_CABLE_EXCEPTION (0x0034) /* MPI v2.6 and later */
#define MPI2_EVENT_SAS_DEVICE_DISCOVERY_ERROR (0x0035) /* MPI v2.5 and later */
#define MPI2_EVENT_MIN_PRODUCT_SPECIFIC (0x006E)
#define MPI2_EVENT_MAX_PRODUCT_SPECIFIC (0x007F)
@ -715,12 +721,21 @@ typedef struct _MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT
U8 ReasonCode; /* 0x04 */
U8 ReceptacleID; /* 0x05 */
U16 Reserved1; /* 0x06 */
} MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT,
} MPI25_EVENT_DATA_ACTIVE_CABLE_EXCEPT,
MPI2_POINTER PTR_MPI25_EVENT_DATA_ACTIVE_CABLE_EXCEPT,
Mpi25EventDataActiveCableExcept_t,
MPI2_POINTER pMpi25EventDataActiveCableExcept_t,
MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT,
MPI2_POINTER PTR_MPI26_EVENT_DATA_ACTIVE_CABLE_EXCEPT,
Mpi26EventDataActiveCableExcept_t,
MPI2_POINTER pMpi26EventDataActiveCableExcept_t;
/* defines for ReasonCode field */
/* MPI2.5 defines for the ReasonCode field */
#define MPI25_EVENT_ACTIVE_CABLE_INSUFFICIENT_POWER (0x00)
#define MPI25_EVENT_ACTIVE_CABLE_PRESENT (0x01)
#define MPI25_EVENT_ACTIVE_CABLE_DEGRADED (0x02)
/* MPI2.6 defines for the ReasonCode field */
#define MPI26_EVENT_ACTIVE_CABLE_INSUFFICIENT_POWER (0x00)
#define MPI26_EVENT_ACTIVE_CABLE_PRESENT (0x01)
#define MPI26_EVENT_ACTIVE_CABLE_DEGRADED (0x02)
@ -1168,6 +1183,24 @@ typedef struct _MPI2_EVENT_DATA_SAS_QUIESCE
#define MPI2_EVENT_SAS_QUIESCE_RC_COMPLETED (0x02)
typedef struct _MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR
{
U16 DevHandle; /* 0x00 */
U8 ReasonCode; /* 0x02 */
U8 PhysicalPort; /* 0x03 */
U32 Reserved1[2]; /* 0x04 */
U64 SASAddress; /* 0x0C */
U32 Reserved2[2]; /* 0x14 */
} MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR,
MPI2_POINTER PTR_MPI25_EVENT_DATA_SAS_DEVICE_DISCOVERY_ERROR,
Mpi25EventDataSasDeviceDiscoveryError_t,
MPI2_POINTER pMpi25EventDataSasDeviceDiscoveryError_t;
/* SAS Device Discovery Error Event data ReasonCode values */
#define MPI25_EVENT_SAS_DISC_ERR_SMP_FAILED (0x01)
#define MPI25_EVENT_SAS_DISC_ERR_SMP_TIMEOUT (0x02)
/* Host Based Discovery Phy Event data */
typedef struct _MPI2_EVENT_HBD_PHY_SAS
@ -1493,6 +1526,7 @@ typedef struct _MPI2_FW_DOWNLOAD_REQUEST
#define MPI2_FW_DOWNLOAD_ITYPE_COMPLETE (0x0A)
#define MPI2_FW_DOWNLOAD_ITYPE_COMMON_BOOT_BLOCK (0x0B)
#define MPI2_FW_DOWNLOAD_ITYPE_PUBLIC_KEY (0x0C) /* MPI v2.5 and newer */
#define MPI2_FW_DOWNLOAD_ITYPE_CBB_BACKUP (0x0D)
#define MPI2_FW_DOWNLOAD_ITYPE_SBR (0x0E)
#define MPI2_FW_DOWNLOAD_ITYPE_SBR_BACKUP (0x0F)
#define MPI2_FW_DOWNLOAD_ITYPE_HIIM (0x10)

View File

@ -149,6 +149,7 @@ typedef struct mpr_pci_bits
*
*/
#define MPRIOCTL_ADAPTER_TYPE_SAS3 6
#define MPRIOCTL_ADAPTER_TYPE_SAS35 7
typedef struct mpr_adapter_data
{
uint32_t StructureLength;
@ -202,7 +203,7 @@ typedef struct mpr_pass_thru
/*
* Event queue defines
*/
#define MPR_EVENT_QUEUE_SIZE (50) /* Max Events stored in driver */
#define MPR_EVENT_QUEUE_SIZE (200) /* Max Events stored in driver */
#define MPR_MAX_EVENT_DATA_LENGTH (48) /* Size of each event in Dwords */
typedef struct mpr_event_query

View File

@ -708,6 +708,7 @@ mprsas_register_events(struct mpr_softc *sc)
setbit(events, MPI2_EVENT_IR_PHYSICAL_DISK);
setbit(events, MPI2_EVENT_IR_OPERATION_STATUS);
setbit(events, MPI2_EVENT_TEMP_THRESHOLD);
setbit(events, MPI2_EVENT_SAS_DEVICE_DISCOVERY_ERROR);
if (sc->facts->MsgVersion >= MPI2_VERSION_02_06) {
setbit(events, MPI2_EVENT_ACTIVE_CABLE_EXCEPTION);
if (sc->mpr_flags & MPR_FLAGS_GEN35_IOC) {

View File

@ -681,6 +681,41 @@ mprsas_fw_work(struct mpr_softc *sc, struct mpr_fw_event_work *fw_event)
}
break;
}
case MPI2_EVENT_SAS_DEVICE_DISCOVERY_ERROR:
{
pMpi25EventDataSasDeviceDiscoveryError_t discovery_error_data;
uint64_t sas_address;
discovery_error_data =
(pMpi25EventDataSasDeviceDiscoveryError_t)
fw_event->event_data;
sas_address = discovery_error_data->SASAddress.High;
sas_address = (sas_address << 32) |
discovery_error_data->SASAddress.Low;
switch(discovery_error_data->ReasonCode) {
case MPI25_EVENT_SAS_DISC_ERR_SMP_FAILED:
{
mpr_printf(sc, "SMP command failed during discovery "
"for expander with SAS Address %jx and "
"handle 0x%x.\n", sas_address,
discovery_error_data->DevHandle);
break;
}
case MPI25_EVENT_SAS_DISC_ERR_SMP_TIMEOUT:
{
mpr_printf(sc, "SMP command timed out during "
"discovery for expander with SAS Address %jx and "
"handle 0x%x.\n", sas_address,
discovery_error_data->DevHandle);
break;
}
default:
break;
}
break;
}
case MPI2_EVENT_PCIE_TOPOLOGY_CHANGE_LIST:
{
MPI26_EVENT_DATA_PCIE_TOPOLOGY_CHANGE_LIST *data;

View File

@ -1189,7 +1189,10 @@ mpr_user_get_adapter_data(struct mpr_softc *sc, mpr_adapter_data_t *data)
/*
* General device info.
*/
data->AdapterType = MPRIOCTL_ADAPTER_TYPE_SAS3;
if (sc->mpr_flags & MPR_FLAGS_GEN35_IOC)
data->AdapterType = MPRIOCTL_ADAPTER_TYPE_SAS35;
else
data->AdapterType = MPRIOCTL_ADAPTER_TYPE_SAS3;
data->PCIDeviceHwId = pci_get_device(sc->mpr_dev);
data->PCIDeviceHwRev = pci_read_config(sc->mpr_dev, PCIR_REVID, 1);
data->SubSystemId = pci_get_subdevice(sc->mpr_dev);

View File

@ -33,7 +33,7 @@
#ifndef _MPRVAR_H
#define _MPRVAR_H
#define MPR_DRIVER_VERSION "15.03.00.00-fbsd"
#define MPR_DRIVER_VERSION "18.03.00.00-fbsd"
#define MPR_DB_MAX_WAIT 2500