xref: /illumos-gate/usr/src/cmd/sasinfo/sasinfo.h (revision 9e86db79)
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