1887 lines
97 KiB
C
Executable File
1887 lines
97 KiB
C
Executable File
/***************************************************************************
|
|
* *
|
|
* Copyright 2008 LSI Logic Corporation. All rights reserved. *
|
|
* *
|
|
* This file is confidential and a trade secret of LSI Logic. The *
|
|
* receipt of or possession of this file does not convey any rights to *
|
|
* reproduce or disclose its contents or to manufacture, use, or sell *
|
|
* anything it may describe, in whole, or in part, without the specific *
|
|
* written consent of LSI Logic Corporation. *
|
|
* *
|
|
***************************************************************************
|
|
*
|
|
* Name: SAS.H
|
|
* Title: SAS Protocol Structures and Definitions
|
|
* Programmer: -------------
|
|
* Creation Date: January 20, 2003
|
|
*
|
|
* Version History
|
|
* ---------------
|
|
*
|
|
* Last Updated
|
|
* -------------
|
|
* Version %version: 52 %
|
|
* Date Updated %date_modified: %
|
|
* Programmer %created_by: mjwang %
|
|
*
|
|
* Date Who Description
|
|
* -------- --- -------------------------------------------------------
|
|
* 01/20/03 GWK Initial version
|
|
* 10/24/04 BDB Updated to SAS 1.1 Revision 6
|
|
* 08/20/08 KAM updated for SDM big endian platform and gcc bitfields
|
|
* 12/09/08 RTS updated to SAS 2.0 Revision 15
|
|
*
|
|
*
|
|
* Description
|
|
* ------------
|
|
* This include file contains SAS protocol structures and definitions. This
|
|
* file only should include structures and definitions specific to SAS. SCSI
|
|
* CDBs used in SAS belong in scsi.h.
|
|
*
|
|
* NOTE: This version is current as of version 2.0 Rev 15 of the SAS specification.
|
|
*
|
|
* NOTE: This file is dependant on ata.h, so include ata.h before sas.h.
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
/* If this header file has not been included yet */
|
|
#ifndef SAS_H_SOURCE
|
|
#define SAS_H_SOURCE
|
|
|
|
/* None of the frames defined included CRC. The HW deals with
|
|
* CRC and we can't access it.
|
|
*/
|
|
|
|
|
|
/******************************************************************************/
|
|
/* */
|
|
/* S A S A D D R E S S D E F I N I T I O N S */
|
|
/* */
|
|
/******************************************************************************/
|
|
|
|
/*
|
|
* SAS Address (full 8 byte WWID)
|
|
* This structure is in little endian, so a SAS address of 0x50(MSB) 08 05 EF FF FF 80 00(LSB)
|
|
* would show up here as High = 0xEF050850, Low = 0x0080FFFF
|
|
*/
|
|
#if 1 //KAM
|
|
#define SAS_WWID_LENGTH (8)
|
|
typedef union _SAS_ADDRESS
|
|
{
|
|
U8 WWID[SAS_WWID_LENGTH]; /* 0x00 */
|
|
struct
|
|
{
|
|
U32 High;
|
|
U32 Low;
|
|
}Word;
|
|
|
|
} SAS_ADDRESS, *PTR_SAS_ADDRESS;
|
|
#endif
|
|
|
|
/******************************************************************************/
|
|
/* */
|
|
/* S A S L U N D E F I N I T I O N */
|
|
/* */
|
|
/******************************************************************************/
|
|
typedef union _SAS_LOGICAL_UNIT
|
|
{
|
|
U8 Byte[8];
|
|
U16 LevelAddressing[4];
|
|
U32 Dword[2];
|
|
struct {
|
|
U8 Reserved1;
|
|
U8 Lun;
|
|
U8 Reserved2[6];
|
|
} SingleLevel;
|
|
} SAS_LOGICAL_UNIT, *PTR_SAS_LOGICAL_UNIT;
|
|
|
|
/* SAS Device Type field */
|
|
#define SAS_DEVICE_TYPE_END_DEVICE (0x01)
|
|
#define SAS_DEVICE_TYPE_EDGE_EXPANDER (0x02)
|
|
#define SAS_DEVICE_TYPE_FANOUT_EXPANDER (0x03)
|
|
|
|
|
|
/******************************************************************************/
|
|
/* */
|
|
/* S S P F R A M E D E F I N I T I O N S */
|
|
/* */
|
|
/******************************************************************************/
|
|
|
|
/*
|
|
* COMMAND Information Unit
|
|
*/
|
|
#define SAS_COMMAND_IU_CDB_LENGTH (16)
|
|
typedef struct _COMMAND_IU
|
|
{
|
|
SAS_LOGICAL_UNIT LogicalUnitNumber; /* 0x00 */
|
|
U8 Reserved08; /* 0x08 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 EnableFirstBurst :1; /* 0x09 */
|
|
U8 Reserved09Bits3to6 :4;
|
|
U8 TaskAttribute :3;
|
|
U8 Reserved0A; /* 0x0A */
|
|
U8 AdditionalCDBLength :6; /* 0x0B */
|
|
U8 Reserved0BBits0to1 :2;
|
|
#else /* little endian */
|
|
U8 TaskAttribute :3; /* 0x09 */
|
|
U8 Reserved09Bits3to6 :4;
|
|
U8 EnableFirstBurst :1;
|
|
U8 Reserved0A; /* 0x0A */
|
|
U8 Reserved0BBits0to1 :2; /* 0x0B */
|
|
U8 AdditionalCDBLength :6;
|
|
#endif
|
|
U8 CDB[SAS_COMMAND_IU_CDB_LENGTH]; /* 0x0C */
|
|
U32 AdditionalCDBBytes[1]; /* 0x1C */
|
|
/* Note: AdditionalCDBBytes is variable and may really be 0 to 0x3F dwords */
|
|
} COMMAND_IU, *PTR_COMMAND_IU;
|
|
|
|
/* Task Attribute field */
|
|
#define SSP_COMMAND_IU_TASK_ATTRIBUTE_SIMPLE (0x0)
|
|
#define SSP_COMMAND_IU_TASK_ATTRIBUTE_HEAD_OF_QUEUE (0x1)
|
|
#define SSP_COMMAND_IU_TASK_ATTRIBUTE_ORDERED (0x2)
|
|
#define SSP_COMMAND_IU_TASK_ATTRIBUTE_ACA (0x4)
|
|
|
|
/*
|
|
* TASK Information Unit
|
|
*/
|
|
typedef struct _TASK_IU
|
|
{
|
|
SAS_LOGICAL_UNIT LogicalUnitNumber; /* 0x00 */
|
|
U8 Reserved08; /* 0x08 */
|
|
U8 Reserved09; /* 0x09 */
|
|
U8 TaskManagementFunction; /* 0x0A */
|
|
U8 Reserved0B; /* 0x0B */
|
|
U16 TagOfTaskToBeManaged; /* 0x0C */
|
|
U8 Reserved0Eto1B[14]; /* 0x0E */
|
|
} TASK_IU, *PTR_TASK_IU;
|
|
|
|
/* Task Management Function field */
|
|
#define SSP_TASK_IU_TASK_MANAGEMENT_FUNCTION_ABORT_TASK (0x01)
|
|
#define SSP_TASK_IU_TASK_MANAGEMENT_FUNCTION_ABORT_TASK_SET (0x02)
|
|
#define SSP_TASK_IU_TASK_MANAGEMENT_FUNCTION_CLEAR_TASK_SET (0x04)
|
|
#define SSP_TASK_IU_TASK_MANAGEMENT_FUNCTION_LOGICAL_UNIT_RESET (0x08)
|
|
#define SSP_TASK_IU_TASK_MANAGEMENT_FUNCTION_CLEAR_ACA (0x40)
|
|
#define SSP_TASK_IU_TASK_MANAGEMENT_FUNCTION_QUERY_TASK (0x80)
|
|
|
|
/*
|
|
* XFER_RDY Information Unit
|
|
*/
|
|
typedef struct _XFER_RDY_IU
|
|
{
|
|
U32 RequestedOffset; /* 0x00 */
|
|
U32 WriteDataLength; /* 0x04 */
|
|
U8 Reserved08to0B[4]; /* 0x08 */
|
|
} XFER_RDY_IU, *PTR_XFER_RDY_IU;
|
|
|
|
/*
|
|
* DATA Information Unit
|
|
*/
|
|
typedef struct _DATA_IU
|
|
{
|
|
U8 Data[1]; /* 0x00 - ?? */
|
|
/* Note the data length is variable */
|
|
} DATA_IU, *PTR_DATA_IU;
|
|
|
|
/*
|
|
* RESPONSE Data field
|
|
*/
|
|
typedef struct _RESPONSE_DATA
|
|
{
|
|
U8 Reserved00; /* 0x00 */
|
|
U8 Reserved01; /* 0x01 */
|
|
U8 Reserved02; /* 0x02 */
|
|
U8 ResponseCode; /* 0x03 */
|
|
} RESPONSE_DATA, *PTR_RESPONSE_DATA;
|
|
|
|
/* Response Code field */
|
|
#define SSP_RESPONSE_CODE_NO_FAILURE (0x00)
|
|
#define SSP_RESPONSE_CODE_TASK_MGMT_FUNCTION_COMPLETE (0x00)
|
|
#define SSP_RESPONSE_CODE_INVALID_FRAME (0x02)
|
|
#define SSP_RESPONSE_CODE_TASK_MGMT_FUNCTION_NOT_SUPPORTED (0x04)
|
|
#define SSP_RESPONSE_CODE_TASK_MGMT_FUNCTION_FAILED (0x05)
|
|
#define SSP_RESPONSE_CODE_TASK_MGMT_FUNCTION_SUCCEEDED (0x08)
|
|
#define SSP_RESPONSE_CODE_INVALID_LOGICAL_UNIT_NUMBER (0x09)
|
|
|
|
/*
|
|
* RESPONSE Information Unit
|
|
*/
|
|
typedef struct _RESPONSE_IU
|
|
{
|
|
U8 Reserved00to09[10]; /* 0x00 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved0ABits2to7 :6;
|
|
U8 DataPres :2; /* 0x0A */
|
|
#else /* little endian */
|
|
U8 DataPres :2; /* 0x0A */
|
|
U8 Reserved0ABits2to7 :6;
|
|
#endif
|
|
U8 Status; /* 0x0B */
|
|
U32 Reserved0Cto0F; /* 0x0C */
|
|
U32 SenseDataListLength; /* 0x10 */
|
|
U32 ResponseDataListLength; /* 0x14 */
|
|
union
|
|
{
|
|
RESPONSE_DATA ResponseData;
|
|
U8 SenseData[1];
|
|
/* Note sense data length is variable */
|
|
} ResponseOrSenseData;
|
|
} RESPONSE_IU, *PTR_RESPONSE_IU;
|
|
|
|
/* DataPres field */
|
|
#define SSP_RESPONSE_IU_DATAPRES_NO_DATA (0x00)
|
|
#define SSP_RESPONSE_IU_DATAPRES_RESPONSE_DATA (0x01)
|
|
#define SSP_RESPONSE_IU_DATAPRES_SENSE_DATA (0x02)
|
|
|
|
/*
|
|
* Union of all IUs
|
|
*/
|
|
typedef union _SAS_IU
|
|
{
|
|
COMMAND_IU CommandIU;
|
|
TASK_IU TaskIU;
|
|
XFER_RDY_IU XferRdyIU;
|
|
DATA_IU DataIU;
|
|
RESPONSE_IU ResponseIU;
|
|
} SAS_IU, *PTR_SAS_IU;
|
|
|
|
/******************************************************************************/
|
|
/* */
|
|
/* S T P F R A M E D E F I N I T I O N S */
|
|
/* */
|
|
/******************************************************************************/
|
|
|
|
/* STP frames are identical to SATA FIS's, so these are defined in ata.h */
|
|
|
|
|
|
/******************************************************************************/
|
|
/* */
|
|
/* S M P F R A M E D E F I N I T I O N S */
|
|
/* */
|
|
/******************************************************************************/
|
|
|
|
/*
|
|
* SMP Request
|
|
*/
|
|
typedef struct _SMP_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U8 AdditionalRequestBytes[1]; /* 0x04 */
|
|
/* Note AdditionalRequestBytes is of variable length based on function */
|
|
} SMP_REQUEST, *PTR_SMP_REQUEST;
|
|
|
|
/* SMP Frame Types */
|
|
#define SMP_FRAME_TYPE_SMP_REQUEST (0x40)
|
|
#define SMP_FRAME_TYPE_SMP_RESPONSE (0x41)
|
|
|
|
/* SMP Functions */
|
|
#define SMP_FUNCTION_REPORT_GENERAL (0x00)
|
|
#define SMP_FUNCTION_REPORT_MANUFACTURER_INFORMATION (0x01)
|
|
#define SMP_FUNCTION_READ_GPIO (0x02)
|
|
#define SMP_FUNCTION_REPORT_SELF_CONFIG_STATUS (0x03)
|
|
#define SMP_FUNCTION_DISCOVER (0x10)
|
|
#define SMP_FUNCTION_REPORT_PHY_ERROR_LOG (0x11)
|
|
#define SMP_FUNCTION_REPORT_PHY_SATA (0x12)
|
|
#define SMP_FUNCTION_REPORT_ROUTE_INFORMATION (0x13)
|
|
#define SMP_FUNCTION_REPORT_EXP_ROUTE_TABLE (0x17)
|
|
#define SMP_FUNCTION_WRITE_GPIO (0x82)
|
|
#define SMP_FUNCTION_CONFIGURE_ROUTE_INFORMATION (0x90)
|
|
#define SMP_FUNCTION_PHY_CONTROL (0x91)
|
|
/* These are vendor unique functions for LSI expanders */
|
|
#define SMP_FUNCTION_RING_WRITE_N_REGISTERS (0xC0)
|
|
#define SMP_FUNCTION_RING_READ_N_REGISTERS (0x40)
|
|
#define SMP_FUNCTION_ICL_DISCOVER (0x41)
|
|
|
|
#define SMP_FUNCTION_AHB_WRITE_N_REGISTERS (0xC2)
|
|
#define SMP_FUNCTION_AHB_READ_N_REGISTERS (0x42)
|
|
|
|
/* These are for SGPIO use */
|
|
#define SMP_FUNCTION_READ_GPIO_REGISTERS (0x02)
|
|
#define SMP_FUNCTION_WRITE_GPIO_REGISTERS (0x82)
|
|
|
|
/* Zoning SMPs */
|
|
#define SMP_FUNCTION_CONFIGURE_ZONE_PHY (0x8a)
|
|
#define SMP_FUNCTION_CONFIGURE_ZONE_PERMISSION (0x8b)
|
|
#define SMP_FUNCTION_REPORT_ZONE_PERMISSION (0x04)
|
|
#define SMP_FUNCTION_ENABLE_DISABLE_ZONING (0x81)
|
|
#define SMP_FUNCTION_ZONE_ACTIVATE (0x87)
|
|
#define SMP_FUNCTION_ZONE_LOCK (0x86)
|
|
#define SMP_FUNCTION_ZONE_UNLOCK (0x88)
|
|
#define SMP_FUNCTION_CONFIGURE_ZONE_MANAGER_PASSWORD (0x89)
|
|
|
|
/*
|
|
* SMP Response
|
|
*/
|
|
typedef struct _SMP_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U8 AdditionalResponseBytes[1]; /* 0x04 */
|
|
/* Note AdditionalResponseBytes is of variable length based on function */
|
|
} SMP_RESPONSE, *PTR_SMP_RESPONSE;
|
|
|
|
/* SMP Function Result field */
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_ACCEPTED (0x00)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_UNKNOWN_SMP_FUNCTION (0x01)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_SMP_FUNCTION_FAILED (0x02)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_INVALID_REQUEST_LENGTH (0x03)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_INVALID_EXP_CHANGE_COUNT (0x04)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_BUSY (0x05)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_INCOMPLETE_DESCRIPTOR_LIST (0x06)
|
|
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_PHY_DOES_NOT_EXIST (0x10)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_INDEX_DOES_NOT_EXIST (0x11)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_PHY_DOES_NOT_SUPPORT_SATA (0x12)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_UNKNOWN_PHY_OPERATION (0x13)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_UNKNOWN_PHY_TEST_FUNCTION (0x14)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_PHY_TEST_FUNCTION_IN_PROG (0x15)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_PHY_VACANT (0x16)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_UNKNOWN_PHY_EVENT_SOURCE (0x17)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_UNKNOWN_DESCRIPTOR_TYPE (0x18)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_UNKNOWN_PHY_FILTER (0x19)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_AFFILIATION_VIOLATION (0x1a)
|
|
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_SMP_ZONE_VIOLATION (0x20)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_NO_MANAGEMENT_ACCESS_RIGHTS (0x21)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_UNKNOWN_ENABLE_DISABLE_ZONING_VALUE (0x22)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_ZONE_LOCK_VIOLATION (0x23)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_NOT_ACTIVATED (0x24)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_ZONE_GROUP_OUT_OF_RANGE (0x25)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_NO_PHYSICAL_PRESENCE (0x26)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_SAVING_NOT_SUPPORTED (0x27)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_SOURCE_ZONE_GROUP_DOES_NOT_EXIST (0x28)
|
|
#define SMP_RESPONSE_FUNCTION_RESULT_DISABLED_PASSWORD_NOT_SUPPORTED (0x29)
|
|
|
|
|
|
/*
|
|
* SMP Report General request
|
|
*/
|
|
typedef struct _SMP_REPORT_GENERAL_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
} SMP_REPORT_GENERAL_REQUEST, *PTR_SMP_REPORT_GENERAL_REQUEST;
|
|
|
|
/*
|
|
* SMP Report General response
|
|
*/
|
|
typedef struct _SMP_REPORT_GENERAL_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
U16 ExpanderRouteIndexes; /* 0x06 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 LongResponse :1;
|
|
U8 Reserved08 :7; /* 0x08 */
|
|
#else
|
|
U8 Reserved08 :7;
|
|
U8 LongResponse :1; /* 0x08 */
|
|
#endif
|
|
U8 NumberOfPhys; /* 0x09 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 TableToTableSup :1; /* 0x0A */
|
|
U8 ZoneConfiguring :1;
|
|
U8 SelfConfiguring :1;
|
|
U8 StpContinueAWT :1;
|
|
U8 OpenRejectRetrySupported :1;
|
|
U8 ConfiguresOthers :1;
|
|
U8 Configuring :1;
|
|
U8 ConfigurableRouteTable :1;
|
|
#else /* little endian */
|
|
U8 ConfigurableRouteTable :1; /* 0x0A */
|
|
U8 Configuring :1;
|
|
U8 ConfiguresOthers :1;
|
|
U8 OpenRejectRetrySupported :1;
|
|
U8 StpContinueAWT :1;
|
|
U8 SelfConfiguring :1;
|
|
U8 ZoneConfiguring :1;
|
|
U8 TableToTableSup :1;
|
|
#endif
|
|
U8 Reserved0B; /* 0x0B */
|
|
SAS_ADDRESS EnclosureLogicalIdentifier; /* 0x0C */
|
|
U8 Reserved14to1B[8]; /* 0x14 */
|
|
U16 Reserved1C; /* 0x1c */
|
|
U16 StpBusInactivityTimeLimit; /* 0x1e */
|
|
U16 StpMaxConnectTimeLimit; /* 0x20 */
|
|
U16 StpNexusLossTime; /* 0x22 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 NoOfZoneGroups :2; /* 0x24 */
|
|
U8 Reserved24 :1;
|
|
U8 ZoneLocked :1;
|
|
U8 PhysPresenceSupported :1;
|
|
U8 PhysPresenceAsserted :1;
|
|
U8 ZoningSupported :1;
|
|
U8 ZoningEnabled :1;
|
|
#else /* little endian */
|
|
U8 ZoningEnabled :1; /* 0x24 */
|
|
U8 ZoningSupported :1;
|
|
U8 PhysPresenceAsserted :1;
|
|
U8 PhysPresenceSupported :1;
|
|
U8 ZoneLocked :1;
|
|
U8 Reserved24 :1;
|
|
U8 NoOfZoneGroups :2;
|
|
#endif
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved25 :3; /* 0x25 */
|
|
U8 Saving :1;
|
|
U8 SavingZoneMgrPasswdSupported :1;
|
|
U8 SavingZonePhyInfoSupported :1;
|
|
U8 SavingZonePermTableSupported :1;
|
|
U8 SavingZoningEnabledSupported :1;
|
|
#else /* little endian */
|
|
U8 SavingZoningEnabledSupported :1; /* 0x25 */
|
|
U8 SavingZonePermTableSupported :1;
|
|
U8 SavingZonePhyInfoSupported :1;
|
|
U8 SavingZoneMgrPasswdSupported :1;
|
|
U8 Saving :1;
|
|
U8 Reserved25 :3;
|
|
#endif
|
|
U16 MaxRoutedSasAddresses; /* 0x26 */
|
|
SAS_ADDRESS ActiveZoneManager; /* 0x28 */
|
|
U16 ZoneLockInactiveTime; /* 0x30 */
|
|
U16 Reserved32; /* 0x32 */
|
|
U8 Reserved34; /* 0x34 */
|
|
U8 FirstEnclosureConnectorIndex; /* 0x35 */
|
|
U8 EnclosureConnectorIndexes; /* 0x36 */
|
|
U8 Reserved37; /* 0x37 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 ReducedFunctionality :1; /* 0x38 */
|
|
U8 Reserved38 :7;
|
|
#else /* little endian */
|
|
U8 Reserved38 :7; /* 0x38 */
|
|
U8 ReducedFunctionality :1;
|
|
#endif
|
|
U8 TimeToReducedFunc; /* 0x39 */
|
|
U8 InitTimeReducedFunc; /* 0x3a */
|
|
U8 MaxReducedFuncTime; /* 0x3b */
|
|
|
|
U16 LastSelfConfigStatus; /* 0x3c - 0x3d */
|
|
U16 MaxStoredSelfConfigStatus; /* 0x3e - 0x3f */
|
|
U16 LastPhyEventDesc; /* 0x40 - 0x41 */
|
|
U16 MaxStoredPhyEventDesc; /* 0x43 - 0x42 */
|
|
U16 STPRejectLimit; /* 0x44 - 0x45 */
|
|
U16 Reserved47; /* 0x47 - 0x46 */
|
|
U32 CRC;
|
|
} SMP_REPORT_GENERAL_RESPONSE, *PTR_SMP_REPORT_GENERAL_RESPONSE;
|
|
|
|
/*
|
|
* SMP Report Manufacturer Information request
|
|
*/
|
|
typedef struct _SMP_REPORT_MANUFACTURER_INFO_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
} SMP_REPORT_MANUFACTURER_INFO_REQUEST, *PTR_SMP_REPORT_MANUFACTURER_INFO_REQUEST;
|
|
|
|
/*
|
|
* SMP Report Manufacturer Information response
|
|
*/
|
|
#define VEND_ID_LEN (8)
|
|
#define PROD_ID_LEN (16)
|
|
|
|
#define PROD_REV_LEN (4)
|
|
|
|
#define VEND_SPEC_LEN (8)
|
|
#define COMP_VEND_ID_LEN (8)
|
|
|
|
typedef struct _SMP_REPORT_MANUFACTURER_INFO_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 - 0x05 */
|
|
U16 Reserved06; /* 0x06 - 0x07 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved0ABits1to7 :7; /* 0x08 */
|
|
U8 SAS11Format :1;
|
|
#else /* little endian */
|
|
U8 SAS11Format :1; /* 0x08 */
|
|
U8 Reserved0ABits1to7 :7;
|
|
#endif
|
|
U8 Reserved09; /* 0x09 */
|
|
U8 Reserved0A; /* 0x0A */
|
|
U8 Reserved0B; /* 0x0B */
|
|
U8 VendorIdentification[VEND_ID_LEN]; /* 0x0C */
|
|
U8 ProductIdentification[PROD_ID_LEN]; /* 0x14 */
|
|
U8 ProductRevisionLevel[PROD_REV_LEN]; /* 0x24 */
|
|
U8 ComponentVendorId[COMP_VEND_ID_LEN];/* 0x28 */
|
|
U16 ComponentId; /* 0x30 */
|
|
U8 ComponentRevisionId; /* 0x32 */
|
|
U8 Reserved51; /* 0x33 */
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
U8 VuX12TruncatedEnclosureId[5]; /* 0x34 */
|
|
U8 OEMVendorUnique57to50[3]; /* 0x39 */
|
|
}Enclosure;
|
|
U8 VendorSpecific[VEND_SPEC_LEN]; /* 0x34 */
|
|
}u;
|
|
U32 CRC;
|
|
} SMP_REPORT_MANUFACTURER_INFO_RESPONSE, *PTR_SMP_REPORT_MANUFACTURER_INFO_RESPONSE;
|
|
|
|
|
|
/*
|
|
* SMP Report Self-Configuration request
|
|
*/
|
|
typedef struct _SMP_REPORT_SELF_CONFIG_STATUS_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U16 Reserved04to05; /* 0x04 - 0x05 */
|
|
U16 StartingStatusIndex; /* 0x06 - 0x07 */
|
|
} SMP_REPORT_SELF_CONFIG_STATUS_REQUEST, *PTR_SMP_REPORT_SELF_CONFIG_STATUS_REQUEST;
|
|
|
|
|
|
/*
|
|
* SMP Report Self-Configuration response descriptor
|
|
*/
|
|
typedef struct _SMP_REPORT_SELF_CONFIG_STATUS_DESCRIPTOR
|
|
{
|
|
U8 StatusType; /* 0x00 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved01Bits1to7 :7; /* 0x01 */
|
|
U8 Final :1;
|
|
#else /* little endian */
|
|
U8 Final :1; /* 0x01 */
|
|
U8 Reserved01Bits1to7 :7;
|
|
#endif
|
|
U8 Reserved02; /* 0x02 */
|
|
U8 PhyIdentifier; /* 0x03 */
|
|
U32 Reserved04to07; /* 0x04 - 0x07 */
|
|
SAS_ADDRESS SASAddress; /* 0x08 - 0x0f */
|
|
} SMP_REPORT_SELF_CONFIG_STATUS_DESCRIPTOR, *PTR_SMP_REPORT_SELF_CONFIG_STATUS_DESCRIPTOR;
|
|
|
|
|
|
/*
|
|
* SMP Report Self-Configuration response
|
|
*/
|
|
typedef struct _SMP_REPORT_SELF_CONFIG_STATUS_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 - 0x05 */
|
|
U16 StartingStatusIndex; /* 0x06 - 0x07 */
|
|
U16 TotalNumStatusDescriptors; /* 0x08 - 0x09 */
|
|
U16 LastStatusIndex; /* 0x0a - 0x0b */
|
|
U8 StatusDescriptorLength; /* 0x0c */
|
|
U8 Reserved0D; /* 0x0d */
|
|
U16 Reserved0Eto0F; /* 0x0e - 0x0f */
|
|
U16 Reserved10to11; /* 0x10 - 0x11 */
|
|
U8 Reserved12; /* 0x12 */
|
|
U8 NumberStatusDescriptors; /* 0x13 */
|
|
SMP_REPORT_SELF_CONFIG_STATUS_DESCRIPTOR StatusDescriptors[1]; /* 0x14... */
|
|
} SMP_REPORT_SELF_CONFIG_STATUS_RESPONSE, *PTR_SMP_REPORT_SELF_CONFIG_STATUS_RESPONSE;
|
|
|
|
|
|
/*
|
|
* SMP Discover request
|
|
*/
|
|
typedef struct _SMP_DISCOVER_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U32 Reserved04to07; /* 0x04 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved08 :7; /* 0x08 */
|
|
U8 NoZoneMask :1;
|
|
#else /* little endian */
|
|
U8 NoZoneMask :1; /* 0x08 */
|
|
U8 Reserved08 :7;
|
|
#endif
|
|
U8 PhyIdentifier; /* 0x09 */
|
|
U16 Reserved0Ato0B; /* 0x0A */
|
|
} SMP_DISCOVER_REQUEST, *PTR_SMP_DISCOVER_REQUEST;
|
|
|
|
/*
|
|
* SMP Discover response
|
|
*/
|
|
|
|
|
|
// If type = 20h - 23h then this format is valid
|
|
typedef struct _SMP_X12_VU_SLOT_DISCOVER_REPSONSE
|
|
{
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 ConnectorFieldsValid :2;
|
|
U8 ConnectorType :6;
|
|
#else /* little endian */
|
|
U8 ConnectorType :6;
|
|
U8 ConnectorFieldsValid :2;
|
|
#endif
|
|
U8 ConnectorElementIndex;
|
|
} SMP_X12_VU_SLOT_DISCOVER_REPSONSE, * PTR_SMP_X12_VU_SLOT_DISCOVER_REPSONSE;
|
|
|
|
// if type != 20h - 23h then this format is valid
|
|
typedef struct _SMP_X12_VU_DISCOVER_REPSONSE
|
|
{
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 ConnectorFieldsValid :2;
|
|
U8 ConnectorType :6;
|
|
U8 ConnectorElementIndex :4;
|
|
U8 ConnectorPhysicalLink :4;
|
|
#else /* little endian */
|
|
U8 ConnectorType :6;
|
|
U8 ConnectorFieldsValid :2;
|
|
U8 ConnectorPhysicalLink :4;
|
|
U8 ConnectorElementIndex :4;
|
|
#endif
|
|
} SMP_X12_VU_DISCOVER_REPSONSE, * PTR_SMP_X12_VU_DISCOVER_REPSONSE;
|
|
|
|
typedef struct _SMP_DISCOVER_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
U16 Reserved06; /* 0x06 */
|
|
U8 Reserved08; /* 0x08 */
|
|
U8 PhyIdentifier; /* 0x09 */
|
|
U8 Reserved0A; /* 0x0A */
|
|
U8 Reserved0B; /* 0x0B */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved0CBit7 :1; /* 0x0C */
|
|
U8 AttachedDeviceType :3;
|
|
U8 AttachedReason :4;
|
|
U8 Reserved0DBits4to7 :4; /* 0x0D */
|
|
U8 NegotiatedPhysLinkRate :4;
|
|
U8 Reserved0EBits4to7 :4; /* 0x0E */
|
|
U8 AttachedSSPInitiator :1;
|
|
U8 AttachedSTPInitiator :1;
|
|
U8 AttachedSMPInitiator :1;
|
|
U8 AttachedSATAHost :1;
|
|
U8 AttachedSATAPortSelector :1; /* 0x0F */
|
|
U8 Reserved0FBits4to6 :3;
|
|
U8 AttachedSSPTarget :1;
|
|
U8 AttachedSTPTarget :1;
|
|
U8 AttachedSMPTarget :1;
|
|
U8 AttachedSATATarget :1;
|
|
#else /* little endian */
|
|
U8 AttachedReason :4; /* 0x0C */
|
|
U8 AttachedDeviceType :3;
|
|
U8 Reserved0CBit7 :1;
|
|
U8 NegotiatedPhysLinkRate :4; /* 0x0D */
|
|
U8 Reserved0DBits4to7 :4;
|
|
U8 AttachedSATAHost :1; /* 0x0E */
|
|
U8 AttachedSMPInitiator :1;
|
|
U8 AttachedSTPInitiator :1;
|
|
U8 AttachedSSPInitiator :1;
|
|
U8 Reserved0EBits4to7 :4;
|
|
U8 AttachedSATATarget :1; /* 0x0F */
|
|
U8 AttachedSMPTarget :1;
|
|
U8 AttachedSTPTarget :1;
|
|
U8 AttachedSSPTarget :1;
|
|
U8 Reserved0FBits4to6 :3;
|
|
U8 AttachedSATAPortSelector :1;
|
|
#endif
|
|
SAS_ADDRESS SASAddress; /* 0x10 */
|
|
SAS_ADDRESS AttachedSASAddress; /* 0x18 */
|
|
U8 AttachedPhyIdentifier; /* 0x20 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved21Bits3to7 :5; /* 0x21 */
|
|
U8 AttachedInsideZpsdsPersistent :1;
|
|
U8 AttachedRequestedInsideZpsds :1;
|
|
U8 AttachedBreakReplyCapable :1;
|
|
#else /* little endian */
|
|
U8 AttachedBreakReplyCapable :1; /* 0x21 */
|
|
U8 AttachedRequestedInsideZpsds :1;
|
|
U8 AttachedInsideZpsdsPersistent :1;
|
|
U8 Reserved21Bits3to7 :5;
|
|
#endif
|
|
U8 Reserved22; /* 0x22 */
|
|
U8 Reserved23; /* 0x23 */
|
|
U32 Reserved24to27; /* 0x24 - 0x27 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 ProgMinPhysLinkRate :4; /* 0x28 */
|
|
U8 HardwareMinPhysLinkRate :4;
|
|
U8 ProgMaxPhysLinkRate :4; /* 0x29 */
|
|
U8 HardwareMaxPhysLinkRate :4;
|
|
U8 PhyChangeCount; /* 0x2A */
|
|
U8 VirtualPhy :1; /* 0x2B */
|
|
U8 Reserved2BBits4to6 :3;
|
|
U8 PartialPathTimeoutValue :4;
|
|
U8 Reserved2CBits4to7 :4; /* 0x2C */
|
|
U8 RoutingAttribute :4;
|
|
U8 Reserved2DBit7 :1; /* 0x2D */
|
|
U8 ConnectorType :7;
|
|
#else /* little endian */
|
|
U8 HardwareMinPhysLinkRate :4; /* 0x28 */
|
|
U8 ProgMinPhysLinkRate :4;
|
|
U8 HardwareMaxPhysLinkRate :4; /* 0x29 */
|
|
U8 ProgMaxPhysLinkRate :4;
|
|
U8 PhyChangeCount; /* 0x2A */
|
|
U8 PartialPathTimeoutValue :4; /* 0x2B */
|
|
U8 Reserved2BBits4to6 :3;
|
|
U8 VirtualPhy :1;
|
|
U8 RoutingAttribute :4; /* 0x2C */
|
|
U8 Reserved2CBits4to7 :4;
|
|
U8 ConnectorType :7; /* 0x2D */
|
|
U8 Reserved2DBit7 :1;
|
|
#endif
|
|
U8 ConnectorElementIndex; /* 0x2E */
|
|
U8 ConnectorPhysicalLink; /* 0x2F */
|
|
U8 Reserved30; /* 0x30 */
|
|
U8 Reserved31; /* 0x31 */
|
|
union
|
|
{
|
|
SMP_X12_VU_DISCOVER_REPSONSE VuX12Connector; /* 0x32 */
|
|
SMP_X12_VU_SLOT_DISCOVER_REPSONSE VuX12Slot;
|
|
U16 VendorSpecific; /* 0x32 */
|
|
} u;
|
|
SAS_ADDRESS AttachedDeviceName; /* 0x34 - 3B*/
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved3cBit7 :1; /* 0x3c */
|
|
U8 ReqInsideZpsdsByExp :1;
|
|
U8 InsideZpsdsPersistent :1;
|
|
U8 RequestedInsideZpsds :1;
|
|
U8 Reserved3cBit3 :1;
|
|
U8 ZoneGroupPersistent :1;
|
|
U8 InsideZpsds :1;
|
|
U8 ZoningEnabled :1;
|
|
#else /* little endian */
|
|
U8 ZoningEnabled :1; /* 0x3c */
|
|
U8 InsideZpsds :1;
|
|
U8 ZoneGroupPersistent :1;
|
|
U8 Reserved3cBit3 :1;
|
|
U8 RequestedInsideZpsds :1;
|
|
U8 InsideZpsdsPersistent :1;
|
|
U8 ReqInsideZpsdsByExp :1;
|
|
U8 Reserved3cBit7 :1;
|
|
#endif
|
|
U16 Reserved3d; /* 0x3d */
|
|
U8 ZoneGroup; /* 0x3f */
|
|
U8 SelfConfigurationStatus; /* 0x40 */
|
|
U8 SelfConfigLevelsCompleted; /* 0x41 */
|
|
U16 Reserved42; /* 0x42 */
|
|
SAS_ADDRESS SelfConfigSasAddress; /* 0x44 */
|
|
U32 ProgrammedPhyCapabilities; /* 0x4C - 0x4F */
|
|
U32 CurrentPhyCapabilities; /* 0x50 - 0x53 */
|
|
U32 AttachedPhyCapabilities; /* 0x54 - 0x57 */
|
|
U32 Reserved58; /* 0x58 - 0x5B */
|
|
U16 Reserved5C; /* 0x5C - 0x5D */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reason :4; /* 0x5E */
|
|
U8 NegotiatedPhysicalLinkRate :4;
|
|
|
|
U8 Reserved5FBits2to7 :6; /* 0x5F */
|
|
U8 NegotiatedSSC :1;
|
|
U8 HardwareMuxingSupported :1;
|
|
|
|
U8 Reserved60Bits6to7 :2; /* 0x60 Bits 6 - 7 */
|
|
U8 DefaultInsideZpsdsPersistent :1; /* 0x60 Bit 5 */
|
|
U8 DefaultRequestedInsideZpsds :1; /* 0x60 Bit 4 */
|
|
U8 Reserved60Bit3 :1; /* 0x60 Bit 3 */
|
|
U8 DefaultZoneGroupPersistent :1; /* 0x60 Bit 2 */
|
|
U8 Reserved60Bit1 :1; /* 0x60 Bit 1 */
|
|
U8 DefaultZoningEnabled :1; /* 0x60 Bit 0 */
|
|
#else /* little endian */
|
|
U8 NegotiatedPhysicalLinkRate :4; /* 0x5E */
|
|
U8 Reason :4;
|
|
|
|
U8 HardwareMuxingSupported :1; /* 0x5F */
|
|
U8 NegotiatedSSC :1;
|
|
U8 Reserved5FBits2to7 :6;
|
|
|
|
U8 DefaultZoningEnabled :1; /* 0x60 Bit 0 */
|
|
U8 Reserved60Bit1 :1; /* 0x60 Bit 1 */
|
|
U8 DefaultZoneGroupPersistent :1; /* 0x60 Bit 2 */
|
|
U8 Reserved60Bit3 :1; /* 0x60 Bit 3 */
|
|
U8 DefaultRequestedInsideZpsds :1; /* 0x60 Bit 4 */
|
|
U8 DefaultInsideZpsdsPersistent :1; /* 0x60 Bit 5 */
|
|
U8 Reserved60Bits6to7 :2; /* 0x60 Bits 6 - 7 */
|
|
#endif
|
|
U8 Reserved61; /* 0x61 */
|
|
U8 Reserved62; /* 0x62 */
|
|
U8 DefaultZoneGroup; /* 0x63 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved64Bits6to7 :2; /* 0x64 Bits 6 - 7 */
|
|
U8 SavedInsideZpsdsPersistent :1; /* 0x64 Bit 5 */
|
|
U8 SavedRequestedInsideZpsds :1; /* 0x64 Bit 4 */
|
|
U8 Reserved64Bit3 :1; /* 0x64 Bit 3 */
|
|
U8 SavedZoneGroupPersistent :1; /* 0x64 Bit 2 */
|
|
U8 Reserved64Bit1 :1; /* 0x64 Bit 1 */
|
|
U8 SavedZoningEnabled :1; /* 0x64 Bit 0 */
|
|
#else /* little endian */
|
|
U8 SavedZoningEnabled :1; /* 0x64 Bit 0 */
|
|
U8 Reserved64Bit1 :1; /* 0x64 Bit 1 */
|
|
U8 SavedZoneGroupPersistent :1; /* 0x64 Bit 2 */
|
|
U8 Reserved64Bit3 :1; /* 0x64 Bit 3 */
|
|
U8 SavedRequestedInsideZpsds :1; /* 0x64 Bit 4 */
|
|
U8 SavedInsideZpsdsPersistent :1; /* 0x64 Bit 5 */
|
|
U8 Reserved64Bits6to7 :2; /* 0x64 Bits 6 - 7 */
|
|
#endif
|
|
U8 Reserved65; /* 0x65 */
|
|
U8 Reserved66; /* 0x66 */
|
|
U8 SavedZoneGroup; /* 0x67 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved68Bits6to7 :2; /* 0x68 Bits 6 - 7 */
|
|
U8 ShadowInsideZpsdsPersistent :1; /* 0x68 Bit 5 */
|
|
U8 ShadowRequestedInsideZpsds :1; /* 0x68 Bit 4 */
|
|
U8 Reserved68Bit3 :1; /* 0x68 Bit 3 */
|
|
U8 ShadowZoneGroupPersistent :1; /* 0x68 Bit 2 */
|
|
U8 Reserved68Bit0to1 :2; /* 0x68 Bits 0 -1 */
|
|
#else /* little endian */
|
|
U8 Reserved68Bit0to1 :2; /* 0x68 Bits 0 -1 */
|
|
U8 ShadowZoneGroupPersistent :1; /* 0x68 Bit 2 */
|
|
U8 Reserved68Bit3 :1; /* 0x68 Bit 3 */
|
|
U8 ShadowRequestedInsideZpsds :1; /* 0x68 Bit 4 */
|
|
U8 ShadowInsideZpsdsPersistent :1; /* 0x68 Bit 5 */
|
|
U8 Reserved68Bits6to7 :2; /* 0x68 Bits 6 - 7 */
|
|
#endif
|
|
U8 Reserved69; /* 0x69 */
|
|
U8 Reserved6A; /* 0x6A */
|
|
U8 ShadowZoneGroup; /* 0x6B */
|
|
U8 DeviceSlotNumber; /* 0x6C */
|
|
U8 GroupNumber; /* 0x6D */
|
|
U16 PathToEnclosure[3]; /* 0x6E */
|
|
U32 CRC;
|
|
} SMP_DISCOVER_RESPONSE, *PTR_SMP_DISCOVER_RESPONSE;
|
|
|
|
/* Discover attached device types */
|
|
#define SMP_DISCOVER_ATTACHED_DEVICE_TYPE_NO_DEVICES_ATTACHED (0x0)
|
|
#define SMP_DISCOVER_ATTACHED_DEVICE_TYPE_END_DEVICE_ONLY (0x1)
|
|
#define SMP_DISCOVER_ATTACHED_DEVICE_TYPE_EDGE_EXPANDER (0x2)
|
|
#define SMP_DISCOVER_ATTACHED_DEVICE_TYPE_FANOUT_EXPANDER (0x3)
|
|
|
|
/* Discover negotiated physical link rate */
|
|
#define SMP_NEG_PHYS_LINK_RATE_PHY_ENABLED_UNKNOWN_RATE (0x0)
|
|
#define SMP_NEG_PHYS_LINK_RATE_PHY_DISABLED (0x1)
|
|
#define SMP_NEG_PHYS_LINK_RATE_PHY_ENABLED_SPEED_NEG_FAILED (0x2)
|
|
#define SMP_NEG_PHYS_LINK_RATE_PHY_ENABLED_IN_SATA_SPINUP_HOLD (0x3)
|
|
#define SMP_NEG_PHYS_LINK_RATE_PHY_ENABLED_PORT_SELECTOR (0x4)
|
|
#define SMP_NEG_PHYS_LINK_RATE_PHY_ENABLED_RESET_IN_PROGRESS (0x5)
|
|
#define SMP_NEG_PHYS_LINK_RATE_PHY_ENABLED_AT_1_5_GBPS (0x8)
|
|
#define SMP_NEG_PHYS_LINK_RATE_PHY_ENABLED_AT_3_0_GBPS (0x9)
|
|
#define SMP_NEG_PHYS_LINK_RATE_PHY_ENABLED_AT_6_0_GBPS (0xA)
|
|
|
|
/* Discover hardware and programmed physical link rates */
|
|
#define SMP_DISCOVER_PHYSICAL_LINK_RATE_NOT_PROGRAMMABLE (0x0)
|
|
#define SMP_DISCOVER_PHYSICAL_LINK_RATE_1_5_GBPS (0x8)
|
|
#define SMP_DISCOVER_PHYSICAL_LINK_RATE_3_0_GBPS (0x9)
|
|
#define SMP_DISCOVER_PHYSICAL_LINK_RATE_6_0_GBPS (0xA)
|
|
|
|
/* Discover routing attributes */
|
|
#define SMP_DISCOVER_ROUTING_ATTRIBUTE_DIRECT_ROUTING (0x0)
|
|
#define SMP_DISCOVER_ROUTING_ATTRIBUTE_SUBTRACTIVE_ROUTING (0x1)
|
|
#define SMP_DISCOVER_ROUTING_ATTRIBUTE_TABLE_ROUTING (0x2)
|
|
|
|
#define SMP_DISCOVER_CONNECTOR_FIELDS_VALID (0x2)
|
|
/* Valid Connector Types*/
|
|
#define SMP_DISCOVER_CONNECTOR_TYPE_UNKNOWN (0X00)
|
|
#define SMP_DISCOVER_CONNECTOR_TYPE_SAS_EXTERNAL (0X01)
|
|
#define SMP_DISCOVER_CONNECTOR_TYPE_SAS_INTERNAL (0X10)
|
|
#define SMP_DISCOVER_CONNECTOR_TYPE_SAS_BACKPLANE_RECEPTACLE (0X20)
|
|
#define SMP_DISCOVER_CONNECTOR_TYPE_SATA_HOST_PLUG (0X21)
|
|
#define SMP_DISCOVER_CONNECTOR_TYPE_SAS_PLUG (0X22)
|
|
#define SMP_DISCOVER_CONNECTOR_TYPE_SATA_DEVICE_PLUG (0X23)
|
|
|
|
|
|
/*
|
|
* SMP Report Phy Error Log request
|
|
*/
|
|
typedef struct _SMP_REPORT_PHY_ERROR_LOG_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U32 Reserved04to07; /* 0x04 */
|
|
U8 Reserved08; /* 0x08 */
|
|
U8 PhyIdentifier; /* 0x09 */
|
|
U16 Reserved0Ato0B; /* 0x0A */
|
|
} SMP_REPORT_PHY_ERROR_LOG_REQUEST, *PTR_SMP_REPORT_PHY_ERROR_LOG_REQUEST;
|
|
|
|
/*
|
|
* SMP Report Phy Error Log response
|
|
*/
|
|
typedef struct _SMP_REPORT_PHY_ERROR_LOG_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
U16 Reserved06; /* 0x06 */
|
|
U8 Reserved08; /* 0x08 */
|
|
U8 PhyIdentifier; /* 0x09 */
|
|
U8 Reserved0A; /* 0x0A */
|
|
U8 Reserved0B; /* 0x0B */
|
|
U32 InvalidDwordCount; /* 0x0C */
|
|
U32 RunningDisparityErrorCount; /* 0x10 */
|
|
U32 LossOfDwordSynchronizationCount; /* 0x14 */
|
|
U32 PhyResetProblemCount; /* 0x18 */
|
|
U32 CRC;
|
|
} SMP_REPORT_PHY_ERROR_LOG_RESPONSE, *PTR_SMP_REPORT_PHY_ERROR_LOG_RESPONSE;
|
|
|
|
/*
|
|
* SMP Report Phy SATA request
|
|
*/
|
|
typedef struct _SMP_REPORT_PHY_SATA_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U32 Reserved04to07; /* 0x04 */
|
|
U8 Reserved08; /* 0x08 */
|
|
U8 PhyIdentifier; /* 0x09 */
|
|
U8 AffiliationContext; /* 0x0A */
|
|
U8 Reserved0B; /* 0x0B */
|
|
} SMP_REPORT_PHY_SATA_REQUEST, *PTR_SMP_REPORT_PHY_SATA_REQUEST;
|
|
|
|
/*
|
|
* SMP Report Phy SATA response
|
|
*/
|
|
typedef struct _SMP_REPORT_PHY_SATA_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
U16 Reserved06; /* 0x06 */
|
|
U8 Reserved08; /* 0x08 */
|
|
U8 PhyIdentifier; /* 0x09 */
|
|
U8 Reserved0A; /* 0x0A */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved0BBits3to7 :5; /* 0x0B */
|
|
U8 StpITNexusLossOccurred :1;
|
|
U8 AffiliationsSupported :1;
|
|
U8 AffiliationValid :1;
|
|
#else /* little endian */
|
|
U8 AffiliationValid :1; /* 0x0B */
|
|
U8 AffiliationsSupported :1;
|
|
U8 StpITNexusLossOccurred :1;
|
|
U8 Reserved0BBits3to7 :5;
|
|
#endif
|
|
U32 Reserved0Cto0F; /* 0x0C */
|
|
SAS_ADDRESS STPSASAddress; /* 0x10 */
|
|
REGISTER_DEVICE_TO_HOST_FIS RegisterDeviceToHostFIS; /* 0x18 */ /* Defined in ata.h */
|
|
U32 Reserved2Cto2F; /* 0x2C */
|
|
SAS_ADDRESS AffiliatedSTPInitiatorSASAddress; /* 0x30 */
|
|
SAS_ADDRESS StpITNexusLossSASAddress; /* 0x38 - 0x3F */
|
|
U8 Reserved46; /* 0x40 */
|
|
U8 AffiliationContext; /* 0x41 */
|
|
U8 CurrentAffiliationContexts; /* 0x42 */
|
|
U8 MaximumAffiliationContexts; /* 0x43 */
|
|
U32 CRC;
|
|
} SMP_REPORT_PHY_SATA_RESPONSE, *PTR_SMP_REPORT_PHY_SATA_RESPONSE;
|
|
|
|
/*
|
|
* SMP Report Route Information request
|
|
*/
|
|
typedef struct _SMP_REPORT_ROUTE_INFO_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U16 Reserved04to05; /* 0x04 */
|
|
U16 ExpanderRouteIndex; /* 0x06 */
|
|
U8 Reserved08; /* 0x08 */
|
|
U8 PhyIdentifier; /* 0x09 */
|
|
U16 Reserved0Ato0B; /* 0x0A */
|
|
} SMP_REPORT_ROUTE_INFO_REQUEST, *PTR_SMP_REPORT_ROUTE_INFO_REQUEST;
|
|
|
|
/*
|
|
* SMP Report Route Information response
|
|
*/
|
|
typedef struct _SMP_REPORT_ROUTE_INFO_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
U16 ExpanderRouteIndex; /* 0x06 */
|
|
U8 Reserved08; /* 0x08 */
|
|
U8 PhyIdentifier; /* 0x09 */
|
|
U8 Reserved0A; /* 0x0A */
|
|
U8 Reserved0B; /* 0x0B */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 RouteEntryDisabled :1; /* 0x0C */
|
|
U8 Reserved0CBits0to6 :7;
|
|
#else /* little endian */
|
|
U8 Reserved0CBits0to6 :7; /* 0x0C */
|
|
U8 RouteEntryDisabled :1;
|
|
#endif
|
|
U8 Reserved0Dto0F[3]; /* 0x0D */
|
|
SAS_ADDRESS RoutedSASAddress; /* 0x10 */
|
|
U8 Reserved18to23[12]; /* 0x18 */
|
|
U32 Reserved24to27; /* 0x24 */
|
|
U32 CRC;
|
|
} SMP_REPORT_ROUTE_INFO_RESPONSE, *PTR_SMP_REPORT_ROUTE_INFO_RESPONSE;
|
|
|
|
/*
|
|
* SMP Configure Route Information request
|
|
*/
|
|
typedef struct _SMP_CONFIGURE_ROUTE_INFO_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
U16 ExpanderRouteIndex; /* 0x06 */
|
|
U8 Reserved08; /* 0x08 */
|
|
U8 PhyIdentifier; /* 0x09 */
|
|
U16 Reserved0Aand0B; /* 0x0A */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 DisableRouteEntry :1; /* 0x0C */
|
|
U8 Reserved0CBits0to6 :7;
|
|
#else /* little endian */
|
|
U8 Reserved0CBits0to6 :7; /* 0x0C */
|
|
U8 DisableRouteEntry :1;
|
|
#endif
|
|
U8 Reserved0Dto0F[3]; /* 0x0D */
|
|
SAS_ADDRESS RoutedSASAddress; /* 0x10 */
|
|
U8 Reserved18to23[12]; /* 0x18 */
|
|
U32 Reserved24to27; /* 0x24 */
|
|
} SMP_CONFIGURE_ROUTE_INFO_REQUEST, *PTR_SMP_CONFIGURE_ROUTE_INFO_REQUEST;
|
|
|
|
/*
|
|
* SMP Configure Route Information response
|
|
*/
|
|
|
|
typedef struct _SMP_CONFIGURE_ROUTE_INFO_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U32 CRC;
|
|
} SMP_CONFIGURE_ROUTE_INFO_RESPONSE, *PTR_SMP_CONFIGURE_ROUTE_INFO_RESPONSE;
|
|
|
|
/*
|
|
* SMP Report Expander Route Table request
|
|
*/
|
|
typedef struct _SMP_REPORT_EXP_ROUTE_TABLE_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U32 Reserved04to07; /* 0x04 */
|
|
U16 MaxNumDescriptors; /* 0x08 */
|
|
U16 StartingRoutedSASAddressIdx; /* 0x0A */
|
|
U32 Reserved0Cto0F; /* 0x0C */
|
|
U16 Reserved10and11; /* 0x10 */
|
|
U8 Reserved12; /* 0x12 */
|
|
U8 StartingPhyId; /* 0x13 */
|
|
U32 Reserved14to17; /* 0x14 */
|
|
U32 Reserved18to1B; /* 0x18 */
|
|
} SMP_REPORT_EXP_ROUTE_TABLE_REQUEST, *PTR_SMP_REPORT_EXP_ROUTE_TABLE_REQUEST;
|
|
|
|
#define SMP_REPORT_EXP_ROUTE_TABLE_REQUEST_LENGTH (0x06)
|
|
|
|
typedef struct _SMP_REPORT_EXP_ROUTE_TABLE_DESCRIPTOR
|
|
{
|
|
SAS_ADDRESS RoutedSASAddress; /* 0x00 */
|
|
U32 PhyBitMapBit16to47; /* 0x08 */
|
|
U16 PhyBitMapBit0to15; /* 0x0C */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 ZoneGroupValid :1; /* 0x0E */
|
|
U8 Reserved0EBit0to6 :7;
|
|
#else
|
|
U8 Reserved0EBit0to6 :7; /* 0x0E */
|
|
U8 ZoneGroupValid :1;
|
|
#endif
|
|
U8 ZoneGroup; /* 0x0F */
|
|
} SMP_REPORT_EXP_ROUTE_TABLE_DESCRIPTOR, *PTR_SMP_REPORT_EXP_ROUTE_TABLE_DESCRIPTOR;
|
|
|
|
/*
|
|
* SMP Report Expander Route Table response
|
|
*/
|
|
typedef struct _SMP_REPORT_EXP_ROUTE_TABLE_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
U16 ExpRouteTableChangeCnt; /* 0x06 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved08Bit4to7 :4; /* 0x08 */
|
|
U8 SelfConfiguring :1;
|
|
U8 ZoneConfiguring :1;
|
|
U8 Configuring :1;
|
|
U8 Reserved08Bit0 :1;
|
|
#else
|
|
U8 Reserved08Bit0 :1; /* 0x08 */
|
|
U8 Configuring :1;
|
|
U8 ZoneConfiguring :1;
|
|
U8 SelfConfiguring :1;
|
|
U8 Reserved08Bit4to7 :4;
|
|
#endif
|
|
U8 Reserved09; /* 0x09 */
|
|
U8 ExpanderRouteTableDescriptorLength; /* 0x0A */
|
|
U8 NumDescriptors; /* 0x0B */
|
|
U16 FirstRoutedSASAddrIdx; /* 0x0C */
|
|
U16 LastRoutedSASAddrIdx; /* 0x0E */
|
|
U16 Reserved10and11; /* 0x10 */
|
|
U8 Reserved12; /* 0x12 */
|
|
U8 StartingPhyIdentifier; /* 0x13 */
|
|
U32 Reserved20to23; /* 0x14 */
|
|
U32 Reserved24to27; /* 0x18 */
|
|
U32 Reserved28to31; /* 0x1c */
|
|
SMP_REPORT_EXP_ROUTE_TABLE_DESCRIPTOR ExpRouteTableDesc[1]; /* 0x20 */
|
|
}SMP_REPORT_EXP_ROUTE_TABLE_RESPONSE, *PTR_SMP_REPORT_EXP_ROUTE_TABLE_RESPONSE;
|
|
|
|
/* This define was calculated by taking the maximum response size of 1024
|
|
* subtracting the non-descriptor response size of 32 bytes and dividing
|
|
* by the descriptor size
|
|
*/
|
|
#define MAX_REPORT_EXP_ROUTE_TABLE_DESCRIPTOR (1024 - 32)/sizeof(SMP_REPORT_EXP_ROUTE_TABLE_DESCRIPTOR)
|
|
|
|
/*
|
|
* SMP Phy Control request
|
|
*/
|
|
typedef struct _SMP_PHY_CONTROL_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
U16 Reserved06to07; /* 0x06 */
|
|
U8 Reserved08; /* 0x08 */
|
|
U8 PhyIdentifier; /* 0x09 */
|
|
U8 PhyOperation; /* 0x0A */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved0BBits1to7 :7; /* 0x0B */
|
|
U8 UpdatePartialPathTimeoutValue :1;
|
|
#else /* little endian */
|
|
U8 UpdatePartialPathTimeoutValue :1; /* 0x0B */
|
|
U8 Reserved0BBits1to7 :7;
|
|
#endif
|
|
|
|
U32 Reserved0C; /* 0x0C - 0x0F */
|
|
U32 Reserved10; /* 0x10 - 0x13 */
|
|
U32 Reserved14; /* 0x14 - 0x17 */
|
|
SAS_ADDRESS AttachedDeviceName; /* 0x18 - 0x1F */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 ProgMinPhysLinkRate :4; /* 0x20 */
|
|
U8 Reserved20Bits0to3 :4;
|
|
U8 ProgMaxPhysLinkRate :4; /* 0x21 */
|
|
U8 Reserved21Bits0to3 :4;
|
|
U16 Reserved22to23; /* 0x22 */
|
|
U8 Reserved24Bits4to7 :4; /* 0x24 */
|
|
U8 PartialPathTimeoutValue :4;
|
|
#else /* little endian */
|
|
U8 Reserved20Bits0to3 :4; /* 0x20 */
|
|
U8 ProgMinPhysLinkRate :4;
|
|
U8 Reserved21Bits0to3 :4; /* 0x21 */
|
|
U8 ProgMaxPhysLinkRate :4;
|
|
U16 Reserved22to23; /* 0x22 */
|
|
U8 PartialPathTimeoutValue :4; /* 0x24 */
|
|
U8 Reserved24Bits4to7 :4;
|
|
#endif
|
|
U8 Reserved25; /* 0x25 */
|
|
U16 Reserved26and27; /* 0x26 */
|
|
} SMP_PHY_CONTROL_REQUEST, *PTR_SMP_PHY_CONTROL_REQUEST;
|
|
|
|
/* Phy Control Phy operation field */
|
|
#define SMP_PHY_CONTROL_PHY_OPERATION_NOP (0x00)
|
|
#define SMP_PHY_CONTROL_PHY_OPERATION_LINK_RESET (0x01)
|
|
#define SMP_PHY_CONTROL_PHY_OPERATION_HARD_RESET (0x02)
|
|
#define SMP_PHY_CONTROL_PHY_OPERATION_DISABLE (0x03)
|
|
#define SMP_PHY_CONTROL_PHY_OPERATION_CLEAR_ERROR_LOG (0x05)
|
|
#define SMP_PHY_CONTROL_PHY_OPERATION_CLEAR_AFFILIATION (0x06)
|
|
#define SMP_PHY_CONTROL_TRANSMIT_SATA_PORT_SEL_SIGNAL (0x07)
|
|
|
|
/* Phy Control programmed physical link rates */
|
|
#define SMP_PHY_CONTROL_PHYSICAL_LINK_RATE_DONT_CHANGE (0x0)
|
|
#define SMP_PHY_CONTROL_PHYSICAL_LINK_RATE_1_5_GBPS (0x8)
|
|
#define SMP_PHY_CONTROL_PHYSICAL_LINK_RATE_3_0_GBPS (0x9)
|
|
|
|
/*
|
|
* SMP Phy Control response
|
|
*/
|
|
|
|
typedef struct _SMP_PHY_CONTROL_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U32 CRC;
|
|
} SMP_PHY_CONTROL_RESPONSE, *PTR_SMP_PHY_CONTROL_RESPONSE;
|
|
|
|
|
|
/* set allowable vendor unique write size to maximum - SDE12 EDS shows
|
|
* granularity as double dwords, but just treat as dwords here
|
|
*/
|
|
#define MAX_SMP_REGISTERS (254)
|
|
|
|
|
|
/*
|
|
* This section contains generic SGPIO R/W SMP commands
|
|
*/
|
|
|
|
typedef struct _SMP_READ_N_GPIO_REGISTERS_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 RegisterType; /* 0x02 */
|
|
U8 RegisterIndex; /* 0x03 */
|
|
U8 RegisterCount; /* 0x04 */
|
|
U8 Reserved05[3]; /* 0x05 */
|
|
} SMP_READ_N_GPIO_REGISTERS_REQUEST, *PTR_SMP_READ_N_GPIO_REGISTERS_REQUEST;
|
|
|
|
typedef struct _SMP_READ_N_GPIO_REGISTERS_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 Reserved03; /* 0x03 */
|
|
U32 ReadData[1]; /* 0x08-... */
|
|
/* Note this field can actually be up to MAX_SMP_REGISTERS dwords long */
|
|
} SMP_READ_N_GPIO_REGISTERS_RESPONSE, *PTR_SMP_READ_N_GPIO_REGISTERS_RESPONSE;
|
|
|
|
typedef struct _SMP_WRITE_N_GPIO_REGISTERS_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 RegisterType; /* 0x02 */
|
|
U8 RegisterIndex; /* 0x03 */
|
|
U8 RegisterCount; /* 0x04 */
|
|
U8 Reserved05[3]; /* 0x05 */
|
|
U32 WriteData[1]; /* 0x08-... */
|
|
/* Note this field can actually be up to MAX_SMP_REGISTERS dwords long */
|
|
} SMP_WRITE_N_GPIO_REGISTERS_REQUEST, *PTR_SMP_WRITE_N_GPIO_REGISTERS_REQUEST;
|
|
|
|
typedef struct _SMP_WRITE_N_REGISTERS_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 Reserved03; /* 0x03 */
|
|
U32 CRC;
|
|
} SMP_WRITE_N_GPIO_REGISTERS_RESPONSE, *PTR_SMP_WRITE_N_GPIO_REGISTERS_RESPONSE;
|
|
|
|
/* This section contains vendor unique SMP commands for the LSI expander */
|
|
|
|
#define LSI_AHB_WRITE_N_BYTE_WRITE (0x08000000)
|
|
#define LSI_AHB_WRITE_N_ADDR_MASK (0xf7ffffff)
|
|
|
|
typedef struct _SMP_LSI_AHB_WRITE_N_REGISTERS_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 Reserved02; /* 0x02 */
|
|
U8 N; /* 0x03 */
|
|
U32 StartAddr; /* 0x04 - 0x07 */
|
|
U32 WriteData[1]; /* 0x08-... */
|
|
} SMP_LSI_AHB_WRITE_N_REGISTERS_REQUEST, *PTR_SMP_LSI_AHB_WRITE_N_REGISTERS_REQUEST;
|
|
|
|
typedef struct _SMP_LSI_AHB_WRITE_N_REGISTERS_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 Reserved03; /* 0x03 */
|
|
U32 CRC;
|
|
} SMP_LSI_AHB_WRITE_N_REGISTERS_RESPONSE, *PTR_SMP_LSI_AHB_WRITE_N_REGISTERS_RESPONSE;
|
|
|
|
typedef struct _SMP_LSI_AHB_READ_N_REGISTERS_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 Reserved02; /* 0x02 */
|
|
U8 N; /* 0x03 */
|
|
U32 StartAddr; /* 0x04 - 0x07 */
|
|
} SMP_LSI_AHB_READ_N_REGISTERS_REQUEST, *PTR_SMP_LSI_AHB_READ_N_REGISTERS_REQUEST;
|
|
|
|
typedef struct _SMP_LSI_AHB_READ_N_REGISTERS_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 Reserved03; /* 0x03 */
|
|
U32 ReadData[1]; /* 0x04-... */
|
|
} SMP_LSI_AHB_READ_N_REGISTERS_RESPONSE, *PTR_SMP_LSI_AHB_READ_N_REGISTERS_RESPONSE;
|
|
|
|
typedef struct _SMP_LSIX12_WRITE_N_REGISTERS_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 Reserved02; /* 0x02 */
|
|
U8 N; /* 0x03 */
|
|
U16 StartAdr; /* 0x04 */
|
|
U8 StartByteEnables; /* 0x06 */
|
|
U8 EndByteEnables; /* 0x07 */
|
|
U32 WriteData[2]; /* 0x08-... */
|
|
/* Note this field can actually be up to MAX_SMP_REGISTERS dwords long */
|
|
} SMP_LSIX12_WRITE_N_REGISTERS_REQUEST, *PTR_SMP_LSIX12_WRITE_N_REGISTERS_REQUEST;
|
|
|
|
typedef struct _SMP_LSIX12_WRITE_N_REGISTERS_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 Reserved03; /* 0x03 */
|
|
U32 CRC;
|
|
} SMP_LSIX12_WRITE_N_REGISTERS_RESPONSE, *PTR_SMP_LSIX12_WRITE_N_REGISTERS_RESPONSE;
|
|
|
|
typedef struct _SMP_LSIX12_READ_N_REGISTERS_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 Reserved02; /* 0x02 */
|
|
U8 N; /* 0x03 */
|
|
U16 StartAdr; /* 0x04 */
|
|
U16 Reserved06and07; /* 0x06 */
|
|
|
|
} SMP_LSIX12_READ_N_REGISTERS_REQUEST, *PTR_SMP_LSIX12_READ_N_REGISTERS_REQUEST;
|
|
|
|
typedef struct _SMP_LSIX12_READ_N_REGISTERS_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 Reserved03; /* 0x03 */
|
|
U32 ReadData[1]; /* 0x04-... */
|
|
/* Note this field can actually be up to MAX_SMP_REGISTERS dwords long */
|
|
} SMP_LSIX12_READ_N_REGISTERS_RESPONSE, *PTR_SMP_LSIX12_READ_N_REGISTERS_RESPONSE;
|
|
|
|
|
|
#define SMP_SGPIO_REGISTER_TYPE_CFG (0)
|
|
#define SMP_SGPIO_REGISTER_TYPE_RX (1)
|
|
#define SMP_SGPIO_REGISTER_TYPE_RX_GP (2)
|
|
#define SMP_SGPIO_REGISTER_TYPE_TX (3)
|
|
#define SMP_SGPIO_REGISTER_TYPE_TX_GP (4)
|
|
|
|
/*
|
|
* SMP ICL Discover request
|
|
*/
|
|
typedef struct _SMP_ICL_DISCOVER_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U16 Reserved02and03; /* 0x02 */
|
|
U32 Ignored04to07; /* 0x04 */
|
|
U8 Reserved08; /* 0x08 */
|
|
U8 PhyIdentifier; /* 0x09 */
|
|
U8 Ignored0A; /* 0x0A */
|
|
U8 Reserved0B; /* 0x0B */
|
|
} SMP_ICL_DISCOVER_REQUEST, *PTR_SMP_ICL_DISCOVER_REQUEST;
|
|
|
|
/*
|
|
* SMP ICL Discover response
|
|
*/
|
|
|
|
typedef struct _SMP_ICL_DISCOVER_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 Reserved03; /* 0x03 */
|
|
U32 Ignored04to07; /* 0x04 */
|
|
U8 Reserved08; /* 0x08 */
|
|
U8 PhyIdentifier; /* 0x09 */
|
|
U8 Ignored0A; /* 0x0A */
|
|
U8 Reserved0B; /* 0x0B */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved0CBit7 :1; /* 0x0C */
|
|
U8 AttachedDeviceType :3;
|
|
U8 Ignored0CBits0to3 :4;
|
|
U8 Reserved0DBits4to7 :4; /* 0x0D */
|
|
U8 NegotiatedPhysLinkRate :4;
|
|
U8 Reserved0EBits4to7 :4; /* 0x0E */
|
|
U8 AttachedSSPInitiator :1;
|
|
U8 AttachedSTPInitiator :1;
|
|
U8 AttachedSMPInitiator :1;
|
|
U8 AttachedSATAHost :1;
|
|
U8 Reserved0FBits4to7 :4; /* 0x0F */
|
|
U8 AttachedSSPTarget :1;
|
|
U8 AttachedSTPTarget :1;
|
|
U8 AttachedSMPTarget :1;
|
|
U8 AttachedSATATarget :1;
|
|
SAS_ADDRESS SASAddress; /* 0x10 */
|
|
SAS_ADDRESS AttachedSASAddress; /* 0x18 */
|
|
U8 AttachedPhyIdentifier; /* 0x20 */
|
|
U8 Reserved21to27[7]; /* 0x21 */
|
|
U8 ProgMinPhysLinkRate :4; /* 0x28 */
|
|
U8 HardwareMinPhysLinkRate :4;
|
|
U8 ProgMaxPhysLinkRate :4; /* 0x29 */
|
|
U8 HardwareMaxPhysLinkRate :4;
|
|
U8 PhyChangeCount; /* 0x2A */
|
|
U8 VirtualPhy :1; /* 0x2B */
|
|
U8 Reserved2BBits4to6 :3;
|
|
U8 PartialPathTimeoutValue :4;
|
|
U8 Reserved2CBits4to7 :4; /* 0x2C */
|
|
U8 RoutingAttribute :4;
|
|
U8 Reserved2DBit7 :1; /* 0x2D */
|
|
U8 ConnectorType :7;
|
|
#else /* little endian */
|
|
U8 Ignored0CBits0to3 :4; /* 0x0C */
|
|
U8 AttachedDeviceType :3;
|
|
U8 Reserved0CBit7 :1;
|
|
U8 NegotiatedPhysLinkRate :4; /* 0x0D */
|
|
U8 Reserved0DBits4to7 :4;
|
|
U8 AttachedSATAHost :1; /* 0x0E */
|
|
U8 AttachedSMPInitiator :1;
|
|
U8 AttachedSTPInitiator :1;
|
|
U8 AttachedSSPInitiator :1;
|
|
U8 Reserved0EBits4to7 :4;
|
|
U8 AttachedSATATarget :1; /* 0x0F */
|
|
U8 AttachedSMPTarget :1;
|
|
U8 AttachedSTPTarget :1;
|
|
U8 AttachedSSPTarget :1;
|
|
U8 Reserved0FBits4to7 :4;
|
|
SAS_ADDRESS SASAddress; /* 0x10 */
|
|
SAS_ADDRESS AttachedSASAddress; /* 0x18 */
|
|
U8 AttachedPhyIdentifier; /* 0x20 */
|
|
U8 Reserved21to27[7]; /* 0x21 */
|
|
U8 HardwareMinPhysLinkRate :4; /* 0x28 */
|
|
U8 ProgMinPhysLinkRate :4;
|
|
U8 HardwareMaxPhysLinkRate :4; /* 0x29 */
|
|
U8 ProgMaxPhysLinkRate :4;
|
|
U8 PhyChangeCount; /* 0x2A */
|
|
U8 PartialPathTimeoutValue :4; /* 0x2B */
|
|
U8 Reserved2BBits4to6 :3;
|
|
U8 VirtualPhy :1;
|
|
U8 RoutingAttribute :4; /* 0x2C */
|
|
U8 Reserved2CBits4to7 :4;
|
|
U8 ConnectorType :7; /* 0x2D */
|
|
U8 Reserved2DBit7 :1;
|
|
#endif
|
|
|
|
U8 ConnectorElementIndex;
|
|
U8 ConnectorPhysicalLink;
|
|
U16 Reserved30to31;
|
|
|
|
/* Vendor Unique */
|
|
union
|
|
{
|
|
SMP_X12_VU_DISCOVER_REPSONSE VuX12Connector; /* 0x32 */
|
|
SMP_X12_VU_SLOT_DISCOVER_REPSONSE VuX12Slot;
|
|
U16 VendorSpecific; /* 0x32 */
|
|
}u;
|
|
U32 CRC;
|
|
|
|
} SMP_ICL_DISCOVER_RESPONSE, *PTR_SMP_ICL_DISCOVER_RESPONSE;
|
|
|
|
/*
|
|
* SMP Configure Zone Phy request
|
|
*/
|
|
typedef struct _SMP_CONFIGURE_ZONE_PHY_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 ZonePhyConfigDescriptorLength :6; /* 0x06 */
|
|
U8 Save :2; /* 0x06 */
|
|
#else /* little endian */
|
|
U8 Save :2; /* 0x06 */
|
|
U8 ZonePhyConfigDescriptorLength :6; /* 0x06 */
|
|
#endif
|
|
U8 NumberOfZonePhyEntries; /* 0x07 */
|
|
/* note: zone phy entry data follows... */
|
|
} SMP_CONFIGURE_ZONE_PHY_REQUEST, *PTR_SMP_CONFIGURE_ZONE_PHY_REQUEST;
|
|
|
|
typedef struct _SMP_ZONE_PHY_CONFIG_DESCRIPTOR
|
|
{
|
|
U8 PhyIdentifier; /* 0x00 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved01a :2; /* 0x01 */
|
|
U8 InsideZpsdsPersistent :1;
|
|
U8 ReqInsideZpsds :1;
|
|
U8 Reserved01b :1;
|
|
U8 ZoneGroupPersistent :1;
|
|
U8 Reserved01 :2;
|
|
#else /* little endian */
|
|
U8 Reserved01 :2; /* 0x01 */
|
|
U8 ZoneGroupPersistent :1;
|
|
U8 Reserved01b :1;
|
|
U8 ReqInsideZpsds :1;
|
|
U8 InsideZpsdsPersistent :1;
|
|
U8 Reserved01a :2;
|
|
#endif
|
|
U8 Reserved02; /* 0x02 */
|
|
U8 ZoneGroup; /* 0x03 */
|
|
} SMP_ZONE_PHY_CONFIG_DESCRIPTOR, *PTR_SMP_ZONE_PHY_CONFIG_DESCRIPTOR;
|
|
|
|
/*
|
|
* SMP Configure Zone Phy response
|
|
*/
|
|
|
|
typedef struct _SMP_CONFIGURE_ZONE_PHY_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U32 CRC;
|
|
} SMP_CONFIGURE_ZONE_PHY_RESPONSE, *PTR_SMP_CONFIGURE_ZONE_PHY_RESPONSE;
|
|
|
|
/*
|
|
* SMP Configure Zone Permission request
|
|
*/
|
|
typedef struct _SMP_CONFIGURE_ZONE_PERMISSION_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
U8 StartSrcZoneGroup; /* 0x06 */
|
|
U8 NumberOfZoneDescr; /* 0x07 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 NumberOfZoneGroups :2; /* 0x08 */
|
|
U8 Reserved07 :4;
|
|
U8 Save :2;
|
|
#else /* little endian */
|
|
U8 Save :2; /* 0x08 */
|
|
U8 Reserved07 :4;
|
|
U8 NumberOfZoneGroups :2;
|
|
#endif
|
|
U8 ZonePermCfgDescLen; /* 0x09 */
|
|
U16 Reserved0Ato0B; /* 0x0A - 0x0B */
|
|
U32 Reserved0Cto0F; /* 0x0C - 0x0F */
|
|
/* note: zone permission data follows... */
|
|
} SMP_CONFIGURE_ZONE_PERMISSION_REQUEST, *PTR_SMP_CONFIGURE_ZONE_PERMISSION_REQUEST;
|
|
|
|
typedef struct _SMP_ZONE_PERMISSION_DESCRIPTOR
|
|
{
|
|
U8 PermBits[32];
|
|
} SMP_ZONE_PERMISSION_DESCRIPTOR, *PTR_SMP_ZONE_PERMISSION_DESCRIPTOR;
|
|
|
|
typedef struct _SMP_ZONE_PERMISSION_DESCRIPTOR_YETI
|
|
{
|
|
U8 PermBits[16];
|
|
} SMP_ZONE_PERMISSION_DESCRIPTOR_YETI, *PTR_SMP_ZONE_PERMISSION_DESCRIPTOR_YETI;
|
|
|
|
/*
|
|
* SMP Configure Zone Phy response
|
|
*/
|
|
|
|
typedef struct _SMP_CONFIGURE_ZONE_PERMISSION_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U32 CRC;
|
|
} SMP_CONFIGURE_ZONE_PERMISSION_RESPONSE, *PTR_SMP_CONFIGURE_ZONE_PERMISSION_RESPONSE;
|
|
|
|
/*
|
|
* SMP Report Zone Permission request
|
|
*/
|
|
typedef struct _SMP_REPORT_ZONE_PERMISSION_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved04 :6; /* 0x04 */
|
|
U8 ReportType :2;
|
|
#else /* little endian */
|
|
U8 ReportType :2; /* 0x04 */
|
|
U8 Reserved04 :6;
|
|
#endif
|
|
U8 Reserved05; /* 0x05 */
|
|
U8 StartSrcZoneGroup; /* 0x06 */
|
|
U8 MaxNumberOfZoneDescr; /* 0x07 */
|
|
} SMP_REPORT_ZONE_PERMISSION_REQUEST, *PTR_SMP_REPORT_ZONE_PERMISSION_REQUEST;
|
|
|
|
/*
|
|
* SMP Report Zone Permission Response
|
|
*/
|
|
|
|
typedef struct _SMP_REPORT_ZONE_PERMISSION_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 ZoneLocked :1; /* 0x06 */
|
|
U8 Reserved06 :5;
|
|
U8 ReportType :2;
|
|
|
|
U8 NumberOfZoneGroups :2; /* 0x07 Bits 6 - 7 */
|
|
U8 Reserved07Bit0to5 :6; /* 0x07 Bits 0 - 5 */
|
|
|
|
#else /* little endian */
|
|
U8 ReportType :2; /* 0x06 */
|
|
U8 Reserved06 :5;
|
|
U8 ZoneLocked :1;
|
|
|
|
U8 Reserved07Bit0to5 :6; /* 0x07 Bits 0 - 5 */
|
|
U8 NumberOfZoneGroups :2; /* 0x07 Bits 6 - 7 */
|
|
#endif
|
|
U32 Reserved08; /* 0x08 */
|
|
U8 Reserved0c; /* 0x0c */
|
|
U8 ZonePermissionDescriptorLength; /* 0x0d */
|
|
U8 StartSrcZoneGroup; /* 0x0e */
|
|
U8 NumberZonePermissionDescr; /* 0x0f */
|
|
/* zone permission descriptors start here ... */
|
|
} SMP_REPORT_ZONE_PERMISSION_RESPONSE, *PTR_SMP_REPORT_ZONE_PERMISSION_RESPONSE;
|
|
|
|
/*
|
|
* SMP Enable / Disable Zoning request
|
|
*/
|
|
typedef struct _SMP_ENABLE_DISABLE_ZONING_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved06 :6; /* 0x06 */
|
|
U8 Save :2;
|
|
#else /* little endian */
|
|
U8 Save :2; /* 0x06 */
|
|
U8 Reserved06 :6;
|
|
#endif
|
|
U8 Reserved07; /* 0x07 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved08 :6; /* 0x08 */
|
|
U8 EnableDisableZoning :2;
|
|
#else /* little endian */
|
|
U8 EnableDisableZoning :2; /* 0x08 */
|
|
U8 Reserved08 :6;
|
|
#endif
|
|
U8 Reserved09; /* 0x09 */
|
|
U16 Reserved0a; /* 0x0a */
|
|
} SMP_ENABLE_DISABLE_ZONING_REQUEST, *PTR_SMP_ENABLE_DISABLE_ZONING_REQUEST;
|
|
|
|
#define SMP_ENABLE_NO_CHANGE (0x00)
|
|
#define SMP_ENABLE_ENABLE (0x01)
|
|
#define SMP_ENABLE_DISABLE (0x02)
|
|
#define SMP_ENABLE_DISABLE_RESERVED (0x03)
|
|
|
|
/*
|
|
* SMP Enable / Disable Zoning response
|
|
*/
|
|
|
|
typedef struct _SMP_ENABLE_DISABLE_ZONING_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U32 CRC;
|
|
} SMP_ENABLE_DISABLE_ZONING_RESPONSE, *PTR_SMP_ENABLE_DISABLE_ZONING_RESPONSE;
|
|
|
|
/*
|
|
* SMP Zone Activate request
|
|
*/
|
|
typedef struct _SMP_ZONE_ACTIVATE_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
U16 Reserved06; /* 0x06 */
|
|
} SMP_ZONE_ACTIVATE_REQUEST, *PTR_SMP_ZONE_ACTIVATE_REQUEST;
|
|
|
|
/*
|
|
* SMP Zone Activate response
|
|
*/
|
|
|
|
typedef struct _SMP_ZONE_ACTIVATE_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U32 CRC;
|
|
} SMP_ZONE_ACTIVATE_RESPONSE, *PTR_SMP_ZONE_ACTIVATE_RESPONSE;
|
|
|
|
|
|
/*
|
|
* SMP Configure Zone Manager Password request */
|
|
|
|
#define SMP_ZONE_PASSWORD_LEN (32)
|
|
|
|
typedef struct _SMP_CONFIGURE_ZONE_MANAGER_PASSWORD_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved06 :6; /* 0x06 */
|
|
U8 Save :2;
|
|
#else /* little endian */
|
|
U8 Save :2; /* 0x06 */
|
|
U8 Reserved06 :6;
|
|
#endif
|
|
U8 Reserved07; /* 0x07 */
|
|
U8 ZoneManagerPassword[SMP_ZONE_PASSWORD_LEN]; /* 0x08 - 0x27 */
|
|
U8 NewZoneManagerPassword[SMP_ZONE_PASSWORD_LEN]; /* 0x28 - 0x47 */
|
|
|
|
} SMP_CONFIGURE_ZONE_MANAGER_PASSWORD_REQUEST, *PTR_SMP_CONFIGURE_ZONE_MANAGER_PASSWORD_REQUEST;
|
|
|
|
/*
|
|
* SMP Configure Zone Manager Password response */
|
|
|
|
typedef struct _SMP_CONFIGURE_ZONE_MANAGER_PASSWORD_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U32 CRC;
|
|
} SMP_CONFIGURE_ZONE_MANAGER_PASSWORD_RESPONSE, *PTR_SMP_CONFIGURE_ZONE_MANAGER_PASSWORD_RESPONSE;
|
|
|
|
|
|
/*
|
|
* SMP Zone Lock request
|
|
*/
|
|
|
|
typedef struct _SMP_ZONE_LOCK_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U16 ExpanderChangeCount; /* 0x04 */
|
|
U16 ZoneLockInactivityTimeLimit; /* 0x06 */
|
|
U8 ZonePassword[SMP_ZONE_PASSWORD_LEN];/* 0x08 */
|
|
} SMP_ZONE_LOCK_REQUEST, *PTR_SMP_ZONE_LOCK_REQUEST;
|
|
|
|
/*
|
|
* SMP Zone Lock response
|
|
*/
|
|
typedef struct _SMP_ZONE_LOCK_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U32 Reserved04; /* 0x04 */
|
|
SAS_ADDRESS ActiveZoneManager; /* 0x08 */
|
|
U32 CRC;
|
|
} SMP_ZONE_LOCK_RESPONSE, *PTR_SMP_ZONE_LOCK_RESPONSE;
|
|
|
|
/*
|
|
* SMP Zone Unlock request
|
|
*/
|
|
typedef struct _SMP_ZONE_UNLOCK_REQUEST
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 ResponseLength; /* 0x02 */
|
|
U8 RequestLength; /* 0x03 */
|
|
U16 Reserved04; /* 0x04 */
|
|
#if defined( __LSIUTIL_BIG_ENDIAN__ )
|
|
U8 Reserved06 :7; /* 0x06 */
|
|
U8 ActivateRequired :1;
|
|
#else /* little endian */
|
|
U8 ActivateRequired :1; /* 0x06 */
|
|
U8 Reserved06 :7;
|
|
#endif
|
|
U8 Reserved07; /* 0x07 */
|
|
} SMP_ZONE_UNLOCK_REQUEST, *PTR_SMP_ZONE_UNLOCK_REQUEST;
|
|
|
|
/*
|
|
* SMP Zone Unlock response
|
|
*/
|
|
typedef struct _SMP_ZONE_UNLOCK_RESPONSE
|
|
{
|
|
U8 SMPFrameType; /* 0x00 */
|
|
U8 Function; /* 0x01 */
|
|
U8 FunctionResult; /* 0x02 */
|
|
U8 ResponseLength; /* 0x03 */
|
|
U32 CRC;
|
|
} SMP_ZONE_UNLOCK_RESPONSE, *PTR_SMP_ZONE_UNLOCK_RESPONSE;
|
|
|
|
/* Union of all the SMP Request Frames */
|
|
typedef union _SMP_REQUEST_UNION
|
|
{
|
|
SMP_REQUEST SMPRequestGeneric;
|
|
SMP_REPORT_GENERAL_REQUEST SMPReportGeneralRequest;
|
|
SMP_REPORT_MANUFACTURER_INFO_REQUEST SMPReportManufacturerInfoRequest;
|
|
SMP_REPORT_SELF_CONFIG_STATUS_REQUEST SMPReportSelfConfigStatusRequest;
|
|
SMP_DISCOVER_REQUEST SMPDiscoverRequest;
|
|
SMP_REPORT_PHY_ERROR_LOG_REQUEST SMPReportPhyErrorLogRequest;
|
|
SMP_REPORT_PHY_SATA_REQUEST SMPReportPhySataRequest;
|
|
SMP_REPORT_ROUTE_INFO_REQUEST SMPReportRouteInfoRequest;
|
|
SMP_CONFIGURE_ROUTE_INFO_REQUEST SMPConfigureRouteInfoRequest;
|
|
SMP_REPORT_EXP_ROUTE_TABLE_REQUEST SMPReportExpRouteTableRequest;
|
|
SMP_PHY_CONTROL_REQUEST SMPPhyControlRequest;
|
|
/* These are generic SGPIO Register R/W */
|
|
SMP_WRITE_N_GPIO_REGISTERS_REQUEST SMPWriteNGpioRegistersRequest;
|
|
SMP_READ_N_GPIO_REGISTERS_REQUEST SMPReadNGpioRegistersRequest;
|
|
/* These are vendor unique for Sasquatch expander */
|
|
SMP_LSIX12_WRITE_N_REGISTERS_REQUEST SMPLsiX12WriteNRegistersRequest;
|
|
SMP_LSIX12_READ_N_REGISTERS_REQUEST SMPLsiX12ReadNRegistersRequest;
|
|
SMP_ICL_DISCOVER_REQUEST SMPIclDiscoverRequest;
|
|
SMP_LSI_AHB_WRITE_N_REGISTERS_REQUEST SMPLsiAhbWriteNRegistersRequest;
|
|
SMP_LSI_AHB_READ_N_REGISTERS_REQUEST SMPLsiAhbReadNRegistersRequest;
|
|
/* Zoning Requests */
|
|
SMP_CONFIGURE_ZONE_PHY_REQUEST SMPConfigureZonePhyRequest;
|
|
SMP_CONFIGURE_ZONE_PERMISSION_REQUEST SMPConfigureZonePermissionRequest;
|
|
SMP_REPORT_ZONE_PERMISSION_REQUEST SMPReportZonePermissionRequest;
|
|
SMP_ENABLE_DISABLE_ZONING_REQUEST SMPEnableDisableZoningRequest;
|
|
SMP_ZONE_ACTIVATE_REQUEST SMPZoneActivateRequest;
|
|
SMP_ZONE_LOCK_REQUEST SMPZoneLockRequest;
|
|
SMP_ZONE_UNLOCK_REQUEST SMPZoneUnlockRequest;
|
|
} SMP_REQUEST_UNION, * PTR_SMP_REQUEST_UNION;
|
|
|
|
/* Union of all the SMP Response Frames */
|
|
typedef union _SMP_RESPONSE_UNION
|
|
{
|
|
SMP_RESPONSE SMPResponseGeneric;
|
|
SMP_REPORT_GENERAL_RESPONSE SMPReportGeneralResponse;
|
|
SMP_REPORT_MANUFACTURER_INFO_RESPONSE SMPReportManufacturerInfoResponse;
|
|
SMP_REPORT_SELF_CONFIG_STATUS_RESPONSE SMPReportSelfConfigStatusResponse;
|
|
SMP_DISCOVER_RESPONSE SMPDiscoverResponse;
|
|
SMP_REPORT_PHY_ERROR_LOG_RESPONSE SMPReportPhyErrorLogResponse;
|
|
SMP_REPORT_PHY_SATA_RESPONSE SMPReportPhySataResponse;
|
|
SMP_REPORT_ROUTE_INFO_RESPONSE SMPReportRouteInfoResponse;
|
|
SMP_CONFIGURE_ROUTE_INFO_RESPONSE SMPConfigureRouteInfoResponse;
|
|
SMP_REPORT_EXP_ROUTE_TABLE_RESPONSE SMPReportExpRouteTableResponse;
|
|
SMP_PHY_CONTROL_RESPONSE SMPPhyControlResponse;
|
|
/* These are vendor unique for Sasquatch expander */
|
|
SMP_WRITE_N_GPIO_REGISTERS_RESPONSE SMPWriteNGpioRegistersResponse;
|
|
SMP_READ_N_GPIO_REGISTERS_RESPONSE SMPReadNGpioRegistersResponse;
|
|
/* These are vendor unique for Sasquatch expander */
|
|
SMP_LSIX12_WRITE_N_REGISTERS_RESPONSE SMPLsiX12WriteNRegistersResponse;
|
|
SMP_LSIX12_READ_N_REGISTERS_RESPONSE SMPLsiX12ReadNRegistersResponse;
|
|
SMP_ICL_DISCOVER_RESPONSE SMPIclDiscoverResponse;
|
|
SMP_LSI_AHB_WRITE_N_REGISTERS_RESPONSE SMPLsiAhbWriteNRegistersResponse;
|
|
SMP_LSI_AHB_READ_N_REGISTERS_RESPONSE SMPLsiAhbReadNRegistersResponse;
|
|
/* Zoning */
|
|
SMP_CONFIGURE_ZONE_PHY_RESPONSE SMPConfigureZonePhyResponse;
|
|
SMP_CONFIGURE_ZONE_PERMISSION_RESPONSE SMPConfigureZonePermissionResponse;
|
|
SMP_REPORT_ZONE_PERMISSION_RESPONSE SMPReportZonePermissionResponse;
|
|
SMP_ENABLE_DISABLE_ZONING_RESPONSE SMPEnableDisableZoningResponse;
|
|
SMP_ZONE_ACTIVATE_RESPONSE SMPZoneActivateResponse;
|
|
SMP_ZONE_LOCK_RESPONSE SMPZoneLockResponse;
|
|
SMP_ZONE_UNLOCK_RESPONSE SMPZoneUnlockResponse;
|
|
} SMP_RESPONSE_UNION, * PTR_SMP_RESPONSE_UNION;
|
|
|
|
#endif /* End of #ifndef SAS_H_SOURCE */
|
|
|