1*9e86db79SHyon Kim /* 2*9e86db79SHyon Kim * CDDL HEADER START 3*9e86db79SHyon Kim * 4*9e86db79SHyon Kim * The contents of this file are subject to the terms of the 5*9e86db79SHyon Kim * Common Development and Distribution License (the "License"). 6*9e86db79SHyon Kim * You may not use this file except in compliance with the License. 7*9e86db79SHyon Kim * 8*9e86db79SHyon Kim * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*9e86db79SHyon Kim * or http://www.opensolaris.org/os/licensing. 10*9e86db79SHyon Kim * See the License for the specific language governing permissions 11*9e86db79SHyon Kim * and limitations under the License. 12*9e86db79SHyon Kim * 13*9e86db79SHyon Kim * When distributing Covered Code, include this CDDL HEADER in each 14*9e86db79SHyon Kim * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*9e86db79SHyon Kim * If applicable, add the following below this CDDL HEADER, with the 16*9e86db79SHyon Kim * fields enclosed by brackets "[]" replaced with your own identifying 17*9e86db79SHyon Kim * information: Portions Copyright [yyyy] [name of copyright owner] 18*9e86db79SHyon Kim * 19*9e86db79SHyon Kim * CDDL HEADER END 20*9e86db79SHyon Kim */ 21*9e86db79SHyon Kim /* 22*9e86db79SHyon Kim * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23*9e86db79SHyon Kim * Use is subject to license terms. 24*9e86db79SHyon Kim */ 25*9e86db79SHyon Kim 26*9e86db79SHyon Kim #ifndef _SASINFO_H 27*9e86db79SHyon Kim #define _SASINFO_H 28*9e86db79SHyon Kim 29*9e86db79SHyon Kim #ifdef __cplusplus 30*9e86db79SHyon Kim extern "C" { 31*9e86db79SHyon Kim #endif 32*9e86db79SHyon Kim 33*9e86db79SHyon Kim #include <stdio.h> 34*9e86db79SHyon Kim #include <stdlib.h> 35*9e86db79SHyon Kim #include <string.h> 36*9e86db79SHyon Kim #include <libintl.h> 37*9e86db79SHyon Kim #include <smhbaapi.h> 38*9e86db79SHyon Kim #include <sys/types.h> 39*9e86db79SHyon Kim #include <sys/scsi/scsi.h> 40*9e86db79SHyon Kim #include <inttypes.h> 41*9e86db79SHyon Kim #include <cmdparse.h> 42*9e86db79SHyon Kim #include <netinet/in.h> 43*9e86db79SHyon Kim #include <inttypes.h> 44*9e86db79SHyon Kim #include <locale.h> 45*9e86db79SHyon Kim 46*9e86db79SHyon Kim #ifdef _BIG_ENDIAN 47*9e86db79SHyon Kim #define htonll(x) (x) 48*9e86db79SHyon Kim #define ntohll(x) (x) 49*9e86db79SHyon Kim #else 50*9e86db79SHyon Kim #define htonll(x) ((((unsigned long long)htonl(x)) << 32) + htonl(x >> 32)) 51*9e86db79SHyon Kim #define ntohll(x) ((((unsigned long long)ntohl(x)) << 32) + ntohl(x >> 32)) 52*9e86db79SHyon Kim #endif 53*9e86db79SHyon Kim 54*9e86db79SHyon Kim /* DEFINES */ 55*9e86db79SHyon Kim #define DEFAULT_LUN_COUNT 1024 56*9e86db79SHyon Kim #define LUN_SIZE 8 57*9e86db79SHyon Kim #define LUN_HEADER_SIZE 8 58*9e86db79SHyon Kim #define LUN_LENGTH LUN_SIZE + LUN_HEADER_SIZE 59*9e86db79SHyon Kim #define DEFAULT_LUN_LENGTH DEFAULT_LUN_COUNT * \ 60*9e86db79SHyon Kim LUN_SIZE + \ 61*9e86db79SHyon Kim LUN_HEADER_SIZE 62*9e86db79SHyon Kim 63*9e86db79SHyon Kim /* flags that are needed to be passed into porcessHBA */ 64*9e86db79SHyon Kim #define PRINT_VERBOSE 0x00000001 65*9e86db79SHyon Kim #define PRINT_PHY 0x00000002 /* print phy addresses */ 66*9e86db79SHyon Kim #define PRINT_PHY_LINKSTAT 0x00000004 /* print phy link statistics */ 67*9e86db79SHyon Kim #define PRINT_TARGET_PORT 0x00000008 /* print target os deivce info */ 68*9e86db79SHyon Kim #define PRINT_CHILD 0x00000010 /* print descendant nodes */ 69*9e86db79SHyon Kim #define PRINT_TARGET_SCSI 0x00000020 /* print descendant nodes */ 70*9e86db79SHyon Kim 71*9e86db79SHyon Kim #define HBA_MAX_RETRIES 20 72*9e86db79SHyon Kim 73*9e86db79SHyon Kim typedef struct _tgtPortWWNList { 74*9e86db79SHyon Kim HBA_WWN portWWN; 75*9e86db79SHyon Kim HBA_UINT32 scsiOSLun; 76*9e86db79SHyon Kim struct _tgtPortWWNList *next; 77*9e86db79SHyon Kim } tgtPortWWNList; 78*9e86db79SHyon Kim 79*9e86db79SHyon Kim typedef struct _portList { 80*9e86db79SHyon Kim char portName[MAXPATHLEN]; 81*9e86db79SHyon Kim tgtPortWWNList *tgtPortWWN; 82*9e86db79SHyon Kim struct _portList *next; 83*9e86db79SHyon Kim } portList; 84*9e86db79SHyon Kim 85*9e86db79SHyon Kim /* Discovered LU structure */ 86*9e86db79SHyon Kim typedef struct _discoveredDevice { 87*9e86db79SHyon Kim boolean_t inquiryFailed; 88*9e86db79SHyon Kim char OSDeviceName[MAXPATHLEN]; 89*9e86db79SHyon Kim portList *HBAPortList; 90*9e86db79SHyon Kim char VID[8]; 91*9e86db79SHyon Kim char PID[16]; 92*9e86db79SHyon Kim uchar_t dType; 93*9e86db79SHyon Kim struct _discoveredDevice *next; 94*9e86db79SHyon Kim } discoveredDevice; 95*9e86db79SHyon Kim 96*9e86db79SHyon Kim typedef struct targetPortMappingData { 97*9e86db79SHyon Kim boolean_t mappingExist; 98*9e86db79SHyon Kim boolean_t inquiryFailed; 99*9e86db79SHyon Kim HBA_UINT32 osLUN; 100*9e86db79SHyon Kim SMHBA_SCSILUN reportLUN; 101*9e86db79SHyon Kim char osDeviceName[256]; 102*9e86db79SHyon Kim uchar_t inq_vid[8]; 103*9e86db79SHyon Kim uchar_t inq_pid[16]; 104*9e86db79SHyon Kim uchar_t inq_dtype; 105*9e86db79SHyon Kim struct targetPortMappingData *next; 106*9e86db79SHyon Kim } targetPortMappingData_t; 107*9e86db79SHyon Kim 108*9e86db79SHyon Kim typedef struct targetPortConfig { 109*9e86db79SHyon Kim char hbaPortName[256]; 110*9e86db79SHyon Kim HBA_WWN expanderSASAddr; 111*9e86db79SHyon Kim int expanderValid; 112*9e86db79SHyon Kim boolean_t reportLUNsFailed; 113*9e86db79SHyon Kim struct targetPortMappingData *map; 114*9e86db79SHyon Kim struct targetPortConfig *next; 115*9e86db79SHyon Kim } targetPortConfig_t; 116*9e86db79SHyon Kim 117*9e86db79SHyon Kim typedef struct targetPortList { 118*9e86db79SHyon Kim SMHBA_PORTATTRIBUTES targetattr; 119*9e86db79SHyon Kim SMHBA_SAS_PORT sasattr; 120*9e86db79SHyon Kim struct targetPortConfig *configEntry; 121*9e86db79SHyon Kim struct targetPortList *next; 122*9e86db79SHyon Kim } targetPortList_t; 123*9e86db79SHyon Kim 124*9e86db79SHyon Kim int sas_util_list_hba(int hbaCount, char **hba_argv, cmdOptions_t *options); 125*9e86db79SHyon Kim int sas_util_list_hbaport(int wwnCount, char **wwn_argv, cmdOptions_t *options); 126*9e86db79SHyon Kim int sas_util_list_expander(int wwnCount, char **wwn_argv, 127*9e86db79SHyon Kim cmdOptions_t *options); 128*9e86db79SHyon Kim int sas_util_list_targetport(int tpCount, char **tpArgv, cmdOptions_t *options); 129*9e86db79SHyon Kim int sas_util_list_remoteport(int wwnCount, char **wwn_argv, 130*9e86db79SHyon Kim cmdOptions_t *options); 131*9e86db79SHyon Kim int 132*9e86db79SHyon Kim sas_util_list_logicalunit(int luCount, char **luArgv, cmdOptions_t *options); 133*9e86db79SHyon Kim 134*9e86db79SHyon Kim #ifdef __cplusplus 135*9e86db79SHyon Kim } 136*9e86db79SHyon Kim #endif 137*9e86db79SHyon Kim 138*9e86db79SHyon Kim #endif /* _SASINFO_H */ 139