19e86db79SHyon Kim /* 29e86db79SHyon Kim * **************************************************************************** 39e86db79SHyon Kim * 49e86db79SHyon Kim * Description 59e86db79SHyon Kim * smhbaapi.h - general header file for client 69e86db79SHyon Kim * and library developers 79e86db79SHyon Kim * 89e86db79SHyon Kim * License: 99e86db79SHyon Kim * The contents of this file are subject to the SNIA Public License 109e86db79SHyon Kim * Version 1.0 (the "License"); you may not use this file except in 119e86db79SHyon Kim * compliance with the License. You may obtain a copy of the License at 129e86db79SHyon Kim * 139e86db79SHyon Kim * /http://www.snia.org/English/Resources/Code/OpenSource.html 149e86db79SHyon Kim * 159e86db79SHyon Kim * Software distributed under the License is distributed on an "AS IS" 169e86db79SHyon Kim * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 179e86db79SHyon Kim * the License for the specific language governing rights and limitations 189e86db79SHyon Kim * under the License. 199e86db79SHyon Kim * 209e86db79SHyon Kim * The Original Code for SM-HBA API general header file 219e86db79SHyon Kim * 229e86db79SHyon Kim * The Initial Developer of the Original Code is: 239e86db79SHyon Kim * Benjamin F. Kuo, Troika Networks, Inc. (benk@troikanetworks.com) 249e86db79SHyon Kim * 259e86db79SHyon Kim * Contributor(s): 269e86db79SHyon Kim * Tuan Lam, QLogic Corp. (t_lam@qlc.com) 279e86db79SHyon Kim * Dan Willie, Emulex Corp. (Dan.Willie@emulex.com) 289e86db79SHyon Kim * Dixon Hutchinson, Legato Systems, Inc. (dhutchin@legato.com) 299e86db79SHyon Kim * David Dillard, VERITAS Software Corp. (david.dillard@veritas.com) 309e86db79SHyon Kim * 319e86db79SHyon Kim * **************************************************************************** 329e86db79SHyon Kim * 339e86db79SHyon Kim * Adding on SM-HBA related definitions. 349e86db79SHyon Kim * 359e86db79SHyon Kim * - Includes the original HBA API header. 369e86db79SHyon Kim * - SMHBA_* interfaces and structures are defined. 379e86db79SHyon Kim * 389e86db79SHyon Kim * **************************************************************************** 399e86db79SHyon Kim */ 409e86db79SHyon Kim /* 419e86db79SHyon Kim * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 429e86db79SHyon Kim * Use is subject to license terms. 439e86db79SHyon Kim */ 449e86db79SHyon Kim 459e86db79SHyon Kim #ifndef _SMHBAAPI_H_ 469e86db79SHyon Kim #define _SMHBAAPI_H_ 479e86db79SHyon Kim 489e86db79SHyon Kim #ifdef __cplusplus 499e86db79SHyon Kim extern "C" { 509e86db79SHyon Kim #endif 519e86db79SHyon Kim 529e86db79SHyon Kim #include <hbaapi.h> 539e86db79SHyon Kim 549e86db79SHyon Kim /* Library version string */ 559e86db79SHyon Kim #define SMHBA_LIBVERSION 1 569e86db79SHyon Kim 579e86db79SHyon Kim /* 589e86db79SHyon Kim * A SCSI function was requested at a time when issuing the requested command 599e86db79SHyon Kim * would cause a SCSI overlapped command condition (see SAM-3) 609e86db79SHyon Kim */ 619e86db79SHyon Kim #define HBA_STATUS_ERROR_TARGET_BUSY 30 629e86db79SHyon Kim /* SM-HBA 6.2 Status Return Values */ 639e86db79SHyon Kim /* A call was made to HBA_FreeLibrary when no library was loaded */ 649e86db79SHyon Kim #define HBA_STATUS_ERROR_NOT_LOADED 31 659e86db79SHyon Kim /* A call was made to HBA_LoadLibrary when a library was already loaded */ 669e86db79SHyon Kim #define HBA_STATUS_ERROR_ALREADY_LOADED 32 679e86db79SHyon Kim /* 689e86db79SHyon Kim * The Address Identifier specified in a call to HBA_SendRNIDV2 699e86db79SHyon Kim * violates access control rules * for that call. 709e86db79SHyon Kim */ 719e86db79SHyon Kim #define HBA_STATUS_ERROR_ILLEGAL_FCID 33 729e86db79SHyon Kim #define HBA_STATUS_ERROR_NOT_ASCSIDEVICE 34 739e86db79SHyon Kim #define HBA_STATUS_ERROR_INVALID_PROTOCOL_TYPE 35 749e86db79SHyon Kim #define HBA_STATUS_ERROR_BAD_EVENT_TYPE 36 759e86db79SHyon Kim 769e86db79SHyon Kim 779e86db79SHyon Kim /* SM-HBA 6.4.1.1 Port Type */ 789e86db79SHyon Kim #define HBA_PORTTYPE_SASDEVICE 30 /* SAS (SSP or STP) */ 799e86db79SHyon Kim #define HBA_PORTTYPE_SATADEVICE 31 /* SATA Device, i.e. Direct Attach SATA */ 809e86db79SHyon Kim #define HBA_PORTTYPE_SASEXPANDER 32 /* SAS Expander */ 819e86db79SHyon Kim 829e86db79SHyon Kim /* SM-HBA 6.4.1.2 Port State */ 839e86db79SHyon Kim #define HBA_PORTSTATE_DEGRADED 9 /* Degraded, but Operational mode */ 849e86db79SHyon Kim 859e86db79SHyon Kim /* SM-HBA 6.11.1.3 Port Speed */ 869e86db79SHyon Kim #define HBA_PORTSPEED_4GBIT 8 /* 4 GBit / sec */ 879e86db79SHyon Kim 889e86db79SHyon Kim /* SM-HBA 6.1 Basic Attributes Types */ 899e86db79SHyon Kim typedef struct SMHBA_scsilun {HBA_UINT8 lun[8]; } 909e86db79SHyon Kim SMHBA_SCSILUN, *PSMHBA_SCSILUN; 919e86db79SHyon Kim /* A byte array representation of a SCSI */ 929e86db79SHyon Kim /* LUN (see SAM-4). The first byte of the */ 939e86db79SHyon Kim /* LUN shall be in the first byte of the */ 949e86db79SHyon Kim /* array, and successive bytes of the SCSI */ 959e86db79SHyon Kim /* LUN shall be in successive bytes of the */ 969e86db79SHyon Kim /* array. */ 979e86db79SHyon Kim typedef unsigned long HBA_SCSILUN; 989e86db79SHyon Kim /* A 64 bit unsigned integer representation */ 999e86db79SHyon Kim /* of a SCSI LUN (see SAM-4); */ 1009e86db79SHyon Kim /* may use OS-specific typedef. */ 1019e86db79SHyon Kim /* Byte zero of a SCSI LUN shall be stored */ 1029e86db79SHyon Kim /* in the lowest memory address */ 1039e86db79SHyon Kim /* of the unsigned 64-bit integer value, */ 1049e86db79SHyon Kim /* and successive bytes of the SCSI LUN */ 1059e86db79SHyon Kim /* shall be stored in successively higher memory */ 1069e86db79SHyon Kim /* addresses of the unsigned 64-bit intege value. */ 1079e86db79SHyon Kim /* Note that computers often do not store */ 1089e86db79SHyon Kim /* a byte array in memory in the same order */ 1099e86db79SHyon Kim /* as they store an integer. */ 1109e86db79SHyon Kim /* This standard requires storage as a byte array */ 1119e86db79SHyon Kim 1129e86db79SHyon Kim 1139e86db79SHyon Kim /* SM-HBA 6.3.1 Generic Adapter Attribute */ 1149e86db79SHyon Kim typedef struct SMHBA_AdapterAttributes { 1159e86db79SHyon Kim char Manufacturer[64]; 1169e86db79SHyon Kim char SerialNumber[64]; 1179e86db79SHyon Kim char Model[256]; 1189e86db79SHyon Kim char ModelDescription[256]; 1199e86db79SHyon Kim char HardwareVersion[256]; 1209e86db79SHyon Kim char DriverVersion[256]; 1219e86db79SHyon Kim char OptionROMVersion[256]; 1229e86db79SHyon Kim char FirmwareVersion[256]; 1239e86db79SHyon Kim HBA_UINT32 VendorSpecificID; 1249e86db79SHyon Kim char DriverName[256]; 1259e86db79SHyon Kim char HBASymbolicName[256]; 1269e86db79SHyon Kim char RedundantOptionROMVersion[256]; 1279e86db79SHyon Kim char RedundantFirmwareVersion[256]; 1289e86db79SHyon Kim } SMHBA_ADAPTERATTRIBUTES, *PSMHBA_ADAPTERATTRIBUTES; 1299e86db79SHyon Kim 1309e86db79SHyon Kim /* SM-HBA 6.4.6 SMHBA FC Port Attributes */ 1319e86db79SHyon Kim typedef struct SMHBA_FC_Port { 1329e86db79SHyon Kim HBA_WWN NodeWWN; 1339e86db79SHyon Kim HBA_WWN PortWWN; 1349e86db79SHyon Kim HBA_UINT32 FcId; 1359e86db79SHyon Kim HBA_COS PortSupportedClassofService; 1369e86db79SHyon Kim HBA_FC4TYPES PortSupportedFc4Types; 1379e86db79SHyon Kim HBA_FC4TYPES PortActiveFc4Types; 1389e86db79SHyon Kim HBA_WWN FabricName; 1399e86db79SHyon Kim char PortSymbolicName[256]; 1409e86db79SHyon Kim HBA_UINT32 NumberofDiscoveredPorts; 1419e86db79SHyon Kim HBA_UINT8 NumberofPhys; 1429e86db79SHyon Kim }SMHBA_FC_PORT, *PSMHBA_FC_PORT; 1439e86db79SHyon Kim 1449e86db79SHyon Kim /* SM-HBA 6.4.7.1 HBA_SASPortProtocol */ 1459e86db79SHyon Kim typedef HBA_UINT32 HBA_SASPORTPROTOCOL; 1469e86db79SHyon Kim #define HBA_SASPORTPROTOCOL_SSP 1 /* Serial SCSI Protocol Port */ 1479e86db79SHyon Kim #define HBA_SASPORTPROTOCOL_STP 2 /* Serial ATA Tunneling Protocol Port */ 1489e86db79SHyon Kim #define HBA_SASPORTPROTOCOL_SMP 4 /* Serial Management Protocol Port */ 1499e86db79SHyon Kim /* SATA Device, Direct Attached or anywhere in the domain. */ 1509e86db79SHyon Kim #define HBA_SASPORTPROTOCOL_SATA 8 1519e86db79SHyon Kim 1529e86db79SHyon Kim /* SM-HBA 6.4.8 SMHBA SAS Port Attributes */ 1539e86db79SHyon Kim typedef struct SMHBA_SAS_Port { 1549e86db79SHyon Kim HBA_SASPORTPROTOCOL PortProtocol; 1559e86db79SHyon Kim HBA_WWN LocalSASAddress; 1569e86db79SHyon Kim HBA_WWN AttachedSASAddress; 1579e86db79SHyon Kim HBA_UINT32 NumberofDiscoveredPorts; 1589e86db79SHyon Kim HBA_UINT32 NumberofPhys; 1599e86db79SHyon Kim } SMHBA_SAS_PORT, *PSMHBA_SAS_PORT; 1609e86db79SHyon Kim 1619e86db79SHyon Kim /* SM-HBA 6.4.2 Generic Port Attributes */ 1629e86db79SHyon Kim typedef union SMHBA_Port { 1639e86db79SHyon Kim SMHBA_FC_PORT *FCPort; 1649e86db79SHyon Kim SMHBA_SAS_PORT *SASPort; 1659e86db79SHyon Kim } SMHBA_PORT, *PSMHBA_PORT; 1669e86db79SHyon Kim 1679e86db79SHyon Kim typedef struct SMHBA_PortAttributes { 1689e86db79SHyon Kim HBA_PORTTYPE PortType; 1699e86db79SHyon Kim HBA_PORTSTATE PortState; 1709e86db79SHyon Kim char OSDeviceName[256]; 1719e86db79SHyon Kim SMHBA_PORT PortSpecificAttribute; 1729e86db79SHyon Kim } SMHBA_PORTATTRIBUTES, *PSMHBA_PORTATTRIBUTES; 1739e86db79SHyon Kim 1749e86db79SHyon Kim /* SM-HBA 6.5.1.1 FC Phy Speed */ 1759e86db79SHyon Kim typedef HBA_UINT32 HBA_FCPHYSPEED; 1769e86db79SHyon Kim /* Unknown transceiver incapable of reporting */ 1779e86db79SHyon Kim #define HBA_FCSPEED_UNKNOWN 0 1789e86db79SHyon Kim /* 1799e86db79SHyon Kim * The following are redundantly defined in SM-HBA 6.11.1.3 Port Speed. 1809e86db79SHyon Kim * #define HBA_PORTSPEED_1GBIT 1 1 GBit/sec 1819e86db79SHyon Kim * #define HBA_PORTSPEED_2GBIT 2 2 GBit/sec 1829e86db79SHyon Kim * #define HBA_PORTSPEED_10GBIT 4 10 GBit/sec 1839e86db79SHyon Kim * #define HBA_PORTSPEED_4GBIT 8 4 GBit/sec 1849e86db79SHyon Kim */ 1859e86db79SHyon Kim #define HBA_FCPHYSPEED_8GBIT 16 /* 8 GBit/sec */ 1869e86db79SHyon Kim #define HBA_FCPHYSPEED_16GBIT 32 /* 16 GBit/sec */ 1879e86db79SHyon Kim /* 1889e86db79SHyon Kim * The following conflicts with HBA API 1899e86db79SHyon Kim * #define HBA_PORTSPEED_NOT_NEGOTIATED (1<<15) Speed not established 1909e86db79SHyon Kim */ 1919e86db79SHyon Kim 1929e86db79SHyon Kim /* SM-HBA 6.6.1.2 SM-HBA FC Phy Type */ 1939e86db79SHyon Kim typedef HBA_UINT8 HBA_FCPHYTYPE; 1949e86db79SHyon Kim #define HBA_FCPHYTYPE_UNKNOWN 1 /* Unknown Phy type */ 1959e86db79SHyon Kim #define HBA_FCPHYTYPE_OPTICAL 2 /* Optical Phy */ 1969e86db79SHyon Kim #define HBA_FCPHYTYPE_COPPER 4 /* Copper Phy */ 1979e86db79SHyon Kim 1989e86db79SHyon Kim /* SM-HBA 6.5.2 SM-HBA FC Phy Attributes */ 1999e86db79SHyon Kim typedef struct SMHBA_FC_Phy { 2009e86db79SHyon Kim HBA_FCPHYSPEED PhySupportedSpeed; /* PhySupportedSpeed */ 2019e86db79SHyon Kim HBA_FCPHYSPEED PhySpeed; /* PhySpeed */ 2029e86db79SHyon Kim HBA_FCPHYTYPE PhyType; 2039e86db79SHyon Kim HBA_UINT32 MaxFrameSize; /* MaxFrameSize */ 2049e86db79SHyon Kim } SMHBA_FC_PHY, *PSMHBA_FC_PHY; 2059e86db79SHyon Kim 2069e86db79SHyon Kim /* SM-HBA 6.5.4 SAS PHY Attribute Data Declaration */ 2079e86db79SHyon Kim typedef HBA_UINT32 HBA_SASPHYSPEED; 2089e86db79SHyon Kim 2099e86db79SHyon Kim #define HBA_SASSTATE_UNKNOWN 0x00 /* Phy is enabled. Speed is unknown */ 2109e86db79SHyon Kim #define HBA_SASSTATE_DISABLED 0x01 /* Phy is disabled. */ 2119e86db79SHyon Kim /* Phy is enabled. But failed speed negotiation. */ 2129e86db79SHyon Kim #define HBA_SASSTATE_FAILED 0x02 2139e86db79SHyon Kim /* 2149e86db79SHyon Kim * Phy is enabled. Detected a SATA device and entered the SATA Spinup hold 2159e86db79SHyon Kim * state. 2169e86db79SHyon Kim */ 2179e86db79SHyon Kim #define HBA_SASSTATE_SATASPINUP 0x03 2189e86db79SHyon Kim /* The phy is attached to a Port Selector (see SATA-2.6). */ 2199e86db79SHyon Kim #define HBA_SASSTATE_SATAPORTSEL 0x04 2209e86db79SHyon Kim #define HBA_SASSPEED_1_5GBIT 0x08 /* 1.5 GBit/sec */ 2219e86db79SHyon Kim #define HBA_SASSPEED_3GBIT 0x09 /* 3 GBit/sec */ 2229e86db79SHyon Kim #define HBA_SASSPEED_6GBIT 0x0a /* 6 GBit/sec */ 223*62877672SHans Rosenfeld #define HBA_SASSPEED_12GBIT 0x0b /* 12 GBit/sec */ 2249e86db79SHyon Kim 2259e86db79SHyon Kim /* SM-HBA 6.5.5 SAS Phy Attribute */ 2269e86db79SHyon Kim typedef struct SMHBA_SAS_Phy { 2279e86db79SHyon Kim HBA_UINT8 PhyIdentifier; 2289e86db79SHyon Kim HBA_SASPHYSPEED NegotiatedLinkRate; 2299e86db79SHyon Kim HBA_SASPHYSPEED ProgrammedMinLinkRate; 2309e86db79SHyon Kim HBA_SASPHYSPEED HardwareMinLinkRate; 2319e86db79SHyon Kim HBA_SASPHYSPEED ProgrammedMaxLinkRate; 2329e86db79SHyon Kim HBA_SASPHYSPEED HardwareMaxLinkRate; 2339e86db79SHyon Kim HBA_WWN domainPortWWN; 2349e86db79SHyon Kim } SMHBA_SAS_PHY, *PSMHBA_SAS_PHY; 2359e86db79SHyon Kim 2369e86db79SHyon Kim /* SM-HBA 6.6.1.1 Protocol Statistics Data Declarations */ 2379e86db79SHyon Kim /* Statistical counters for FC-4, SSP, STP, SMP protocols */ 2389e86db79SHyon Kim typedef struct SMHBA_ProtocolStatistics { 2399e86db79SHyon Kim HBA_INT64 SecondsSinceLastReset; 2409e86db79SHyon Kim HBA_INT64 InputRequests; 2419e86db79SHyon Kim HBA_INT64 OutputRequests; 2429e86db79SHyon Kim HBA_INT64 ControlRequests; 2439e86db79SHyon Kim HBA_INT64 InputMegabytes; 2449e86db79SHyon Kim HBA_INT64 OutputMegabytes; 2459e86db79SHyon Kim } SMHBA_PROTOCOLSTATISTICS, *PSMHBA_PROTOCOLSTATISTICS; 2469e86db79SHyon Kim 2479e86db79SHyon Kim /* SM-HBA 6.6.2.1 Port Statistics Data Declarations */ 2489e86db79SHyon Kim typedef struct SMHBA_PortStatistics { 2499e86db79SHyon Kim HBA_INT64 SecondsSinceLastReset; 2509e86db79SHyon Kim HBA_INT64 TxFrames; 2519e86db79SHyon Kim HBA_INT64 TxWords; 2529e86db79SHyon Kim HBA_INT64 RxFrames; 2539e86db79SHyon Kim HBA_INT64 RxWords; 2549e86db79SHyon Kim }SMHBA_PORTSTATISTICS, *PSMHBA_PORTSTATISTICS; 2559e86db79SHyon Kim 2569e86db79SHyon Kim /* SM-HBA 6.6.2.2 SAS Phy Statistics Data Declaration */ 2579e86db79SHyon Kim typedef struct SMHBA_SASPhyStatistics { 2589e86db79SHyon Kim HBA_INT64 SecondsSinceLastReset; 2599e86db79SHyon Kim HBA_INT64 TxFrames; 2609e86db79SHyon Kim HBA_INT64 TxWords; 2619e86db79SHyon Kim HBA_INT64 RxFrames; 2629e86db79SHyon Kim HBA_INT64 RxWords; 2639e86db79SHyon Kim HBA_INT64 InvalidDwordCount; 2649e86db79SHyon Kim HBA_INT64 RunningDisparityErrorCount; 2659e86db79SHyon Kim HBA_INT64 LossofDwordSyncCount; 2669e86db79SHyon Kim HBA_INT64 PhyResetProblemCount; 2679e86db79SHyon Kim } SMHBA_SASPHYSTATISTICS, *PSMHBA_SASPHYSTATISTICS; 2689e86db79SHyon Kim 2699e86db79SHyon Kim /* SM-HBA 6.6.2.4 FC Phy Statistics Data Declaration */ 2709e86db79SHyon Kim /* Statistical counters for FC-0, FC-1, and FC-2 */ 2719e86db79SHyon Kim typedef struct SMHBA_FCPhyStatistics { 2729e86db79SHyon Kim HBA_INT64 SecondsSinceLastReset; 2739e86db79SHyon Kim HBA_INT64 TxFrames; 2749e86db79SHyon Kim HBA_INT64 TxWords; 2759e86db79SHyon Kim HBA_INT64 RxFrames; 2769e86db79SHyon Kim HBA_INT64 RxWords; 2779e86db79SHyon Kim HBA_INT64 LIPCount; 2789e86db79SHyon Kim HBA_INT64 NOSCount; 2799e86db79SHyon Kim HBA_INT64 ErrorFrames; 2809e86db79SHyon Kim HBA_INT64 DumpedFrames; 2819e86db79SHyon Kim HBA_INT64 LinkFailureCount; 2829e86db79SHyon Kim HBA_INT64 LossOfSyncCount; 2839e86db79SHyon Kim HBA_INT64 LossOfSignalCount; 2849e86db79SHyon Kim HBA_INT64 PrimitiveSeqProtocolErrCount; 2859e86db79SHyon Kim HBA_INT64 InvalidTxWordCount; 2869e86db79SHyon Kim HBA_INT64 InvalidCRCCount; 2879e86db79SHyon Kim }SMHBA_FCPHYSTATISTICS, *PSMHBA_FCPHYSTATISTICS; 2889e86db79SHyon Kim 2899e86db79SHyon Kim /* SM-HBA 6.6.2.1 Phy Statistics Data Declaration */ 2909e86db79SHyon Kim typedef union SMHBA_PhyStatistics { 2919e86db79SHyon Kim SMHBA_SASPHYSTATISTICS *SASPhyStatistics; 2929e86db79SHyon Kim SMHBA_FCPHYSTATISTICS *FCPhyStatistics; 2939e86db79SHyon Kim } SMHBA_PHYSTATISTICS, *PSMHBA_PHYSTATISTICS; 2949e86db79SHyon Kim 2959e86db79SHyon Kim /* SM-HBA 6.7.1.1 SMHBA_BIND_CAPABILITY */ 2969e86db79SHyon Kim typedef HBA_UINT32 SMHBA_BIND_CAPABILITY; 2979e86db79SHyon Kim #define SMHBA_CAN_BIND_TO_WWPN 0x0001 2989e86db79SHyon Kim #define SMHBA_CAN_BIND_TO_LUID 0x0002 2999e86db79SHyon Kim #define SMHBA_CAN_BIND_ANY_LUNS 0x0400 3009e86db79SHyon Kim #define SMHBA_CAN_BIND_AUTOMAP 0x0800 3019e86db79SHyon Kim 3029e86db79SHyon Kim /* SM-HBA 6.7.1.2 SMHBA_BIND_TYPE */ 3039e86db79SHyon Kim typedef HBA_UINT32 SMHBA_BIND_TYPE; 3049e86db79SHyon Kim #define SMHBA_BIND_TO_WWPN 0x0001 3059e86db79SHyon Kim #define SMHBA_BIND_TO_LUID 0x0002 3069e86db79SHyon Kim 3079e86db79SHyon Kim /* SM-HBA 6.7.1.3 SMHBA_ScsiId */ 3089e86db79SHyon Kim typedef struct SMHBA_ScsiId { 3099e86db79SHyon Kim char OSDeviceName[256]; 3109e86db79SHyon Kim HBA_UINT32 ScsiBusNumber; 3119e86db79SHyon Kim HBA_UINT32 ScsiTargetNumber; 3129e86db79SHyon Kim HBA_UINT32 ScsiOSLun; 3139e86db79SHyon Kim } SMHBA_SCSIID, *PSMHBA_SCSIID; 3149e86db79SHyon Kim 3159e86db79SHyon Kim /* SM-HBA 6.7.1.4 SMHBA_LUID */ 3169e86db79SHyon Kim typedef struct SMHBA_LUID { 3179e86db79SHyon Kim char buffer[256]; 3189e86db79SHyon Kim } SMHBA_LUID, *PSMHBA_LUID; 3199e86db79SHyon Kim 3209e86db79SHyon Kim /* SM-HBA 6.7.1.5 SMHBA_PORTLUN */ 3219e86db79SHyon Kim typedef struct SMHBA_PORTLUN { 3229e86db79SHyon Kim HBA_WWN PortWWN; 3239e86db79SHyon Kim HBA_WWN domainPortWWN; 3249e86db79SHyon Kim SMHBA_SCSILUN TargetLun; 3259e86db79SHyon Kim } SMHBA_PORTLUN, *PSMHBA_PORTLUN; 3269e86db79SHyon Kim 3279e86db79SHyon Kim /* SM-HBA 6.7.1.6 Composite types */ 3289e86db79SHyon Kim typedef struct SMHBA_ScsiEntry { 3299e86db79SHyon Kim SMHBA_SCSIID ScsiId; 3309e86db79SHyon Kim SMHBA_PORTLUN PortLun; 3319e86db79SHyon Kim SMHBA_LUID LUID; 3329e86db79SHyon Kim } SMHBA_SCSIENTRY, *PSMHBA_SCSIENTRY; 3339e86db79SHyon Kim 3349e86db79SHyon Kim typedef struct SMHBA_TargetMapping { 3359e86db79SHyon Kim HBA_UINT32 NumberOfEntries; 3369e86db79SHyon Kim SMHBA_SCSIENTRY entry[1]; /* Variable length array */ 3379e86db79SHyon Kim } SMHBA_TARGETMAPPING, *PSMHBA_TARGETMAPPING; 3389e86db79SHyon Kim 3399e86db79SHyon Kim typedef struct SMHBA_BindingEntry { 3409e86db79SHyon Kim SMHBA_BIND_TYPE type; 3419e86db79SHyon Kim SMHBA_SCSIID ScsiId; 3429e86db79SHyon Kim SMHBA_PORTLUN PortLun; 3439e86db79SHyon Kim SMHBA_LUID LUID; 3449e86db79SHyon Kim HBA_STATUS Status; 3459e86db79SHyon Kim } SMHBA_BINDINGENTRY, *PSMHBA_BINDINGENTRY; 3469e86db79SHyon Kim 3479e86db79SHyon Kim typedef struct SMHBA_Binding { 3489e86db79SHyon Kim HBA_UINT32 NumberOfEntries; 3499e86db79SHyon Kim SMHBA_BINDINGENTRY entry[1]; /* Variable length array */ 3509e86db79SHyon Kim } SMHBA_BINDING, *PSMHBA_BINDING; 3519e86db79SHyon Kim 3529e86db79SHyon Kim /* SM-HBA 6.9.5 Library Attribute Data Declarations */ 3539e86db79SHyon Kim typedef struct SMHBA_LibraryAttributes { 3549e86db79SHyon Kim char LibPath[256]; 3559e86db79SHyon Kim char VName[256]; 3569e86db79SHyon Kim char VVersion[256]; 3579e86db79SHyon Kim struct { 3589e86db79SHyon Kim int tm_mday; /* day of the month - [1 - 31] */ 3599e86db79SHyon Kim int tm_mon; /* months since January - [0 - 11] */ 3609e86db79SHyon Kim int tm_year; /* years since 1900 */ 3619e86db79SHyon Kim } build_date; 3629e86db79SHyon Kim } SMHBA_LIBRARYATTRIBUTES, *PSMHBA_LIBRARYATTRIBUTES; 3639e86db79SHyon Kim 3649e86db79SHyon Kim /* SM-HBA 6.8.1 Asynchronous Event Data Declarations */ 3659e86db79SHyon Kim #define HBA_EVENT_PORT_BROADCAST_CHANGE 0x205 3669e86db79SHyon Kim #define HBA_EVENT_PORT_BROADCAST_SES 0x208 3679e86db79SHyon Kim #define HBA_EVENT_PORT_BROADCAST_D24_0 0x206 3689e86db79SHyon Kim #define HBA_EVENT_PORT_BROADCAST_D27_4 0x207 3699e86db79SHyon Kim #define HBA_EVENT_PORT_BROADCAST_D01_4 0x209 3709e86db79SHyon Kim #define HBA_EVENT_PORT_BROADCAST_D04_7 0x20A 3719e86db79SHyon Kim #define HBA_EVENT_PORT_BROADCAST_D16_7 0x20B 3729e86db79SHyon Kim #define HBA_EVENT_PORT_BROADCAST_D29_7 0x20C 3739e86db79SHyon Kim #define HBA_EVENT_PORT_ALL 0x2FF 3749e86db79SHyon Kim 3759e86db79SHyon Kim /* SM-HBA specific entry points. */ 3769e86db79SHyon Kim 3779e86db79SHyon Kim HBA_UINT32 SMHBA_GetVersion(); 3789e86db79SHyon Kim 3799e86db79SHyon Kim HBA_UINT32 SMHBA_GetWrapperLibraryAttributes( 3809e86db79SHyon Kim SMHBA_LIBRARYATTRIBUTES *attributes 3819e86db79SHyon Kim ); 3829e86db79SHyon Kim 3839e86db79SHyon Kim HBA_UINT32 SMHBA_GetVendorLibraryAttributes( 3849e86db79SHyon Kim HBA_UINT32 adapter_index, 3859e86db79SHyon Kim SMHBA_LIBRARYATTRIBUTES *attributes 3869e86db79SHyon Kim ); 3879e86db79SHyon Kim 3889e86db79SHyon Kim HBA_STATUS SMHBA_GetAdapterAttributes( 3899e86db79SHyon Kim HBA_HANDLE handle, 3909e86db79SHyon Kim SMHBA_ADAPTERATTRIBUTES *pAdapterAttributes 3919e86db79SHyon Kim ); 3929e86db79SHyon Kim 3939e86db79SHyon Kim HBA_STATUS SMHBA_GetNumberOfPorts( 3949e86db79SHyon Kim HBA_HANDLE handle, 3959e86db79SHyon Kim HBA_UINT32 *numberofports 3969e86db79SHyon Kim ); 3979e86db79SHyon Kim 3989e86db79SHyon Kim HBA_STATUS SMHBA_GetPortType( 3999e86db79SHyon Kim HBA_HANDLE handle, 4009e86db79SHyon Kim HBA_UINT32 portindex, 4019e86db79SHyon Kim HBA_PORTTYPE *porttype 4029e86db79SHyon Kim ); 4039e86db79SHyon Kim 4049e86db79SHyon Kim HBA_STATUS SMHBA_GetAdapterPortAttributes( 4059e86db79SHyon Kim HBA_HANDLE handle, 4069e86db79SHyon Kim HBA_UINT32 portindex, 4079e86db79SHyon Kim SMHBA_PORTATTRIBUTES *portattributes 4089e86db79SHyon Kim ); 4099e86db79SHyon Kim 4109e86db79SHyon Kim HBA_STATUS SMHBA_GetDiscoveredPortAttributes( 4119e86db79SHyon Kim HBA_HANDLE handle, 4129e86db79SHyon Kim HBA_UINT32 portindex, 4139e86db79SHyon Kim HBA_UINT32 discoveredportindex, 4149e86db79SHyon Kim SMHBA_PORTATTRIBUTES *porattributes 4159e86db79SHyon Kim ); 4169e86db79SHyon Kim 4179e86db79SHyon Kim HBA_STATUS SMHBA_GetPortAttributesByWWN( 4189e86db79SHyon Kim HBA_HANDLE handle, 4199e86db79SHyon Kim HBA_WWN portWWN, 4209e86db79SHyon Kim HBA_WWN domainPortWWN, 4219e86db79SHyon Kim SMHBA_PORTATTRIBUTES *portattributes 4229e86db79SHyon Kim ); 4239e86db79SHyon Kim 4249e86db79SHyon Kim HBA_STATUS SMHBA_GetPortAttributesByWWN( 4259e86db79SHyon Kim HBA_HANDLE handle, 4269e86db79SHyon Kim HBA_WWN portWWN, 4279e86db79SHyon Kim HBA_WWN domainPortWWN, 4289e86db79SHyon Kim SMHBA_PORTATTRIBUTES *portattributes 4299e86db79SHyon Kim ); 4309e86db79SHyon Kim 4319e86db79SHyon Kim HBA_STATUS SMHBA_GetFCPhyAttributes( 4329e86db79SHyon Kim HBA_HANDLE handle, 4339e86db79SHyon Kim HBA_UINT32 portindex, 4349e86db79SHyon Kim HBA_UINT32 phyindex, 4359e86db79SHyon Kim SMHBA_FC_PHY *phytype 4369e86db79SHyon Kim ); 4379e86db79SHyon Kim 4389e86db79SHyon Kim HBA_STATUS SMHBA_GetSASPhyAttributes( 4399e86db79SHyon Kim HBA_HANDLE handle, 4409e86db79SHyon Kim HBA_UINT32 portindex, 4419e86db79SHyon Kim HBA_UINT32 phyindex, 4429e86db79SHyon Kim SMHBA_SAS_PHY *phytype 4439e86db79SHyon Kim ); 4449e86db79SHyon Kim 4459e86db79SHyon Kim HBA_STATUS SMHBA_GetProtocolStatistics( 4469e86db79SHyon Kim HBA_HANDLE handle, 4479e86db79SHyon Kim HBA_UINT32 portindex, 4489e86db79SHyon Kim HBA_UINT32 protocoltype, 4499e86db79SHyon Kim SMHBA_PROTOCOLSTATISTICS *pProtocolStatistics 4509e86db79SHyon Kim ); 4519e86db79SHyon Kim 4529e86db79SHyon Kim HBA_STATUS SMHBA_GetPhyStatistics( 4539e86db79SHyon Kim HBA_HANDLE handle, 4549e86db79SHyon Kim HBA_UINT32 portindex, 4559e86db79SHyon Kim HBA_UINT32 phyindex, 4569e86db79SHyon Kim SMHBA_PHYSTATISTICS *pPhyStatistics 4579e86db79SHyon Kim ); 4589e86db79SHyon Kim 4599e86db79SHyon Kim HBA_STATUS SMHBA_SendTEST( 4609e86db79SHyon Kim HBA_HANDLE handle, 4619e86db79SHyon Kim HBA_WWN hbaPortWWN, 4629e86db79SHyon Kim HBA_WWN destWWN, 4639e86db79SHyon Kim HBA_UINT32 destFCID, 4649e86db79SHyon Kim void *pReqBuffer, 4659e86db79SHyon Kim HBA_UINT32 ReqBufferSize 4669e86db79SHyon Kim ); 4679e86db79SHyon Kim 4689e86db79SHyon Kim HBA_STATUS SMHBA_SendECHO( 4699e86db79SHyon Kim HBA_HANDLE handle, 4709e86db79SHyon Kim HBA_WWN hbaPortWWN, 4719e86db79SHyon Kim HBA_WWN destWWN, 4729e86db79SHyon Kim HBA_UINT32 destFCID, 4739e86db79SHyon Kim void *pReqBuffer, 4749e86db79SHyon Kim HBA_UINT32 ReqBufferSize, 4759e86db79SHyon Kim void *pRspBuffer, 4769e86db79SHyon Kim HBA_UINT32 *pRspBufferSize 4779e86db79SHyon Kim ); 4789e86db79SHyon Kim 4799e86db79SHyon Kim HBA_UINT32 SMHBA_SendSMPPassThru( 4809e86db79SHyon Kim HBA_HANDLE handle, 4819e86db79SHyon Kim HBA_WWN hbaportWWN, 4829e86db79SHyon Kim HBA_WWN destportWWN, 4839e86db79SHyon Kim HBA_WWN domainPortWWN, 4849e86db79SHyon Kim void *pReqBuffer, 4859e86db79SHyon Kim HBA_UINT32 ReqBufferSize, 4869e86db79SHyon Kim void *pRspBuffer, 4879e86db79SHyon Kim HBA_UINT32 *pRspBufferSize 4889e86db79SHyon Kim ); 4899e86db79SHyon Kim 4909e86db79SHyon Kim HBA_STATUS SMHBA_GetBindingCapability( 4919e86db79SHyon Kim HBA_HANDLE handle, 4929e86db79SHyon Kim HBA_WWN hbaPortWWN, 4939e86db79SHyon Kim HBA_WWN domainPortWWN, 4949e86db79SHyon Kim SMHBA_BIND_CAPABILITY *pFlags 4959e86db79SHyon Kim ); 4969e86db79SHyon Kim 4979e86db79SHyon Kim HBA_STATUS SMHBA_GetBindingSupport( 4989e86db79SHyon Kim HBA_HANDLE handle, 4999e86db79SHyon Kim HBA_WWN hbaPortWWN, 5009e86db79SHyon Kim HBA_WWN domainPortWWN, 5019e86db79SHyon Kim SMHBA_BIND_CAPABILITY *pFlags 5029e86db79SHyon Kim ); 5039e86db79SHyon Kim 5049e86db79SHyon Kim HBA_STATUS SMHBA_SetBindingSupport( 5059e86db79SHyon Kim HBA_HANDLE handle, 5069e86db79SHyon Kim HBA_WWN hbaPortWWN, 5079e86db79SHyon Kim HBA_WWN domainPortWWN, 5089e86db79SHyon Kim SMHBA_BIND_CAPABILITY flags 5099e86db79SHyon Kim ); 5109e86db79SHyon Kim 5119e86db79SHyon Kim HBA_STATUS SMHBA_GetTargetMapping( 5129e86db79SHyon Kim HBA_HANDLE handle, 5139e86db79SHyon Kim HBA_WWN hbaPortWWN, 5149e86db79SHyon Kim HBA_WWN domainPortWWN, 5159e86db79SHyon Kim SMHBA_TARGETMAPPING *pMapping 5169e86db79SHyon Kim ); 5179e86db79SHyon Kim 5189e86db79SHyon Kim HBA_STATUS SMHBA_GetPersistentBinding( 5199e86db79SHyon Kim HBA_HANDLE handle, 5209e86db79SHyon Kim HBA_WWN hbaPortWWN, 5219e86db79SHyon Kim HBA_WWN domainPortWWN, 5229e86db79SHyon Kim SMHBA_BINDING *binding 5239e86db79SHyon Kim ); 5249e86db79SHyon Kim 5259e86db79SHyon Kim HBA_STATUS SMHBA_SetPersistentBinding( 5269e86db79SHyon Kim HBA_HANDLE handle, 5279e86db79SHyon Kim HBA_WWN hbaPortWWN, 5289e86db79SHyon Kim HBA_WWN domainPortWWN, 5299e86db79SHyon Kim const SMHBA_BINDING *binding 5309e86db79SHyon Kim ); 5319e86db79SHyon Kim 5329e86db79SHyon Kim HBA_STATUS SMHBA_RemovePersistentBinding( 5339e86db79SHyon Kim HBA_HANDLE handle, 5349e86db79SHyon Kim HBA_WWN hbaPortWWN, 5359e86db79SHyon Kim HBA_WWN domainPortWWN, 5369e86db79SHyon Kim const SMHBA_BINDING *binding 5379e86db79SHyon Kim ); 5389e86db79SHyon Kim 5399e86db79SHyon Kim HBA_STATUS SMHBA_RemoveAllPersistentBindings( 5409e86db79SHyon Kim HBA_HANDLE handle, 5419e86db79SHyon Kim HBA_WWN hbaPortWWN, 5429e86db79SHyon Kim HBA_WWN domainPortWWN 5439e86db79SHyon Kim ); 5449e86db79SHyon Kim 5459e86db79SHyon Kim HBA_STATUS SMHBA_GetLUNStatistics( 5469e86db79SHyon Kim HBA_HANDLE handle, 5479e86db79SHyon Kim const HBA_SCSIID *lunit, 5489e86db79SHyon Kim SMHBA_PROTOCOLSTATISTICS *statistics 5499e86db79SHyon Kim ); 5509e86db79SHyon Kim 5519e86db79SHyon Kim HBA_STATUS SMHBA_ScsiInquiry( 5529e86db79SHyon Kim HBA_HANDLE handle, 5539e86db79SHyon Kim HBA_WWN hbaPortWWN, 5549e86db79SHyon Kim HBA_WWN discoveredPortWWN, 5559e86db79SHyon Kim HBA_WWN domainPortWWN, 5569e86db79SHyon Kim SMHBA_SCSILUN smhbaLUN, 5579e86db79SHyon Kim HBA_UINT8 CDB_Byte1, 5589e86db79SHyon Kim HBA_UINT8 CDB_Byte2, 5599e86db79SHyon Kim void *pRspBuffer, 5609e86db79SHyon Kim HBA_UINT32 *pRspBufferSize, 5619e86db79SHyon Kim HBA_UINT8 *pScsiStatus, 5629e86db79SHyon Kim void *pSenseBuffer, 5639e86db79SHyon Kim HBA_UINT32 *pSenseBufferSize 5649e86db79SHyon Kim ); 5659e86db79SHyon Kim 5669e86db79SHyon Kim HBA_STATUS SMHBA_ScsiReportLUNs( 5679e86db79SHyon Kim HBA_HANDLE handle, 5689e86db79SHyon Kim HBA_WWN hbaPortWWN, 5699e86db79SHyon Kim HBA_WWN discoveredPortWWN, 5709e86db79SHyon Kim HBA_WWN domainPortWWN, 5719e86db79SHyon Kim void *pRspBuffer, 5729e86db79SHyon Kim HBA_UINT32 *pRspBufferSize, 5739e86db79SHyon Kim HBA_UINT8 *pScsiStatus, 5749e86db79SHyon Kim void *pSenseBuffer, 5759e86db79SHyon Kim HBA_UINT32 *pSenseBufferSize 5769e86db79SHyon Kim ); 5779e86db79SHyon Kim 5789e86db79SHyon Kim HBA_STATUS SMHBA_ScsiReadCapacity( 5799e86db79SHyon Kim HBA_HANDLE handle, 5809e86db79SHyon Kim HBA_WWN hbaPortWWN, 5819e86db79SHyon Kim HBA_WWN discoveredPortWWN, 5829e86db79SHyon Kim HBA_WWN domainPortWWN, 5839e86db79SHyon Kim SMHBA_SCSILUN smhbaLUN, 5849e86db79SHyon Kim void *pRspBuffer, 5859e86db79SHyon Kim HBA_UINT32 *pRspBufferSize, 5869e86db79SHyon Kim HBA_UINT8 *pScsiStatus, 5879e86db79SHyon Kim void *pSenseBuffer, 5889e86db79SHyon Kim HBA_UINT32 *pSenseBufferSize 5899e86db79SHyon Kim ); 5909e86db79SHyon Kim 5919e86db79SHyon Kim HBA_STATUS SMHBA_RegisterForAdapterAddEvents( 5929e86db79SHyon Kim void (*pCallback) ( 5939e86db79SHyon Kim void *pData, 5949e86db79SHyon Kim HBA_WWN portWWN, 5959e86db79SHyon Kim HBA_UINT32 eventType), 5969e86db79SHyon Kim void *pUserData, 5979e86db79SHyon Kim HBA_CALLBACKHANDLE *pCallbackHandle 5989e86db79SHyon Kim ); 5999e86db79SHyon Kim 6009e86db79SHyon Kim HBA_STATUS SMHBA_RegisterForAdapterEvents( 6019e86db79SHyon Kim void (*pCallback) ( 6029e86db79SHyon Kim void *pData, 6039e86db79SHyon Kim HBA_WWN portWWN, 6049e86db79SHyon Kim HBA_UINT32 eventType), 6059e86db79SHyon Kim void *pUserData, 6069e86db79SHyon Kim HBA_HANDLE handle, 6079e86db79SHyon Kim HBA_CALLBACKHANDLE *pCallbackHandle 6089e86db79SHyon Kim ); 6099e86db79SHyon Kim 6109e86db79SHyon Kim HBA_STATUS SMHBA_RegisterForAdapterPortEvents( 6119e86db79SHyon Kim void (*pCallback) ( 6129e86db79SHyon Kim void *pData, 6139e86db79SHyon Kim HBA_WWN portWWN, 6149e86db79SHyon Kim HBA_UINT32 eventType, 6159e86db79SHyon Kim HBA_UINT32 fabricPortID), 6169e86db79SHyon Kim void *pUserData, 6179e86db79SHyon Kim HBA_HANDLE handle, 6189e86db79SHyon Kim HBA_WWN portWWN, 6199e86db79SHyon Kim HBA_UINT32 specificEventType, 6209e86db79SHyon Kim HBA_CALLBACKHANDLE *pCallbackHandle 6219e86db79SHyon Kim ); 6229e86db79SHyon Kim 6239e86db79SHyon Kim HBA_STATUS SMHBA_RegisterForAdapterPortStatEvents( 6249e86db79SHyon Kim void (*pCallback) ( 6259e86db79SHyon Kim void *pData, 6269e86db79SHyon Kim HBA_WWN portWWN, 6279e86db79SHyon Kim HBA_UINT32 protocolType, 6289e86db79SHyon Kim HBA_UINT32 eventType), 6299e86db79SHyon Kim void *pUserData, 6309e86db79SHyon Kim HBA_HANDLE handle, 6319e86db79SHyon Kim HBA_WWN portWWN, 6329e86db79SHyon Kim HBA_UINT32 protocolType, 6339e86db79SHyon Kim SMHBA_PROTOCOLSTATISTICS stats, 6349e86db79SHyon Kim HBA_UINT32 statType, 6359e86db79SHyon Kim HBA_CALLBACKHANDLE *pCallbackHandle 6369e86db79SHyon Kim ); 6379e86db79SHyon Kim 6389e86db79SHyon Kim HBA_STATUS SMHBA_RegisterForAdapterPhyStatEvents( 6399e86db79SHyon Kim void (*pCallback) ( 6409e86db79SHyon Kim void *pData, 6419e86db79SHyon Kim HBA_WWN portWWN, 6429e86db79SHyon Kim HBA_UINT32 phyIndex, 6439e86db79SHyon Kim HBA_UINT32 eventType), 6449e86db79SHyon Kim void *pUserData, 6459e86db79SHyon Kim HBA_HANDLE handle, 6469e86db79SHyon Kim HBA_WWN portWWN, 6479e86db79SHyon Kim HBA_UINT32 phyIndex, 6489e86db79SHyon Kim SMHBA_PHYSTATISTICS stats, 6499e86db79SHyon Kim HBA_UINT32 statType, 6509e86db79SHyon Kim HBA_CALLBACKHANDLE *pCallbackHandle 6519e86db79SHyon Kim ); 6529e86db79SHyon Kim 6539e86db79SHyon Kim HBA_STATUS SMHBA_RegisterForTargetEvents( 6549e86db79SHyon Kim void (*pCallback) ( 6559e86db79SHyon Kim void *pData, 6569e86db79SHyon Kim HBA_WWN hbaPortWWN, 6579e86db79SHyon Kim HBA_WWN discoveredPortWWN, 6589e86db79SHyon Kim HBA_WWN domainPortWWN, 6599e86db79SHyon Kim HBA_UINT32 eventType), 6609e86db79SHyon Kim void *pUserData, 6619e86db79SHyon Kim HBA_HANDLE handle, 6629e86db79SHyon Kim HBA_WWN hbaPortWWN, 6639e86db79SHyon Kim HBA_WWN discoveredPortWWN, 6649e86db79SHyon Kim HBA_WWN domainPortWWN, 6659e86db79SHyon Kim HBA_CALLBACKHANDLE *pCallbackHandle, 6669e86db79SHyon Kim HBA_UINT32 allTargets 6679e86db79SHyon Kim ); 6689e86db79SHyon Kim 6699e86db79SHyon Kim #ifdef __cplusplus 6709e86db79SHyon Kim } 6719e86db79SHyon Kim #endif 6729e86db79SHyon Kim 6739e86db79SHyon Kim #endif /* _SMHBAAPI_H_ */ 674