11018Srs135747 /* 21018Srs135747 * CDDL HEADER START 31018Srs135747 * 41018Srs135747 * The contents of this file are subject to the terms of the 51018Srs135747 * Common Development and Distribution License (the "License"). 61018Srs135747 * You may not use this file except in compliance with the License. 71018Srs135747 * 81018Srs135747 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 91018Srs135747 * or http://www.opensolaris.org/os/licensing. 101018Srs135747 * See the License for the specific language governing permissions 111018Srs135747 * and limitations under the License. 121018Srs135747 * 131018Srs135747 * When distributing Covered Code, include this CDDL HEADER in each 141018Srs135747 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 151018Srs135747 * If applicable, add the following below this CDDL HEADER, with the 161018Srs135747 * fields enclosed by brackets "[]" replaced with your own identifying 171018Srs135747 * information: Portions Copyright [yyyy] [name of copyright owner] 181018Srs135747 * 191018Srs135747 * CDDL HEADER END 201018Srs135747 */ 21893Srs135747 /* 22*12087SJiri.Svoboda@Sun.COM * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. 23893Srs135747 */ 24893Srs135747 25893Srs135747 #ifndef _SYS_SCSI_ADAPTERS_MPAPI_IMPL_H 26893Srs135747 #define _SYS_SCSI_ADAPTERS_MPAPI_IMPL_H 27893Srs135747 28893Srs135747 #include <sys/sunmdi.h> 29893Srs135747 #include <sys/sunddi.h> 30893Srs135747 #include <sys/mdi_impldefs.h> 31893Srs135747 32893Srs135747 #ifdef __cplusplus 33893Srs135747 extern "C" { 34893Srs135747 #endif 35893Srs135747 36893Srs135747 #if !defined(_BIT_FIELDS_LTOH) && !defined(_BIT_FIELDS_HTOL) 37893Srs135747 #error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined 38893Srs135747 #endif /* _BIT_FIELDS_LTOH */ 39893Srs135747 40893Srs135747 /* 41893Srs135747 * All the structures (except mp_iocdata_t) are 64-bit aligned (padded, 42893Srs135747 * where necessary) to facilitate the use of the same structure for 43893Srs135747 * handling ioctl calls made by both 32-bit and 64-bit applications. 44893Srs135747 * There are no pointers to other structures inside these structures 45893Srs135747 * as copyout to user land may not produce desired result. 46893Srs135747 * The caddr_t structure is kept at the end due to the undeterminstic 47893Srs135747 * size it could accrue to its parent structure. 48893Srs135747 */ 49893Srs135747 50893Srs135747 /* Structure for MP_PLUGIN_PROPERTIES */ 51893Srs135747 52893Srs135747 typedef struct mp_driver_prop { 53893Srs135747 char driverVersion[256]; 54893Srs135747 uint32_t supportedLoadBalanceTypes; 55893Srs135747 boolean_t canSetTPGAccess; 56893Srs135747 boolean_t canOverridePaths; 57893Srs135747 boolean_t exposesPathDeviceFiles; 58893Srs135747 char deviceFileNamespace[256]; 59893Srs135747 uint32_t onlySupportsSpecifiedProducts; 60893Srs135747 uint32_t maximumWeight; 61893Srs135747 uint32_t failbackPollingRateMax; 62893Srs135747 uint32_t currentFailbackPollingRate; 63893Srs135747 uint32_t autoFailbackSupport; 64893Srs135747 uint32_t autoFailbackEnabled; 65893Srs135747 uint32_t defaultLoadBalanceType; 66893Srs135747 uint32_t probingPollingRateMax; 67893Srs135747 uint32_t currentProbingPollingRate; 68893Srs135747 uint32_t autoProbingSupport; 69893Srs135747 uint32_t autoProbingEnabled; 70893Srs135747 uint32_t proprietaryPropSize; 71893Srs135747 caddr_t proprietaryProp; 72893Srs135747 } mp_driver_prop_t; 73893Srs135747 74893Srs135747 75893Srs135747 /* Size of "proprietaryProp" field */ 76893Srs135747 77893Srs135747 #define MP_MAX_PROP_BUF_SIZE 1024 78893Srs135747 79893Srs135747 80893Srs135747 /* Constants for autoFailbackSupport */ 81893Srs135747 82893Srs135747 /* 83893Srs135747 * Both MP_DRVR_AUTO_FAILBACK_SUPPORT and 84893Srs135747 * MP_DRVR_AUTO_FAILBACK_SUPPORT_LU 85893Srs135747 * can be supported at the same time. 86893Srs135747 */ 87893Srs135747 88893Srs135747 #define MP_DRVR_AUTO_FAILBACK_SUPPORT_NONE 0 89893Srs135747 #define MP_DRVR_AUTO_FAILBACK_SUPPORT (1<<0) 90893Srs135747 #define MP_DRVR_AUTO_FAILBACK_SUPPORT_LU (1<<1) 91893Srs135747 92893Srs135747 93893Srs135747 941480Scm136836 /* 951480Scm136836 * Declaration of the MP_LOAD_BALANCE_TYPE constants - should be 961480Scm136836 * the same defines as in mpapi.h 971480Scm136836 */ 981480Scm136836 #define MP_DRVR_LOAD_BALANCE_TYPE_NONE 0 991480Scm136836 #define MP_DRVR_LOAD_BALANCE_TYPE_UNKNOWN (1<<0) 1001480Scm136836 #define MP_DRVR_LOAD_BALANCE_TYPE_ROUNDROBIN (1<<1) 1011480Scm136836 #define MP_DRVR_LOAD_BALANCE_TYPE_LEASTBLOCKS (1<<2) 1021480Scm136836 #define MP_DRVR_LOAD_BALANCE_TYPE_LEASTIO (1<<3) 1031480Scm136836 #define MP_DRVR_LOAD_BALANCE_TYPE_DEVICE_PRODUCT (1<<4) 1041480Scm136836 #define MP_DRVR_LOAD_BALANCE_TYPE_LBA_REGION (1<<5) 1051480Scm136836 #define MP_DRVR_LOAD_BALANCE_TYPE_FAILOVER_ONLY (1<<6) 1061480Scm136836 /* 1071480Scm136836 * Proprietary load balance type should start from 0x10000(1<<16) or greater. 1081480Scm136836 * It is exposed through API MP_GetProprietaryLoadBalanceProperties if exists. 1091480Scm136836 */ 110893Srs135747 #define MP_DRVR_LOAD_BALANCE_TYPE_PROPRIETARY1 (1<<16) 111893Srs135747 #define MP_DRVR_LOAD_BALANCE_TYPE_PROPRIETARY2 (1<<17) 112893Srs135747 113893Srs135747 /* Constants for autoProbingSupport */ 114893Srs135747 115893Srs135747 /* 116893Srs135747 * Both MP_DRVR_AUTO_PROBING_SUPPORT and 117893Srs135747 * MP_DRVR_AUTO_PROBING_SUPPORT_LU 118893Srs135747 * can be supported at the same time. 119893Srs135747 */ 120893Srs135747 121893Srs135747 #define MP_DRVR_AUTO_PROBING_SUPPORT_NONE 0 122893Srs135747 #define MP_DRVR_AUTO_PROBING_SUPPORT (1<<0) 123893Srs135747 #define MP_DRVR_AUTO_PROBING_SUPPORT_LU (1<<1) 124893Srs135747 125893Srs135747 126893Srs135747 /* Structures for MP_DEVICE_PRODUCT_PROPERTIES */ 127893Srs135747 128893Srs135747 typedef struct mp_vendor_prod_info { 129893Srs135747 char vendor[8]; 130893Srs135747 char product[16]; 131893Srs135747 char revision[4]; 132893Srs135747 char reserved[4]; /* padding for 64bit alignment */ 133893Srs135747 } mp_vendor_prod_info_t; 134893Srs135747 135893Srs135747 typedef struct mp_dev_prod_prop { 136893Srs135747 struct mp_vendor_prod_info prodInfo; 137893Srs135747 uint32_t supportedLoadBalanceTypes; 138893Srs135747 uint32_t reserved; /* 64bit alignment padding */ 139893Srs135747 uint64_t id; 140893Srs135747 } mp_dev_prod_prop_t; 141893Srs135747 142893Srs135747 143893Srs135747 /* Structure for MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES */ 144893Srs135747 145893Srs135747 typedef struct mp_logical_unit_prop { 146893Srs135747 struct mp_vendor_prod_info prodInfo; 147893Srs135747 char name[256]; /* guid */ 148893Srs135747 uint32_t nameType; 149893Srs135747 uint32_t luGroupID; 150893Srs135747 char deviceFileName[256]; 151893Srs135747 uint64_t id; 152893Srs135747 boolean_t asymmetric; 153893Srs135747 uint32_t currentLoadBalanceType; 154893Srs135747 boolean_t autoFailbackEnabled; 155893Srs135747 uint32_t failbackPollingRateMax; 156893Srs135747 uint32_t currentFailBackPollingRate; 157893Srs135747 uint32_t autoProbingEnabled; 158893Srs135747 uint32_t probingPollingRateMax; 159893Srs135747 uint32_t currentProbingPollingRate; 160893Srs135747 uint64_t overridePathID; 161893Srs135747 boolean_t overridePathInUse; 162893Srs135747 uint32_t proprietaryPropSize; 163893Srs135747 caddr_t proprietaryProp; 164893Srs135747 } mp_logical_unit_prop_t; 165893Srs135747 166893Srs135747 167893Srs135747 /* Constants for nameType */ 168893Srs135747 169893Srs135747 #define MP_DRVR_NAME_TYPE_UNKNOWN 0 170893Srs135747 #define MP_DRVR_NAME_TYPE_VPD83_TYPE1 1 171893Srs135747 #define MP_DRVR_NAME_TYPE_VPD83_TYPE2 2 172893Srs135747 #define MP_DRVR_NAME_TYPE_VPD83_TYPE3 3 173893Srs135747 #define MP_DRVR_NAME_TYPE_DEVICE_SPECIFIC 4 174893Srs135747 175893Srs135747 176893Srs135747 /* Structure for MP_INITIATOR_PORT_PROPERTIES */ 177893Srs135747 178893Srs135747 typedef struct mp_init_port_prop { 179893Srs135747 char portID[256]; 180893Srs135747 char osDeviceFile[256]; 181893Srs135747 uint32_t portType; 182893Srs135747 uint32_t reserved; /* padding for 64bit alignment */ 183893Srs135747 uint64_t id; 184893Srs135747 } mp_init_port_prop_t; 185893Srs135747 186893Srs135747 187893Srs135747 /* Constants for portType */ 188893Srs135747 189893Srs135747 #define MP_DRVR_TRANSPORT_TYPE_UNKNOWN 0 190893Srs135747 #define MP_DRVR_TRANSPORT_TYPE_FC 2 191893Srs135747 #define MP_DRVR_TRANSPORT_TYPE_SPI 3 192893Srs135747 #define MP_DRVR_TRANSPORT_TYPE_ISCSI 4 193893Srs135747 #define MP_DRVR_TRANSPORT_TYPE_IFB 5 194893Srs135747 195893Srs135747 196893Srs135747 /* Structure for MP_TARGET_PORT_PROPERTIES */ 197893Srs135747 198893Srs135747 typedef struct mp_target_port_prop { 199893Srs135747 char portName[256]; 200893Srs135747 uint32_t relativePortID; 201893Srs135747 uint32_t reserved; /* padding for 64bit alignment */ 202893Srs135747 uint64_t id; 203893Srs135747 } mp_target_port_prop_t; 204893Srs135747 205893Srs135747 206893Srs135747 /* Structure for MP_TARGET_PORT_GROUP_PROPERTIES */ 207893Srs135747 208893Srs135747 typedef struct mp_tpg_prop { 209893Srs135747 uint32_t accessState; 210893Srs135747 boolean_t explicitFailover; 211893Srs135747 uint32_t tpgId; /* T10 defined id in report/set TPG */ 212893Srs135747 boolean_t preferredLuPath; 213893Srs135747 boolean_t supportsLuAssignment; 214893Srs135747 uint32_t reserved; /* padding for 64bit alignment */ 215893Srs135747 uint64_t id; 216893Srs135747 } mp_tpg_prop_t; 217893Srs135747 218893Srs135747 219893Srs135747 /* Constants for accessState */ 220893Srs135747 221893Srs135747 #define MP_DRVR_ACCESS_STATE_ACTIVE_OPTIMIZED 0 222893Srs135747 #define MP_DRVR_ACCESS_STATE_ACTIVE_NONOPTIMIZED 0x1 223893Srs135747 #define MP_DRVR_ACCESS_STATE_STANDBY 0x2 224893Srs135747 #define MP_DRVR_ACCESS_STATE_UNAVAILABLE 0x3 225893Srs135747 #define MP_DRVR_ACCESS_STATE_TRANSITIONING 0xf 226893Srs135747 #define MP_DRVR_ACCESS_STATE_ACTIVE 0x10 227893Srs135747 228893Srs135747 229893Srs135747 /* Structure for MP_PATH_LOGICAL_UNIT_PROPERTIES */ 230893Srs135747 231893Srs135747 typedef struct mp_path_prop { 232893Srs135747 uint32_t weight; 233893Srs135747 uint32_t pathState; 234893Srs135747 boolean_t disabled; 235893Srs135747 uint32_t reserved; /* 64bit alignment padding */ 236893Srs135747 uint64_t id; 237893Srs135747 struct mp_init_port_prop initPort; 238893Srs135747 struct mp_target_port_prop targetPort; 239893Srs135747 struct mp_logical_unit_prop logicalUnit; 240893Srs135747 } mp_path_prop_t; 241893Srs135747 242893Srs135747 243893Srs135747 /* Constants for pathState */ 244893Srs135747 245893Srs135747 #define MP_DRVR_PATH_STATE_ACTIVE 0 246893Srs135747 #define MP_DRVR_PATH_STATE_PASSIVE 1 247893Srs135747 #define MP_DRVR_PATH_STATE_PATH_ERR 2 248893Srs135747 #define MP_DRVR_PATH_STATE_LU_ERR 3 249893Srs135747 #define MP_DRVR_PATH_STATE_RESERVED 4 250893Srs135747 #define MP_DRVR_PATH_STATE_REMOVED 5 251893Srs135747 #define MP_DRVR_PATH_STATE_TRANSITIONING 6 252893Srs135747 #define MP_DRVR_PATH_STATE_UNKNOWN 7 25310696SDavid.Hollister@Sun.COM #define MP_DRVR_PATH_STATE_UNINIT 8 254893Srs135747 255893Srs135747 256893Srs135747 /* Structure for MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES */ 257893Srs135747 258893Srs135747 typedef struct mp_proprietary_loadbalance_prop { 259893Srs135747 char name[256]; 260893Srs135747 char vendorName[256]; 261893Srs135747 uint64_t id; 262893Srs135747 uint32_t typeIndex; 263893Srs135747 uint32_t proprietaryPropSize; 264893Srs135747 caddr_t proprietaryProp; 265893Srs135747 } mp_proprietary_loadbalance_prop_t; 266893Srs135747 267893Srs135747 268893Srs135747 /* 269893Srs135747 * Structure used as input to 270893Srs135747 * MP_ASSIGN_LU_TO_TPG subcmd. 271893Srs135747 */ 272893Srs135747 273893Srs135747 typedef struct mp_lu_tpg_pair { 274893Srs135747 uint64_t luId; 275893Srs135747 uint64_t tpgId; 276893Srs135747 } mp_lu_tpg_pair_t; 277893Srs135747 2783410Scm136836 /* used for uscsi commmands */ 2793410Scm136836 typedef struct mp_uscsi_cmd { 2803410Scm136836 struct scsi_address *ap; /* address of the path */ 2813410Scm136836 struct uscsi_cmd *uscmdp; /* uscsi command */ 2823410Scm136836 struct buf *cmdbp; /* original buffer */ 2833410Scm136836 struct buf *rqbp; /* auto-rqsense packet */ 2843410Scm136836 mdi_pathinfo_t *pip; /* path information */ 2853410Scm136836 int arq_enabled; /* auto-rqsense enable flag */ 2863410Scm136836 }mp_uscsi_cmd_t; 287893Srs135747 288893Srs135747 /* 289893Srs135747 * Structure used as input to 290893Srs135747 * MP_SET_TPG_ACCESS_STATE subcmd. 291893Srs135747 */ 292893Srs135747 293893Srs135747 typedef struct mp_set_tpg_state_req { 294893Srs135747 struct mp_lu_tpg_pair luTpgPair; 295893Srs135747 uint32_t desiredState; 296893Srs135747 uint32_t reserved; /* padding for 64bit boundary */ 297893Srs135747 } mp_set_tpg_state_req_t; 298893Srs135747 299893Srs135747 300893Srs135747 /* 301893Srs135747 * Structure for ioctl data 302893Srs135747 */ 303893Srs135747 typedef struct mp_iocdata { 304893Srs135747 uint16_t mp_xfer; /* direction */ 305893Srs135747 uint16_t mp_cmd; /* sub command */ 306893Srs135747 uint16_t mp_flags; /* flags */ 307893Srs135747 uint16_t mp_cmd_flags; /* command specific flags */ 308893Srs135747 size_t mp_ilen; /* Input buffer length */ 309893Srs135747 caddr_t mp_ibuf; /* Input buffer */ 310893Srs135747 size_t mp_olen; /* Output buffer length */ 311893Srs135747 caddr_t mp_obuf; /* Output buffer */ 312893Srs135747 size_t mp_alen; /* Auxiliary buffer length */ 313893Srs135747 caddr_t mp_abuf; /* Auxiliary buffer */ 314893Srs135747 int mp_errno; /* MPAPI driver internal error code */ 315893Srs135747 } mp_iocdata_t; 316893Srs135747 317893Srs135747 318893Srs135747 #ifdef _KERNEL 319893Srs135747 320893Srs135747 #if defined(_SYSCALL32) 321893Srs135747 322893Srs135747 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 323893Srs135747 #pragma pack(4) 324893Srs135747 #endif 325893Srs135747 326893Srs135747 /* 327893Srs135747 * Structure for 32-bit ioctl data 328893Srs135747 */ 329893Srs135747 330893Srs135747 typedef struct mp_iocdata32 { 331893Srs135747 uint16_t mp_xfer; /* direction */ 332893Srs135747 uint16_t mp_cmd; /* sub command */ 333893Srs135747 uint16_t mp_flags; /* flags */ 334893Srs135747 uint16_t mp_cmd_flags; /* command specific flags */ 335893Srs135747 uint32_t mp_ilen; /* Input buffer length */ 336893Srs135747 caddr32_t mp_ibuf; /* Input buffer */ 337893Srs135747 uint32_t mp_olen; /* Output buffer length */ 338893Srs135747 caddr32_t mp_obuf; /* Output buffer */ 339893Srs135747 uint32_t mp_alen; /* Auxiliary buffer length */ 340893Srs135747 caddr32_t mp_abuf; /* Auxiliary buffer */ 341893Srs135747 int32_t mp_errno; /* MPAPI driver internal error code */ 342893Srs135747 } mp_iocdata32_t; 343893Srs135747 344893Srs135747 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 345893Srs135747 #pragma pack() 346893Srs135747 #endif 347893Srs135747 348893Srs135747 #endif /* _SYSCALL32 */ 349893Srs135747 350893Srs135747 #endif /* _KERNEL */ 351893Srs135747 352893Srs135747 353893Srs135747 /* Constants for MP_XFER */ 354893Srs135747 355893Srs135747 #define MP_XFER_NONE 0x00 356893Srs135747 #define MP_XFER_READ 0x01 357893Srs135747 #define MP_XFER_WRITE 0x02 358893Srs135747 #define MP_XFER_RW (MP_XFER_READ | MP_XFER_WRITE) 359893Srs135747 360893Srs135747 361893Srs135747 /* Constants for MP_OBJECT_TYPE */ 362893Srs135747 363893Srs135747 #define MP_OBJECT_TYPE_UNKNOWN 0 364893Srs135747 #define MP_OBJECT_TYPE_PLUGIN 1 365893Srs135747 #define MP_OBJECT_TYPE_INITIATOR_PORT 2 366893Srs135747 #define MP_OBJECT_TYPE_TARGET_PORT 3 367893Srs135747 #define MP_OBJECT_TYPE_MULTIPATH_LU 4 368893Srs135747 #define MP_OBJECT_TYPE_PATH_LU 5 369893Srs135747 #define MP_OBJECT_TYPE_DEVICE_PRODUCT 6 370893Srs135747 #define MP_OBJECT_TYPE_TARGET_PORT_GROUP 7 371893Srs135747 #define MP_OBJECT_TYPE_PROPRIETARY_LOAD_BALANCE 8 372893Srs135747 #define MP_OBJECT_TYPE_LAST_ENTRY MP_OBJECT_TYPE_PROPRIETARY_LOAD_BALANCE 373893Srs135747 #define MP_MAX_OBJECT_TYPE (MP_OBJECT_TYPE_LAST_ENTRY + 1) 374893Srs135747 375893Srs135747 376893Srs135747 /* Constants for MP_CMD */ 377893Srs135747 378893Srs135747 #define MPAPI_CTL ('m'<<8) 379893Srs135747 #define MP_CMD (MPAPI_CTL | 2005) 380893Srs135747 #define MP_SUB_CMD ('M'<<8) 381893Srs135747 382893Srs135747 #define MP_API_SUBCMD_MIN (MP_SUB_CMD + 0x01) 383893Srs135747 #define MP_GET_DRIVER_PROP (MP_SUB_CMD + 0x01) 384893Srs135747 #define MP_GET_DEV_PROD_LIST (MP_SUB_CMD + 0x02) 385893Srs135747 #define MP_GET_DEV_PROD_PROP (MP_SUB_CMD + 0x03) 386893Srs135747 #define MP_GET_LU_LIST (MP_SUB_CMD + 0x04) 387893Srs135747 #define MP_GET_LU_LIST_FROM_TPG (MP_SUB_CMD + 0x05) 388893Srs135747 #define MP_GET_LU_PROP (MP_SUB_CMD + 0x06) 389893Srs135747 #define MP_GET_PATH_LIST_FOR_MP_LU (MP_SUB_CMD + 0x07) 390893Srs135747 #define MP_GET_PATH_LIST_FOR_INIT_PORT (MP_SUB_CMD + 0x08) 391893Srs135747 #define MP_GET_PATH_LIST_FOR_TARGET_PORT (MP_SUB_CMD + 0x09) 392893Srs135747 #define MP_GET_PATH_PROP (MP_SUB_CMD + 0x0a) 393893Srs135747 #define MP_GET_INIT_PORT_LIST (MP_SUB_CMD + 0x0b) 394893Srs135747 #define MP_GET_INIT_PORT_PROP (MP_SUB_CMD + 0x0c) 395893Srs135747 #define MP_GET_TARGET_PORT_PROP (MP_SUB_CMD + 0x0d) 396893Srs135747 #define MP_GET_TPG_LIST (MP_SUB_CMD + 0x0e) 397893Srs135747 #define MP_GET_TPG_PROP (MP_SUB_CMD + 0x0f) 398893Srs135747 #define MP_GET_TPG_LIST_FOR_LU (MP_SUB_CMD + 0x10) 399893Srs135747 #define MP_GET_TARGET_PORT_LIST_FOR_TPG (MP_SUB_CMD + 0x11) 400893Srs135747 #define MP_SET_TPG_ACCESS_STATE (MP_SUB_CMD + 0x12) 401893Srs135747 #define MP_ENABLE_AUTO_FAILBACK (MP_SUB_CMD + 0x13) 402893Srs135747 #define MP_DISABLE_AUTO_FAILBACK (MP_SUB_CMD + 0x14) 403893Srs135747 #define MP_ENABLE_PATH (MP_SUB_CMD + 0x15) 404893Srs135747 #define MP_DISABLE_PATH (MP_SUB_CMD + 0x16) 405893Srs135747 #define MP_GET_PROPRIETARY_LOADBALANCE_LIST (MP_SUB_CMD + 0x17) 406893Srs135747 #define MP_GET_PROPRIETARY_LOADBALANCE_PROP (MP_SUB_CMD + 0x18) 407893Srs135747 #define MP_ASSIGN_LU_TO_TPG (MP_SUB_CMD + 0x19) 4083410Scm136836 #define MP_SEND_SCSI_CMD (MP_SUB_CMD + 0x1a) 4093410Scm136836 #define MP_API_SUBCMD_MAX (MP_SEND_SCSI_CMD) 410893Srs135747 411893Srs135747 412893Srs135747 /* 413893Srs135747 * Typical MP API ioctl interface specific Return Values 414893Srs135747 */ 415893Srs135747 416893Srs135747 #define MP_IOCTL_ERROR_START 0x5533 417893Srs135747 #define MP_MORE_DATA (MP_IOCTL_ERROR_START + 1) 418893Srs135747 #define MP_DRVR_INVALID_ID (MP_IOCTL_ERROR_START + 2) 419893Srs135747 #define MP_DRVR_ID_OBSOLETE (MP_IOCTL_ERROR_START + 3) 420893Srs135747 #define MP_DRVR_ACCESS_SYMMETRIC (MP_IOCTL_ERROR_START + 4) 421893Srs135747 #define MP_DRVR_PATH_UNAVAILABLE (MP_IOCTL_ERROR_START + 5) 422893Srs135747 #define MP_DRVR_IDS_NOT_ASSOCIATED (MP_IOCTL_ERROR_START + 6) 423893Srs135747 #define MP_DRVR_ILLEGAL_ACCESS_STATE_REQUEST (MP_IOCTL_ERROR_START + 7) 4243410Scm136836 #define MP_DRVR_IO_ERROR (MP_IOCTL_ERROR_START + 8) 425893Srs135747 426893Srs135747 /* 427893Srs135747 * Macros for OID operations 428893Srs135747 */ 429893Srs135747 #define MP_ID_SHIFT4MAJOR 32 430893Srs135747 #define MP_GET_MAJOR_FROM_ID(id) ((id) >> MP_ID_SHIFT4MAJOR) 431893Srs135747 #define MP_GET_INST_FROM_ID(id) ((id) & 0x00000000ffffffff) 432893Srs135747 #define MP_STORE_INST_TO_ID(inst, id) (((uint64_t)(inst)) | id) 433893Srs135747 #define MP_STORE_MAJOR_TO_ID(major, id) \ 434893Srs135747 ((((uint64_t)(major)) << MP_ID_SHIFT4MAJOR) | id) 435893Srs135747 436893Srs135747 /* 437893Srs135747 * Event Class and Sub-Class definitions 438893Srs135747 */ 439893Srs135747 #define EC_SUN_MP "EC_sun_mp" 440893Srs135747 441*12087SJiri.Svoboda@Sun.COM #define ESC_SUN_MP_PLUGIN_CHANGE "ESC_sun_mp_plugin_change" 442*12087SJiri.Svoboda@Sun.COM 443893Srs135747 #define ESC_SUN_MP_LU_CHANGE "ESC_sun_mp_lu_change" 444*12087SJiri.Svoboda@Sun.COM #define ESC_SUN_MP_LU_ADD "ESC_sun_mp_lu_add" 445*12087SJiri.Svoboda@Sun.COM #define ESC_SUN_MP_LU_REMOVE "ESC_sun_mp_lu_remove" 446893Srs135747 447893Srs135747 #define ESC_SUN_MP_PATH_CHANGE "ESC_sun_mp_path_change" 448893Srs135747 #define ESC_SUN_MP_PATH_ADD "ESC_sun_mp_path_add" 449893Srs135747 #define ESC_SUN_MP_PATH_REMOVE "ESC_sun_mp_path_remove" 450893Srs135747 451893Srs135747 #define ESC_SUN_MP_INIT_PORT_CHANGE "ESC_sun_mp_init_port_change" 452893Srs135747 453893Srs135747 #define ESC_SUN_MP_TPG_CHANGE "ESC_sun_mp_tpg_change" 454893Srs135747 #define ESC_SUN_MP_TPG_ADD "ESC_sun_mp_tpg_add" 455893Srs135747 #define ESC_SUN_MP_TPG_REMOVE "ESC_sun_mp_tpg_remove" 456893Srs135747 457893Srs135747 #define ESC_SUN_MP_TARGET_PORT_CHANGE "ESC_sun_mp_target_port_change" 458893Srs135747 #define ESC_SUN_MP_TARGET_PORT_ADD "ESC_sun_mp_target_port_add" 459893Srs135747 #define ESC_SUN_MP_TARGET_PORT_REMOVE "ESC_sun_mp_target_port_remove" 460893Srs135747 461893Srs135747 #define ESC_SUN_MP_DEV_PROD_CHANGE "ESC_sun_mp_dev_prod_change" 462893Srs135747 #define ESC_SUN_MP_DEV_PROD_ADD "ESC_sun_mp_dev_prod_add" 463893Srs135747 #define ESC_SUN_MP_DEV_PROD_REMOVE "ESC_sun_mp_dev_prod_remove" 464893Srs135747 465893Srs135747 #ifdef __cplusplus 466893Srs135747 } 467893Srs135747 #endif 468893Srs135747 469893Srs135747 #endif /* _SYS_SCSI_ADAPTERS_MPAPI_IMPL_H */ 470