summaryrefslogtreecommitdiff
path: root/usr/src/cmd/sasinfo/sasinfo.h
blob: af803584aac07e0a6eea1ca9b02d3848c6052a14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _SASINFO_H
#define	_SASINFO_H

#ifdef	__cplusplus
extern "C" {
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libintl.h>
#include <smhbaapi.h>
#include <sys/types.h>
#include <sys/scsi/scsi.h>
#include <inttypes.h>
#include <cmdparse.h>
#include <netinet/in.h>
#include <inttypes.h>
#include <locale.h>

#ifdef _BIG_ENDIAN
#define	htonll(x)   (x)
#define	ntohll(x)   (x)
#else
#define	htonll(x)   ((((unsigned long long)htonl(x)) << 32) + htonl(x >> 32))
#define	ntohll(x)   ((((unsigned long long)ntohl(x)) << 32) + ntohl(x >> 32))
#endif

/* DEFINES */
#define	DEFAULT_LUN_COUNT	1024
#define	LUN_SIZE		8
#define	LUN_HEADER_SIZE		8
#define	LUN_LENGTH		LUN_SIZE + LUN_HEADER_SIZE
#define	DEFAULT_LUN_LENGTH	DEFAULT_LUN_COUNT  * \
				LUN_SIZE	   + \
				LUN_HEADER_SIZE

/* flags that are needed to be passed into porcessHBA */
#define	PRINT_VERBOSE		0x00000001
#define	PRINT_PHY		0x00000002 /* print phy addresses */
#define	PRINT_PHY_LINKSTAT	0x00000004 /* print phy link statistics */
#define	PRINT_TARGET_PORT	0x00000008 /* print target os deivce info */
#define	PRINT_CHILD		0x00000010 /* print descendant nodes */
#define	PRINT_TARGET_SCSI	0x00000020 /* print descendant nodes */

#define	HBA_MAX_RETRIES		20

typedef struct _tgtPortWWNList {
	HBA_WWN portWWN;
	HBA_UINT32	scsiOSLun;
	struct _tgtPortWWNList *next;
} tgtPortWWNList;

typedef struct _portList {
	char		portName[MAXPATHLEN];
	tgtPortWWNList	*tgtPortWWN;
	struct _portList	*next;
} portList;

/* Discovered LU structure */
typedef struct _discoveredDevice {
	boolean_t	inquiryFailed;
	char 		OSDeviceName[MAXPATHLEN];
	portList	*HBAPortList;
	char		VID[8];
	char		PID[16];
	uchar_t		dType;
	struct _discoveredDevice *next;
} discoveredDevice;

typedef struct targetPortMappingData {
	boolean_t	mappingExist;
	boolean_t	inquiryFailed;
	HBA_UINT32	osLUN;
	SMHBA_SCSILUN	reportLUN;
	char		osDeviceName[256];
	uchar_t		inq_vid[8];
	uchar_t		inq_pid[16];
	uchar_t		inq_dtype;
	struct targetPortMappingData   *next;
} targetPortMappingData_t;

typedef struct targetPortConfig {
	char 		hbaPortName[256];
	HBA_WWN		expanderSASAddr;
	int 		expanderValid;
	boolean_t   	reportLUNsFailed;
	struct 		targetPortMappingData    *map;
	struct 		targetPortConfig    *next;
} targetPortConfig_t;

typedef struct targetPortList {
	SMHBA_PORTATTRIBUTES	targetattr;
	SMHBA_SAS_PORT		sasattr;
	struct targetPortConfig *configEntry;
	struct targetPortList	*next;
} targetPortList_t;

int sas_util_list_hba(int hbaCount, char **hba_argv, cmdOptions_t *options);
int sas_util_list_hbaport(int wwnCount, char **wwn_argv, cmdOptions_t *options);
int sas_util_list_expander(int wwnCount, char **wwn_argv,
    cmdOptions_t *options);
int sas_util_list_targetport(int tpCount, char **tpArgv, cmdOptions_t *options);
int sas_util_list_remoteport(int wwnCount, char **wwn_argv,
    cmdOptions_t *options);
int
sas_util_list_logicalunit(int luCount, char **luArgv, cmdOptions_t *options);

#ifdef	__cplusplus
}
#endif

#endif /* _SASINFO_H */