17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5d1a5c838SRamaswamy Tummala  * Common Development and Distribution License (the "License").
6d1a5c838SRamaswamy Tummala  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
22d1a5c838SRamaswamy Tummala  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate #ifndef _SYS_IB_IBNEX_IBNEX_DEVCTL_H
277c478bd9Sstevel@tonic-gate #define	_SYS_IB_IBNEX_IBNEX_DEVCTL_H
287c478bd9Sstevel@tonic-gate 
29d1a5c838SRamaswamy Tummala #include <sys/ib/ib_types.h>
30d1a5c838SRamaswamy Tummala #include <sys/ib/ibtl/ibtl_types.h>
317c478bd9Sstevel@tonic-gate 
327c478bd9Sstevel@tonic-gate #ifdef __cplusplus
337c478bd9Sstevel@tonic-gate extern "C" {
347c478bd9Sstevel@tonic-gate #endif
357c478bd9Sstevel@tonic-gate 
367c478bd9Sstevel@tonic-gate /*
377c478bd9Sstevel@tonic-gate  * This file contains info for devctls issued by IB cfgadm plugin.
387c478bd9Sstevel@tonic-gate  * The only devctl of interest is DEVCTL_AP_CONTROL which uses
397c478bd9Sstevel@tonic-gate  * these defines and data structures.
407c478bd9Sstevel@tonic-gate  */
417c478bd9Sstevel@tonic-gate 
427c478bd9Sstevel@tonic-gate #define	IBNEX_HCAGUID_STRSZ	17
437c478bd9Sstevel@tonic-gate 
447c478bd9Sstevel@tonic-gate /*
457c478bd9Sstevel@tonic-gate  * types of attachment point Identifiers (APID)s supported
467c478bd9Sstevel@tonic-gate  */
477c478bd9Sstevel@tonic-gate #define	IBNEX_BASE_APID		0x01	/* Base static attachment point */
487c478bd9Sstevel@tonic-gate #define	IBNEX_HCA_APID		0x02	/* HCA static attachment point */
497c478bd9Sstevel@tonic-gate #define	IBNEX_DYN_APID		0x04	/* Dynamic IOC/DLPI attachment point */
507c478bd9Sstevel@tonic-gate #define	IBNEX_UNKNOWN_APID	0x08	/* Unknown attachment point */
517c478bd9Sstevel@tonic-gate 
527c478bd9Sstevel@tonic-gate 
537c478bd9Sstevel@tonic-gate /* defines for dynamic APID handling */
547c478bd9Sstevel@tonic-gate #define	DYN_SEP		"::"
557c478bd9Sstevel@tonic-gate #define	GET_DYN(a)	(((a) != NULL) ? strstr((a), DYN_SEP) : (void *)0)
567c478bd9Sstevel@tonic-gate 
577c478bd9Sstevel@tonic-gate #define	IBNEX_FABRIC		"fabric"
587c478bd9Sstevel@tonic-gate #define	IBNEX_VPPA_STR		"vppa"
597c478bd9Sstevel@tonic-gate #define	IBNEX_PORT_STR		"port"
607c478bd9Sstevel@tonic-gate #define	IBNEX_HCASVC_STR	"hca-svc"
617c478bd9Sstevel@tonic-gate 
627c478bd9Sstevel@tonic-gate /* Enums while reading ib.conf file */
637c478bd9Sstevel@tonic-gate typedef enum ib_service_type_e {
647c478bd9Sstevel@tonic-gate 	IB_NAME,		/* name = */
657c478bd9Sstevel@tonic-gate 	IB_CLASS,		/* class = */
667c478bd9Sstevel@tonic-gate 	IB_PORT_SERVICE,	/* port-svc-list = */
677c478bd9Sstevel@tonic-gate 	IB_VPPA_SERVICE,	/* vppa-svc-list = */
687c478bd9Sstevel@tonic-gate 	IB_HCASVC_SERVICE,	/* hca-svc-list = */
697c478bd9Sstevel@tonic-gate 	IB_NONE
707c478bd9Sstevel@tonic-gate } ib_service_type_t;
717c478bd9Sstevel@tonic-gate 
727c478bd9Sstevel@tonic-gate /*
737c478bd9Sstevel@tonic-gate  * defines for nvlist types: (for PORT devices and IOCs)
747c478bd9Sstevel@tonic-gate  * The first 6 are common to both IOC and PORT devices.
757c478bd9Sstevel@tonic-gate  * The last 9 are used only for IOC devices.
767c478bd9Sstevel@tonic-gate  */
777c478bd9Sstevel@tonic-gate #define	IBNEX_NODE_INFO_NVL		"node_info"
787c478bd9Sstevel@tonic-gate #define	IBNEX_NODE_APID_NVL		"node_apid"
797c478bd9Sstevel@tonic-gate #define	IBNEX_NODE_TYPE_NVL		"node_type"
807c478bd9Sstevel@tonic-gate #define	IBNEX_NODE_RSTATE_NVL		"node_rstate"
817c478bd9Sstevel@tonic-gate #define	IBNEX_NODE_OSTATE_NVL		"node_ostate"
827c478bd9Sstevel@tonic-gate #define	IBNEX_NODE_COND_NVL		"node_condition"
837c478bd9Sstevel@tonic-gate 
847c478bd9Sstevel@tonic-gate /*
85*bbf21555SRichard Lowe  * This flag is passed from cfgadm to ib(4D) to convey that it
867c478bd9Sstevel@tonic-gate  * need not attempt to probe the fabric.
877c478bd9Sstevel@tonic-gate  *
887c478bd9Sstevel@tonic-gate  * The value of these flags should be same as flags in enum
897c478bd9Sstevel@tonic-gate  * ibdm_ibnex_get_ioclist_mtd_t.
907c478bd9Sstevel@tonic-gate  */
917c478bd9Sstevel@tonic-gate #define	IBNEX_DONOT_PROBE_FLAG	1
92*bbf21555SRichard Lowe #define	IBNEX_NORMAL_PROBE	0	/* flag used by ib(4D) only */
937c478bd9Sstevel@tonic-gate 
947c478bd9Sstevel@tonic-gate /*
957c478bd9Sstevel@tonic-gate  * The following are sub-commands to DEVCTL_AP_CONTROL.
967c478bd9Sstevel@tonic-gate  * NOTE: IBNEX_NUM_DEVICE_NODES and IBNEX_NUM_HCA_NODES need to be
977c478bd9Sstevel@tonic-gate  * separate. The former is used to figure out the dynamic ap_ids for
987c478bd9Sstevel@tonic-gate  * the IB fabric. The latter is used for a HCA count on a given host only.
997c478bd9Sstevel@tonic-gate  */
1007c478bd9Sstevel@tonic-gate #define	IBNEX_NUM_DEVICE_NODES	0x00010	/* how many device nodes exist? */
1017c478bd9Sstevel@tonic-gate #define	IBNEX_NUM_HCA_NODES	0x00020	/* how many HCAs exist in the host? */
1027c478bd9Sstevel@tonic-gate #define	IBNEX_SNAPSHOT_SIZE	0x00040	/* What is the "snapshot" size? */
1037c478bd9Sstevel@tonic-gate #define	IBNEX_GET_SNAPSHOT	0x00080	/* Get the actual dynamic "snapshot" */
1047c478bd9Sstevel@tonic-gate #define	IBNEX_DEVICE_PATH_SZ	0x00100	/* Given APID's device path size */
1057c478bd9Sstevel@tonic-gate #define	IBNEX_GET_DEVICE_PATH	0x00200	/* Get device path for a Dynamic APID */
1067c478bd9Sstevel@tonic-gate #define	IBNEX_HCA_LIST_SZ	0x00400	/* -x list_clients size for HCA APID */
1077c478bd9Sstevel@tonic-gate #define	IBNEX_HCA_LIST_INFO	0x00800	/* -x list_clients info for HCA APID */
1087c478bd9Sstevel@tonic-gate #define	IBNEX_UNCFG_CLNTS_SZ	0x01000	/* -x unconfig_clients option size */
1097c478bd9Sstevel@tonic-gate #define	IBNEX_UNCFG_CLNTS_INFO	0x02000	/* -x unconfig_clients option data */
1107c478bd9Sstevel@tonic-gate #define	IBNEX_UPDATE_PKEY_TBLS	0x04000	/* -x update_pkey_tbls */
1117c478bd9Sstevel@tonic-gate #define	IBNEX_CONF_ENTRY_ADD	0x08000	/* -x conf_file add_service */
1127c478bd9Sstevel@tonic-gate #define	IBNEX_CONF_ENTRY_DEL	0x10000	/* -x conf_file delete_service */
1137c478bd9Sstevel@tonic-gate #define	IBNEX_HCA_VERBOSE_SZ	0x20000	/* -alv hca_apid devctl size */
1147c478bd9Sstevel@tonic-gate #define	IBNEX_HCA_VERBOSE_INFO	0x40000	/* -alv hca_apid devctl data */
1157c478bd9Sstevel@tonic-gate #define	IBNEX_UPDATE_IOC_CONF	0x80000	/* -x update_ioc_conf */
1167c478bd9Sstevel@tonic-gate 
1177c478bd9Sstevel@tonic-gate /*
1187c478bd9Sstevel@tonic-gate  * Data structure passed back and forth user/kernel w/ DEVCTL_AP_CONTROL
1197c478bd9Sstevel@tonic-gate  * devctl. Note that these are separate structures as some fields are pointers.
1207c478bd9Sstevel@tonic-gate  */
1217c478bd9Sstevel@tonic-gate typedef struct ibnex_ioctl_data {
1227c478bd9Sstevel@tonic-gate 	uint_t		cmd;		/* one of the above commands */
1237c478bd9Sstevel@tonic-gate 	caddr_t		buf;		/* data buffer */
1247c478bd9Sstevel@tonic-gate 	uint_t		bufsiz;		/* data buffer size */
1257c478bd9Sstevel@tonic-gate 	caddr_t		ap_id;		/* Search based on this AP_ID name */
1267c478bd9Sstevel@tonic-gate 	uint_t		ap_id_len;	/* AP_ID name len */
1277c478bd9Sstevel@tonic-gate 	uint_t		misc_arg;	/* reserved */
1287c478bd9Sstevel@tonic-gate } ibnex_ioctl_data_t;
1297c478bd9Sstevel@tonic-gate 
1307c478bd9Sstevel@tonic-gate 
1317c478bd9Sstevel@tonic-gate /* For 32-bit app/64-bit kernel */
1327c478bd9Sstevel@tonic-gate typedef struct ibnex_ioctl_data_32 {
1337c478bd9Sstevel@tonic-gate 	uint32_t	cmd;		/* one of the above commands */
1347c478bd9Sstevel@tonic-gate 	caddr32_t	buf;		/* data buffer */
1357c478bd9Sstevel@tonic-gate 	uint32_t	bufsiz;		/* data buffer size */
1367c478bd9Sstevel@tonic-gate 	caddr32_t	ap_id;		/* Search based on this AP_ID name */
1377c478bd9Sstevel@tonic-gate 	uint32_t	ap_id_len;	/* AP_ID name len */
1387c478bd9Sstevel@tonic-gate 	uint32_t	misc_arg;	/* reserved */
1397c478bd9Sstevel@tonic-gate } ibnex_ioctl_data_32_t;
1407c478bd9Sstevel@tonic-gate 
141d1a5c838SRamaswamy Tummala /*
142d1a5c838SRamaswamy Tummala  * General ibnex IOCTLs
143d1a5c838SRamaswamy Tummala  *
144d1a5c838SRamaswamy Tummala  * IBNEX_CTL_GET_API_VER
145d1a5c838SRamaswamy Tummala  * ======================
146d1a5c838SRamaswamy Tummala  *
147d1a5c838SRamaswamy Tummala  * Gets the version number of the API that IB nexus currently supports.
148d1a5c838SRamaswamy Tummala  *
149d1a5c838SRamaswamy Tummala  * arg - pointer to a structure of type ibnex_ctl_api_ver_t
150d1a5c838SRamaswamy Tummala  *
151d1a5c838SRamaswamy Tummala  * Caller does not set any field of this structure. When this IOCTL is issued,
152d1a5c838SRamaswamy Tummala  * ib nexus will set api_ver_num field to the currently supported API
153d1a5c838SRamaswamy Tummala  * version number.
154d1a5c838SRamaswamy Tummala  *
155d1a5c838SRamaswamy Tummala  * The caller could issue this IOCTL prior to issuing any other general
156d1a5c838SRamaswamy Tummala  * ibnex IOCTLs to detect incompatible changes to the API. The caller may
157d1a5c838SRamaswamy Tummala  * call other IOCTLs only if the api_ver_num matches the API version number
158d1a5c838SRamaswamy Tummala  * used by the caller.
159d1a5c838SRamaswamy Tummala  *
160d1a5c838SRamaswamy Tummala  *
161d1a5c838SRamaswamy Tummala  * IBNEX_CTL_GET_HCA_LIST
162d1a5c838SRamaswamy Tummala  * ======================
163d1a5c838SRamaswamy Tummala  *
164d080a1d7SRamaswamy Tummala  * Gets GUIDs of all HCAs in the system
165d1a5c838SRamaswamy Tummala  *
166d1a5c838SRamaswamy Tummala  * arg - pointer to a structure of type ibnex_ctl_get_hca_list_t
167d1a5c838SRamaswamy Tummala  *
168d1a5c838SRamaswamy Tummala  * Caller allocates memory for HCA GUIDs. Sets hca_guids field to point to the
169d1a5c838SRamaswamy Tummala  * allocated memory. Sets hca_guids_alloc_sz to the number of GUIDs for which
170d1a5c838SRamaswamy Tummala  * memory has been allocated.
171d1a5c838SRamaswamy Tummala  *
172d1a5c838SRamaswamy Tummala  * Upon successful return from the IOCTL, nhcas will contain the number of
173d1a5c838SRamaswamy Tummala  * HCAs in the system. HCA GUIDs will be copied into hca_guids array.
174d1a5c838SRamaswamy Tummala  * The number of GUIDs copied are nhcas or hca_guids_alloc_sz which ever is
175d1a5c838SRamaswamy Tummala  * smaller.
176d1a5c838SRamaswamy Tummala  *
177d1a5c838SRamaswamy Tummala  *
178d1a5c838SRamaswamy Tummala  * IBNEX_CTL_QUERY_HCA
179d1a5c838SRamaswamy Tummala  * ===================
180d1a5c838SRamaswamy Tummala  *
181d1a5c838SRamaswamy Tummala  * Query HCA attributes
182d1a5c838SRamaswamy Tummala  *
183d1a5c838SRamaswamy Tummala  * arg - pointer to a structure of type ibnex_ctl_query_hca_t
184d1a5c838SRamaswamy Tummala  *
185d1a5c838SRamaswamy Tummala  * Caller sets hca_guid field of this structure.
186d1a5c838SRamaswamy Tummala  *
187e8174f4eSRamaswamy Tummala  * Caller allocates memory for hca device path. Sets hca_device_path to point
188e8174f4eSRamaswamy Tummala  * to the allocated memory and hca_device_path_alloc_sz to the number of bytes
189e8174f4eSRamaswamy Tummala  * allocated.
190e8174f4eSRamaswamy Tummala  *
191d1a5c838SRamaswamy Tummala  * Upon successful return from the IOCTL, hca_info will contain HCA attributes
192e8174f4eSRamaswamy Tummala  * for the specified GUID. hca_info.hca_device_path_len will contain the actual
193d080a1d7SRamaswamy Tummala  * string length of the hca device path plus one (for the terminating null
194d080a1d7SRamaswamy Tummala  * character). hca_info.hca_device_path will point to null terminated hca device
195d080a1d7SRamaswamy Tummala  * path string if the caller allocated memory for the hca device path is large
196e8174f4eSRamaswamy Tummala  * enough to hold the hca device path and the terminating null character.
197e8174f4eSRamaswamy Tummala  * Otherwise hca_info.hca_device_path will be set to NULL.
198d1a5c838SRamaswamy Tummala  *
199d1a5c838SRamaswamy Tummala  *
200d1a5c838SRamaswamy Tummala  * IBNEX_CTL_QUERY_HCA_PORT
201d1a5c838SRamaswamy Tummala  * ========================
202d1a5c838SRamaswamy Tummala  *
203d1a5c838SRamaswamy Tummala  * Query HCA port attributes
204d1a5c838SRamaswamy Tummala  *
205d1a5c838SRamaswamy Tummala  * arg - pointer to a structure of type ibnex_ctl_query_hca_port_t
206d1a5c838SRamaswamy Tummala  *
207d1a5c838SRamaswamy Tummala  * Caller sets hca_guid and port_num fields.
208d1a5c838SRamaswamy Tummala  *
209d1a5c838SRamaswamy Tummala  * Caller allocates memory for sgid entries. Sets sgid_tbl to point to
210d1a5c838SRamaswamy Tummala  * the allocated memory and sgid_tbl_alloc_sz to the number of sgid entries
211d1a5c838SRamaswamy Tummala  * for which memory has been allocated.
212d1a5c838SRamaswamy Tummala  *
213d1a5c838SRamaswamy Tummala  * Caller allocates memory for pkey entries. Sets pkey_tbl to point to
214d1a5c838SRamaswamy Tummala  * the allocated memory and pkey_tbl_alloc_sz to the number of pkey entries
215d1a5c838SRamaswamy Tummala  * for which memory has been allocated.
216d1a5c838SRamaswamy Tummala  *
217d1a5c838SRamaswamy Tummala  * Upon successful return from the IOCTL, port_info will contain HCA port
218d1a5c838SRamaswamy Tummala  * attributes for the specified HCA port. port_info.p_sgid_tbl_sz will contain
219d1a5c838SRamaswamy Tummala  * the actual number of sgids associated with this port. port_info.p_pkey_tbl_sz
220d1a5c838SRamaswamy Tummala  * will contain the actual number of pkeys associated with this port.
221d1a5c838SRamaswamy Tummala  *
222d1a5c838SRamaswamy Tummala  * port_info.p_sgid_tbl will point to an array containing sgids. The number of
223d1a5c838SRamaswamy Tummala  * sgids in the array is sgid_tbl_alloc_sz or port_info.p_sgid_tbl_sz
224d1a5c838SRamaswamy Tummala  * whichever is smaller.
225d1a5c838SRamaswamy Tummala  *
226d1a5c838SRamaswamy Tummala  * port_info.p_pkey_tbl will point to an array containing pkeys. The number of
227d1a5c838SRamaswamy Tummala  * pkeys in the array is pkey_tbl_alloc_sz or port_info.p_pkey_tbl_sz
228d1a5c838SRamaswamy Tummala  * whichever is smaller.
229d080a1d7SRamaswamy Tummala  *
230d080a1d7SRamaswamy Tummala  * Error numbers for the above ioctls upon failure:
231d080a1d7SRamaswamy Tummala  *   EINVAL	Invalid parameter passed
232d080a1d7SRamaswamy Tummala  *   EFAULT	A fault occurred copying data to or from the user space
233d080a1d7SRamaswamy Tummala  *		to the kernel space.
234d080a1d7SRamaswamy Tummala  *   ENXIO	Specified HCA GUID does not exist
235d080a1d7SRamaswamy Tummala  *   ENOENT	Specified HCA port does not exist
236d080a1d7SRamaswamy Tummala  *
237d1a5c838SRamaswamy Tummala  */
238d1a5c838SRamaswamy Tummala 
239d1a5c838SRamaswamy Tummala 
240d1a5c838SRamaswamy Tummala /*
241d1a5c838SRamaswamy Tummala  * ibnex specific ioctls
242d1a5c838SRamaswamy Tummala  *
243d1a5c838SRamaswamy Tummala  * NOTE: The ioctl codes should not collide with generic devctl ioctls
244d1a5c838SRamaswamy Tummala  * such as DEVCTL_AP_CONFIGURE.
245d1a5c838SRamaswamy Tummala  */
246d1a5c838SRamaswamy Tummala #define	IBNEX_IOC		(1 << 16)
247d1a5c838SRamaswamy Tummala #define	IBNEX_CTL_GET_API_VER	(IBNEX_IOC + 1)	/* Get API version # */
248d1a5c838SRamaswamy Tummala #define	IBNEX_CTL_GET_HCA_LIST	(IBNEX_IOC + 2)	/* Get HCA GUID list */
249d1a5c838SRamaswamy Tummala #define	IBNEX_CTL_QUERY_HCA	(IBNEX_IOC + 3)	/* Query HCA attributes */
250d1a5c838SRamaswamy Tummala #define	IBNEX_CTL_QUERY_HCA_PORT (IBNEX_IOC + 4) /* Query HCA port attributes */
251d1a5c838SRamaswamy Tummala 
252d1a5c838SRamaswamy Tummala /*
253d1a5c838SRamaswamy Tummala  * The device to open for issuing ibnex IOCTLs
254d1a5c838SRamaswamy Tummala  */
255d1a5c838SRamaswamy Tummala #define	IBNEX_DEVCTL_DEV		"/devices/ib:devctl"
256d1a5c838SRamaswamy Tummala 
257d1a5c838SRamaswamy Tummala /*
258d1a5c838SRamaswamy Tummala  * ibnex IOCTL API version number - to be incremented when making an
259d1a5c838SRamaswamy Tummala  * incompatible change to the API.
260d1a5c838SRamaswamy Tummala  */
261d1a5c838SRamaswamy Tummala #define	IBNEX_CTL_API_VERSION		1
262d1a5c838SRamaswamy Tummala 
263d1a5c838SRamaswamy Tummala #define	MAX_HCA_DRVNAME_LEN		16
264d1a5c838SRamaswamy Tummala 
265d1a5c838SRamaswamy Tummala /*
266d1a5c838SRamaswamy Tummala  * Data structure for IBNEX_CTL_GET_API_VER
267d1a5c838SRamaswamy Tummala  */
268d1a5c838SRamaswamy Tummala typedef struct ibnex_ctl_api_ver_s {
269d1a5c838SRamaswamy Tummala 	uint_t		api_ver_num;		/* out: supported API version */
270d1a5c838SRamaswamy Tummala } ibnex_ctl_api_ver_t;
271d1a5c838SRamaswamy Tummala 
272d1a5c838SRamaswamy Tummala /*
273d1a5c838SRamaswamy Tummala  * Data structure for IBNEX_CTL_GET_HCA_LIST
274d1a5c838SRamaswamy Tummala  */
275d1a5c838SRamaswamy Tummala typedef struct ibnex_ctl_get_hca_list_s {
276d1a5c838SRamaswamy Tummala 	ib_guid_t	*hca_guids;		/* in/out: HCA GUID array */
277d1a5c838SRamaswamy Tummala 	uint_t		hca_guids_alloc_sz;	/* in: # of HCA GUIDs for */
278d1a5c838SRamaswamy Tummala 						/* which storage is allocated */
279d1a5c838SRamaswamy Tummala 	uint_t		nhcas;			/* out: actual number of HCAs */
280d1a5c838SRamaswamy Tummala } ibnex_ctl_get_hca_list_t;
281d1a5c838SRamaswamy Tummala 
282d1a5c838SRamaswamy Tummala typedef struct ibnex_ctl_get_hca_list_32_s {
283d1a5c838SRamaswamy Tummala 	caddr32_t	hca_guids;		/* in/out: HCA GUID array */
284d1a5c838SRamaswamy Tummala 	uint_t		hca_guids_alloc_sz;	/* in: # of HCA GUIDs for */
285d1a5c838SRamaswamy Tummala 						/* which storage is allocated */
286d1a5c838SRamaswamy Tummala 	uint_t		nhcas;			/* out: actual number of HCAs */
287d1a5c838SRamaswamy Tummala } ibnex_ctl_get_hca_list_32_t;
288d1a5c838SRamaswamy Tummala 
289d1a5c838SRamaswamy Tummala /*
290d1a5c838SRamaswamy Tummala  * HCA information structure
291d1a5c838SRamaswamy Tummala  */
292d1a5c838SRamaswamy Tummala typedef struct ibnex_ctl_hca_info_s {
293d1a5c838SRamaswamy Tummala 	ib_guid_t	hca_node_guid;		/* Node GUID */
294d1a5c838SRamaswamy Tummala 	ib_guid_t	hca_si_guid;		/* Optional System Image GUID */
295d1a5c838SRamaswamy Tummala 	uint_t		hca_nports;		/* Number of physical ports */
296d1a5c838SRamaswamy Tummala 
297d1a5c838SRamaswamy Tummala 	/* HCA driver name and instance number */
298d1a5c838SRamaswamy Tummala 	char		hca_driver_name[MAX_HCA_DRVNAME_LEN];
299d1a5c838SRamaswamy Tummala 	int		hca_driver_instance;
300d1a5c838SRamaswamy Tummala 
301e8174f4eSRamaswamy Tummala 	/*
302e8174f4eSRamaswamy Tummala 	 * hca device path and the length.
303d080a1d7SRamaswamy Tummala 	 * hca_device_path_len contains the string length of the actual hca
304d080a1d7SRamaswamy Tummala 	 * device path plus one (for the terminating null character).
305e8174f4eSRamaswamy Tummala 	 */
306e8174f4eSRamaswamy Tummala 	char		*hca_device_path;
307e8174f4eSRamaswamy Tummala 	uint_t		hca_device_path_len;
308e8174f4eSRamaswamy Tummala 
309d1a5c838SRamaswamy Tummala 	ibt_hca_flags_t		hca_flags;	/* HCA capabilities etc */
310d1a5c838SRamaswamy Tummala 	ibt_hca_flags2_t	hca_flags2;	/* HCA capabilities etc */
311d1a5c838SRamaswamy Tummala 
312d1a5c838SRamaswamy Tummala 	uint32_t	hca_vendor_id;		/* Vendor ID */
313d1a5c838SRamaswamy Tummala 	uint16_t	hca_device_id;		/* Device ID */
314d1a5c838SRamaswamy Tummala 	uint32_t	hca_version_id;		/* Version ID */
315d1a5c838SRamaswamy Tummala 
316d1a5c838SRamaswamy Tummala 	uint_t		hca_max_chans;		/* Max channels supported */
317d1a5c838SRamaswamy Tummala 	uint_t		hca_max_chan_sz;	/* Max outstanding WRs on any */
318d1a5c838SRamaswamy Tummala 						/* channel */
319d1a5c838SRamaswamy Tummala 
320d1a5c838SRamaswamy Tummala 	uint_t		hca_max_sgl;		/* Max SGL entries per WR */
321d1a5c838SRamaswamy Tummala 
322d1a5c838SRamaswamy Tummala 	uint_t		hca_max_cq;		/* Max num of CQs supported  */
323d1a5c838SRamaswamy Tummala 	uint_t		hca_max_cq_sz;		/* Max capacity of each CQ */
324d1a5c838SRamaswamy Tummala 
325d1a5c838SRamaswamy Tummala 	ibt_page_sizes_t	hca_page_sz;	/* Bit mask of page sizes */
326d1a5c838SRamaswamy Tummala 
327d1a5c838SRamaswamy Tummala 	uint_t		hca_max_memr;		/* Max num of HCA mem regions */
328d1a5c838SRamaswamy Tummala 	ib_memlen_t	hca_max_memr_len;	/* Largest block, in bytes of */
329d1a5c838SRamaswamy Tummala 						/* mem that can be registered */
330d1a5c838SRamaswamy Tummala 	uint_t		hca_max_mem_win;	/* Max Memory windows in HCA */
331d1a5c838SRamaswamy Tummala 
332d1a5c838SRamaswamy Tummala 	uint_t		hca_max_rsc; 		/* Max Responder Resources of */
333d1a5c838SRamaswamy Tummala 						/* this HCA for RDMAR/Atomics */
334d1a5c838SRamaswamy Tummala 						/* with this HCA as target. */
335d1a5c838SRamaswamy Tummala 	uint8_t		hca_max_rdma_in_chan;	/* Max RDMAR/Atomics in per */
336d1a5c838SRamaswamy Tummala 						/* chan this HCA as target. */
337d1a5c838SRamaswamy Tummala 	uint8_t		hca_max_rdma_out_chan;	/* Max RDMA Reads/Atomics out */
338d1a5c838SRamaswamy Tummala 						/* per channel by this HCA */
339d1a5c838SRamaswamy Tummala 	uint_t		hca_max_ipv6_chan;	/* Max IPV6 channels in HCA */
340d1a5c838SRamaswamy Tummala 	uint_t		hca_max_ether_chan;	/* Max Ether channels in HCA */
341d1a5c838SRamaswamy Tummala 
342d1a5c838SRamaswamy Tummala 	uint_t		hca_max_mcg_chans;	/* Max number of channels */
343d1a5c838SRamaswamy Tummala 						/* that can join multicast */
344d1a5c838SRamaswamy Tummala 						/* groups */
345d1a5c838SRamaswamy Tummala 	uint_t		hca_max_mcg;		/* Max multicast groups */
346d1a5c838SRamaswamy Tummala 	uint_t		hca_max_chan_per_mcg;	/* Max number of channels per */
347d1a5c838SRamaswamy Tummala 						/* Multicast group in HCA */
348d1a5c838SRamaswamy Tummala 	uint16_t	hca_max_partitions;	/* Max partitions in HCA */
349d1a5c838SRamaswamy Tummala 
350d1a5c838SRamaswamy Tummala 	ib_time_t	hca_local_ack_delay;
351d1a5c838SRamaswamy Tummala 
352d1a5c838SRamaswamy Tummala 	uint_t		hca_max_port_sgid_tbl_sz;
353d1a5c838SRamaswamy Tummala 	uint16_t	hca_max_port_pkey_tbl_sz;
354d1a5c838SRamaswamy Tummala 	uint_t		hca_max_pd;		/* Max# of Protection Domains */
355d1a5c838SRamaswamy Tummala 
356d1a5c838SRamaswamy Tummala 	uint_t		hca_max_ud_dest;
357d1a5c838SRamaswamy Tummala 	uint_t		hca_max_srqs;		/* Max SRQs supported */
358d1a5c838SRamaswamy Tummala 	uint_t		hca_max_srqs_sz;	/* Max outstanding WRs on any */
359d1a5c838SRamaswamy Tummala 						/* SRQ */
360d1a5c838SRamaswamy Tummala 	uint_t		hca_max_srq_sgl;	/* Max SGL entries per SRQ WR */
361d1a5c838SRamaswamy Tummala 	uint_t		hca_max_cq_handlers;
362d1a5c838SRamaswamy Tummala 	ibt_lkey_t	hca_reserved_lkey;	/* Reserved L_Key value */
363d1a5c838SRamaswamy Tummala 	uint_t		hca_max_fmrs;		/* Max FMR Supported */
364d1a5c838SRamaswamy Tummala 
365d1a5c838SRamaswamy Tummala 	uint_t		hca_max_lso_size;
366d1a5c838SRamaswamy Tummala 	uint_t		hca_max_lso_hdr_size;
367d1a5c838SRamaswamy Tummala 	uint_t		hca_max_inline_size;
368d1a5c838SRamaswamy Tummala 
369d1a5c838SRamaswamy Tummala 	uint_t		hca_max_cq_mod_count;	/* CQ notify moderation */
370d1a5c838SRamaswamy Tummala 	uint_t		hca_max_cq_mod_usec;
371d1a5c838SRamaswamy Tummala 
372d1a5c838SRamaswamy Tummala 	uint32_t	hca_fw_major_version;	/* firmware version */
373d1a5c838SRamaswamy Tummala 	uint16_t	hca_fw_minor_version;
374d1a5c838SRamaswamy Tummala 	uint16_t	hca_fw_micro_version;
375d1a5c838SRamaswamy Tummala 
376d1a5c838SRamaswamy Tummala 	/* detailed WQE size info */
377d1a5c838SRamaswamy Tummala 	uint_t		hca_ud_send_inline_sz;	/* inline size in bytes */
378d1a5c838SRamaswamy Tummala 	uint_t		hca_conn_send_inline_sz;
379d1a5c838SRamaswamy Tummala 	uint_t		hca_conn_rdmaw_inline_overhead;
380d1a5c838SRamaswamy Tummala 	uint_t		hca_recv_sgl_sz;	/* detailed SGL sizes */
381d1a5c838SRamaswamy Tummala 	uint_t		hca_ud_send_sgl_sz;
382d1a5c838SRamaswamy Tummala 	uint_t		hca_conn_send_sgl_sz;
383d1a5c838SRamaswamy Tummala 	uint_t		hca_conn_rdma_sgl_overhead;
384d1a5c838SRamaswamy Tummala 	int32_t		hca_pad;
385d1a5c838SRamaswamy Tummala } ibnex_ctl_hca_info_t;
386d1a5c838SRamaswamy Tummala 
387e8174f4eSRamaswamy Tummala typedef struct ibnex_ctl_hca_info_32_s {
388e8174f4eSRamaswamy Tummala 	ib_guid_t	hca_node_guid;		/* Node GUID */
389e8174f4eSRamaswamy Tummala 	ib_guid_t	hca_si_guid;		/* Optional System Image GUID */
390e8174f4eSRamaswamy Tummala 	uint_t		hca_nports;		/* Number of physical ports */
391e8174f4eSRamaswamy Tummala 
392e8174f4eSRamaswamy Tummala 	/* HCA driver name and instance number */
393e8174f4eSRamaswamy Tummala 	char		hca_driver_name[MAX_HCA_DRVNAME_LEN];
394e8174f4eSRamaswamy Tummala 	int		hca_driver_instance;
395e8174f4eSRamaswamy Tummala 
396e8174f4eSRamaswamy Tummala 	/*
397e8174f4eSRamaswamy Tummala 	 * hca device path and the length.
398d080a1d7SRamaswamy Tummala 	 * hca_device_path_len contains the string length of the actual hca
399d080a1d7SRamaswamy Tummala 	 * device path plus one (for the terminating null character).
400e8174f4eSRamaswamy Tummala 	 */
401e8174f4eSRamaswamy Tummala 	caddr32_t	hca_device_path;
402e8174f4eSRamaswamy Tummala 	uint_t		hca_device_path_len;
403e8174f4eSRamaswamy Tummala 
404e8174f4eSRamaswamy Tummala 	ibt_hca_flags_t		hca_flags;	/* HCA capabilities etc */
405e8174f4eSRamaswamy Tummala 	ibt_hca_flags2_t	hca_flags2;	/* HCA capabilities etc */
406e8174f4eSRamaswamy Tummala 
407e8174f4eSRamaswamy Tummala 	uint32_t	hca_vendor_id;		/* Vendor ID */
408e8174f4eSRamaswamy Tummala 	uint16_t	hca_device_id;		/* Device ID */
409e8174f4eSRamaswamy Tummala 	uint32_t	hca_version_id;		/* Version ID */
410e8174f4eSRamaswamy Tummala 
411e8174f4eSRamaswamy Tummala 	uint_t		hca_max_chans;		/* Max channels supported */
412e8174f4eSRamaswamy Tummala 	uint_t		hca_max_chan_sz;	/* Max outstanding WRs on any */
413e8174f4eSRamaswamy Tummala 						/* channel */
414e8174f4eSRamaswamy Tummala 
415e8174f4eSRamaswamy Tummala 	uint_t		hca_max_sgl;		/* Max SGL entries per WR */
416e8174f4eSRamaswamy Tummala 
417e8174f4eSRamaswamy Tummala 	uint_t		hca_max_cq;		/* Max num of CQs supported  */
418e8174f4eSRamaswamy Tummala 	uint_t		hca_max_cq_sz;		/* Max capacity of each CQ */
419e8174f4eSRamaswamy Tummala 
420e8174f4eSRamaswamy Tummala 	ibt_page_sizes_t	hca_page_sz;	/* Bit mask of page sizes */
421e8174f4eSRamaswamy Tummala 
422e8174f4eSRamaswamy Tummala 	uint_t		hca_max_memr;		/* Max num of HCA mem regions */
423e8174f4eSRamaswamy Tummala 	ib_memlen_t	hca_max_memr_len;	/* Largest block, in bytes of */
424e8174f4eSRamaswamy Tummala 						/* mem that can be registered */
425e8174f4eSRamaswamy Tummala 	uint_t		hca_max_mem_win;	/* Max Memory windows in HCA */
426e8174f4eSRamaswamy Tummala 
427e8174f4eSRamaswamy Tummala 	uint_t		hca_max_rsc; 		/* Max Responder Resources of */
428e8174f4eSRamaswamy Tummala 						/* this HCA for RDMAR/Atomics */
429e8174f4eSRamaswamy Tummala 						/* with this HCA as target. */
430e8174f4eSRamaswamy Tummala 	uint8_t		hca_max_rdma_in_chan;	/* Max RDMAR/Atomics in per */
431e8174f4eSRamaswamy Tummala 						/* chan this HCA as target. */
432e8174f4eSRamaswamy Tummala 	uint8_t		hca_max_rdma_out_chan;	/* Max RDMA Reads/Atomics out */
433e8174f4eSRamaswamy Tummala 						/* per channel by this HCA */
434e8174f4eSRamaswamy Tummala 	uint_t		hca_max_ipv6_chan;	/* Max IPV6 channels in HCA */
435e8174f4eSRamaswamy Tummala 	uint_t		hca_max_ether_chan;	/* Max Ether channels in HCA */
436e8174f4eSRamaswamy Tummala 
437e8174f4eSRamaswamy Tummala 	uint_t		hca_max_mcg_chans;	/* Max number of channels */
438e8174f4eSRamaswamy Tummala 						/* that can join multicast */
439e8174f4eSRamaswamy Tummala 						/* groups */
440e8174f4eSRamaswamy Tummala 	uint_t		hca_max_mcg;		/* Max multicast groups */
441e8174f4eSRamaswamy Tummala 	uint_t		hca_max_chan_per_mcg;	/* Max number of channels per */
442e8174f4eSRamaswamy Tummala 						/* Multicast group in HCA */
443e8174f4eSRamaswamy Tummala 	uint16_t	hca_max_partitions;	/* Max partitions in HCA */
444e8174f4eSRamaswamy Tummala 
445e8174f4eSRamaswamy Tummala 	ib_time_t	hca_local_ack_delay;
446e8174f4eSRamaswamy Tummala 
447e8174f4eSRamaswamy Tummala 	uint_t		hca_max_port_sgid_tbl_sz;
448e8174f4eSRamaswamy Tummala 	uint16_t	hca_max_port_pkey_tbl_sz;
449e8174f4eSRamaswamy Tummala 	uint_t		hca_max_pd;		/* Max# of Protection Domains */
450e8174f4eSRamaswamy Tummala 
451e8174f4eSRamaswamy Tummala 	uint_t		hca_max_ud_dest;
452e8174f4eSRamaswamy Tummala 	uint_t		hca_max_srqs;		/* Max SRQs supported */
453e8174f4eSRamaswamy Tummala 	uint_t		hca_max_srqs_sz;	/* Max outstanding WRs on any */
454e8174f4eSRamaswamy Tummala 						/* SRQ */
455e8174f4eSRamaswamy Tummala 	uint_t		hca_max_srq_sgl;	/* Max SGL entries per SRQ WR */
456e8174f4eSRamaswamy Tummala 	uint_t		hca_max_cq_handlers;
457e8174f4eSRamaswamy Tummala 	ibt_lkey_t	hca_reserved_lkey;	/* Reserved L_Key value */
458e8174f4eSRamaswamy Tummala 	uint_t		hca_max_fmrs;		/* Max FMR Supported */
459e8174f4eSRamaswamy Tummala 
460e8174f4eSRamaswamy Tummala 	uint_t		hca_max_lso_size;
461e8174f4eSRamaswamy Tummala 	uint_t		hca_max_lso_hdr_size;
462e8174f4eSRamaswamy Tummala 	uint_t		hca_max_inline_size;
463e8174f4eSRamaswamy Tummala 
464e8174f4eSRamaswamy Tummala 	uint_t		hca_max_cq_mod_count;	/* CQ notify moderation */
465e8174f4eSRamaswamy Tummala 	uint_t		hca_max_cq_mod_usec;
466e8174f4eSRamaswamy Tummala 
467e8174f4eSRamaswamy Tummala 	uint32_t	hca_fw_major_version;	/* firmware version */
468e8174f4eSRamaswamy Tummala 	uint16_t	hca_fw_minor_version;
469e8174f4eSRamaswamy Tummala 	uint16_t	hca_fw_micro_version;
470e8174f4eSRamaswamy Tummala 
471e8174f4eSRamaswamy Tummala 	/* detailed WQE size info */
472e8174f4eSRamaswamy Tummala 	uint_t		hca_ud_send_inline_sz;	/* inline size in bytes */
473e8174f4eSRamaswamy Tummala 	uint_t		hca_conn_send_inline_sz;
474e8174f4eSRamaswamy Tummala 	uint_t		hca_conn_rdmaw_inline_overhead;
475e8174f4eSRamaswamy Tummala 	uint_t		hca_recv_sgl_sz;	/* detailed SGL sizes */
476e8174f4eSRamaswamy Tummala 	uint_t		hca_ud_send_sgl_sz;
477e8174f4eSRamaswamy Tummala 	uint_t		hca_conn_send_sgl_sz;
478e8174f4eSRamaswamy Tummala 	uint_t		hca_conn_rdma_sgl_overhead;
479e8174f4eSRamaswamy Tummala 	int32_t		hca_pad;
480e8174f4eSRamaswamy Tummala } ibnex_ctl_hca_info_32_t;
481e8174f4eSRamaswamy Tummala 
482d1a5c838SRamaswamy Tummala /*
483d1a5c838SRamaswamy Tummala  * Data structure for IBNEX_CTL_QUERY_HCA
484d1a5c838SRamaswamy Tummala  */
485d1a5c838SRamaswamy Tummala typedef struct ibnex_ctl_query_hca_s {
486e8174f4eSRamaswamy Tummala 	ib_guid_t	hca_guid;	/* in: HCA GUID */
487e8174f4eSRamaswamy Tummala 
488e8174f4eSRamaswamy Tummala 	/*
489e8174f4eSRamaswamy Tummala 	 * in: user allocated memory pointer for hca device path and number of
490e8174f4eSRamaswamy Tummala 	 * bytes allocated for the hca device path.
491e8174f4eSRamaswamy Tummala 	 */
492e8174f4eSRamaswamy Tummala 	char		*hca_device_path;
493e8174f4eSRamaswamy Tummala 	uint_t		hca_device_path_alloc_sz;
494e8174f4eSRamaswamy Tummala 
495d1a5c838SRamaswamy Tummala 	ibnex_ctl_hca_info_t	hca_info;	/* out: HCA information */
496d1a5c838SRamaswamy Tummala } ibnex_ctl_query_hca_t;
497d1a5c838SRamaswamy Tummala 
498e8174f4eSRamaswamy Tummala typedef struct ibnex_ctl_query_hca_32_s {
499e8174f4eSRamaswamy Tummala 	ib_guid_t	hca_guid;	/* in: HCA GUID */
500e8174f4eSRamaswamy Tummala 
501e8174f4eSRamaswamy Tummala 	/*
502e8174f4eSRamaswamy Tummala 	 * in: user allocated memory pointer for hca device path and number of
503e8174f4eSRamaswamy Tummala 	 * bytes allocated for the hca device path.
504e8174f4eSRamaswamy Tummala 	 */
505e8174f4eSRamaswamy Tummala 	caddr32_t	hca_device_path;
506e8174f4eSRamaswamy Tummala 	uint_t		hca_device_path_alloc_sz;
507e8174f4eSRamaswamy Tummala 
508e8174f4eSRamaswamy Tummala 	ibnex_ctl_hca_info_32_t	hca_info;	/* out: HCA information */
509e8174f4eSRamaswamy Tummala } ibnex_ctl_query_hca_32_t;
510e8174f4eSRamaswamy Tummala 
511d1a5c838SRamaswamy Tummala /*
512d1a5c838SRamaswamy Tummala  * HCA port information structure
513d1a5c838SRamaswamy Tummala  */
514d1a5c838SRamaswamy Tummala typedef struct ibnex_ctl_hca_port_info_s {
515d1a5c838SRamaswamy Tummala 	ib_lid_t		p_lid;		/* Base LID of port */
516d1a5c838SRamaswamy Tummala 	ib_qkey_cntr_t		p_qkey_violations; /* Bad Q_Key cnt */
517d1a5c838SRamaswamy Tummala 	ib_pkey_cntr_t		p_pkey_violations; /* Optional bad P_Key cnt */
518d1a5c838SRamaswamy Tummala 	uint8_t			p_sm_sl;	/* SM Service level */
519d1a5c838SRamaswamy Tummala 	ib_port_phys_state_t	p_phys_state;
520d1a5c838SRamaswamy Tummala 	ib_lid_t		p_sm_lid;	/* SM LID */
521d1a5c838SRamaswamy Tummala 	ibt_port_state_t	p_linkstate;	/* Port state */
522d1a5c838SRamaswamy Tummala 	uint8_t			p_port_num;	/* Port number */
523d1a5c838SRamaswamy Tummala 
524d1a5c838SRamaswamy Tummala 	ib_link_width_t		p_width_supported;
525d1a5c838SRamaswamy Tummala 	ib_link_width_t		p_width_enabled;
526d1a5c838SRamaswamy Tummala 	ib_link_width_t		p_width_active;
527d1a5c838SRamaswamy Tummala 
528d1a5c838SRamaswamy Tummala 	ib_mtu_t		p_mtu;		/* Max transfer unit - pkt */
529d1a5c838SRamaswamy Tummala 	uint8_t			p_lmc;		/* LID mask control */
530d1a5c838SRamaswamy Tummala 
531d1a5c838SRamaswamy Tummala 	ib_link_speed_t		p_speed_supported;
532d1a5c838SRamaswamy Tummala 	ib_link_speed_t		p_speed_enabled;
533d1a5c838SRamaswamy Tummala 	ib_link_speed_t		p_speed_active;
534d1a5c838SRamaswamy Tummala 
535d1a5c838SRamaswamy Tummala 	ib_gid_t		*p_sgid_tbl;	/* SGID Table */
536d1a5c838SRamaswamy Tummala 	uint_t			p_sgid_tbl_sz;	/* # of entries in SGID table */
537d1a5c838SRamaswamy Tummala 
538d1a5c838SRamaswamy Tummala 	ib_pkey_t		*p_pkey_tbl;	/* P_Key table */
539d1a5c838SRamaswamy Tummala 	uint16_t		p_pkey_tbl_sz;	/* # of entries in P_Key tbl */
540d1a5c838SRamaswamy Tummala 	uint16_t		p_def_pkey_ix;	/* default pkey index for TI */
541d1a5c838SRamaswamy Tummala 
542d1a5c838SRamaswamy Tummala 	uint8_t			p_max_vl;	/* Max num of virtual lanes */
543d1a5c838SRamaswamy Tummala 	uint8_t			p_init_type_reply; /* Optional InitTypeReply */
544d1a5c838SRamaswamy Tummala 	ib_time_t		p_subnet_timeout; /* Max Subnet Timeout */
545d1a5c838SRamaswamy Tummala 	ibt_port_caps_t		p_capabilities;	/* Port Capabilities */
546d1a5c838SRamaswamy Tummala 	uint32_t		p_msg_sz;	/* Max message size */
547d1a5c838SRamaswamy Tummala } ibnex_ctl_hca_port_info_t;
548d1a5c838SRamaswamy Tummala 
549d1a5c838SRamaswamy Tummala typedef struct ibnex_ctl_hca_port_info_32_s {
550d1a5c838SRamaswamy Tummala 	ib_lid_t		p_lid;		/* Base LID of port */
551d1a5c838SRamaswamy Tummala 	ib_qkey_cntr_t		p_qkey_violations; /* Bad Q_Key cnt */
552d1a5c838SRamaswamy Tummala 	ib_pkey_cntr_t		p_pkey_violations; /* Optional bad P_Key cnt */
553d1a5c838SRamaswamy Tummala 	uint8_t			p_sm_sl;	/* SM Service level */
554d1a5c838SRamaswamy Tummala 	ib_port_phys_state_t	p_phys_state;
555d1a5c838SRamaswamy Tummala 	ib_lid_t		p_sm_lid;	/* SM LID */
556d1a5c838SRamaswamy Tummala 	ibt_port_state_t	p_linkstate;	/* Port state */
557d1a5c838SRamaswamy Tummala 	uint8_t			p_port_num;	/* Port number */
558d1a5c838SRamaswamy Tummala 
559d1a5c838SRamaswamy Tummala 	ib_link_width_t		p_width_supported;
560d1a5c838SRamaswamy Tummala 	ib_link_width_t		p_width_enabled;
561d1a5c838SRamaswamy Tummala 	ib_link_width_t		p_width_active;
562d1a5c838SRamaswamy Tummala 
563d1a5c838SRamaswamy Tummala 	ib_mtu_t		p_mtu;		/* Max transfer unit - pkt */
564d1a5c838SRamaswamy Tummala 	uint8_t			p_lmc;		/* LID mask control */
565d1a5c838SRamaswamy Tummala 
566d1a5c838SRamaswamy Tummala 	ib_link_speed_t		p_speed_supported;
567d1a5c838SRamaswamy Tummala 	ib_link_speed_t		p_speed_enabled;
568d1a5c838SRamaswamy Tummala 	ib_link_speed_t		p_speed_active;
569d1a5c838SRamaswamy Tummala 
570d1a5c838SRamaswamy Tummala 	caddr32_t		p_sgid_tbl;	/* SGID Table */
571d1a5c838SRamaswamy Tummala 	uint_t			p_sgid_tbl_sz;	/* # of entries in SGID table */
572d1a5c838SRamaswamy Tummala 
573d1a5c838SRamaswamy Tummala 	caddr32_t		p_pkey_tbl;	/* P_Key table */
574d1a5c838SRamaswamy Tummala 	uint16_t		p_pkey_tbl_sz;	/* # of entries in P_Key tbl */
575d1a5c838SRamaswamy Tummala 	uint16_t		p_def_pkey_ix;	/* default pkey index for TI */
576d1a5c838SRamaswamy Tummala 
577d1a5c838SRamaswamy Tummala 	uint8_t			p_max_vl;	/* Max num of virtual lanes */
578d1a5c838SRamaswamy Tummala 	uint8_t			p_init_type_reply; /* Optional InitTypeReply */
579d1a5c838SRamaswamy Tummala 	ib_time_t		p_subnet_timeout; /* Max Subnet Timeout */
580d1a5c838SRamaswamy Tummala 	ibt_port_caps_t		p_capabilities;	/* Port Capabilities */
581d1a5c838SRamaswamy Tummala 	uint32_t		p_msg_sz;	/* Max message size */
582d1a5c838SRamaswamy Tummala } ibnex_ctl_hca_port_info_32_t;
583d1a5c838SRamaswamy Tummala 
584d1a5c838SRamaswamy Tummala /*
585d1a5c838SRamaswamy Tummala  * Data structure for IBNEX_CTL_QUERY_HCA_PORT
586d1a5c838SRamaswamy Tummala  */
587d1a5c838SRamaswamy Tummala typedef struct ibnex_ctl_query_hca_port_s {
588d1a5c838SRamaswamy Tummala 	ib_guid_t	hca_guid;		/* in: HCA GUID */
589d1a5c838SRamaswamy Tummala 	uint_t		port_num;		/* in: port number */
590d1a5c838SRamaswamy Tummala 
591d1a5c838SRamaswamy Tummala 	ib_gid_t	*sgid_tbl;		/* in: SGID Table */
592d1a5c838SRamaswamy Tummala 	uint_t		sgid_tbl_alloc_sz; /* in: # of entries in SGID table */
593d1a5c838SRamaswamy Tummala 
594d1a5c838SRamaswamy Tummala 	ib_pkey_t	*pkey_tbl;		/* in: P_Key table */
595d1a5c838SRamaswamy Tummala 	uint_t		pkey_tbl_alloc_sz; /* in: # of entries in P_Key table */
596d1a5c838SRamaswamy Tummala 
597d1a5c838SRamaswamy Tummala 	uint32_t	pad;
598d1a5c838SRamaswamy Tummala 	ibnex_ctl_hca_port_info_t port_info;	/* out: port information */
599d1a5c838SRamaswamy Tummala } ibnex_ctl_query_hca_port_t;
600d1a5c838SRamaswamy Tummala 
601d1a5c838SRamaswamy Tummala typedef struct ibnex_ctl_query_hca_port_32_s {
602d1a5c838SRamaswamy Tummala 	ib_guid_t	hca_guid;		/* in: HCA GUID */
603d1a5c838SRamaswamy Tummala 	uint_t		port_num;		/* in: port number */
604d1a5c838SRamaswamy Tummala 
605d1a5c838SRamaswamy Tummala 	caddr32_t	sgid_tbl;		/* in: SGID Table */
606d1a5c838SRamaswamy Tummala 	uint_t		sgid_tbl_alloc_sz; /* in: # of entries in SGID table */
607d1a5c838SRamaswamy Tummala 
608d1a5c838SRamaswamy Tummala 	caddr32_t	pkey_tbl;		/* in: P_Key table */
609d1a5c838SRamaswamy Tummala 	uint_t		pkey_tbl_alloc_sz; /* in: # of entries in P_Key table */
610d1a5c838SRamaswamy Tummala 
611d1a5c838SRamaswamy Tummala 	uint32_t	pad;
612d1a5c838SRamaswamy Tummala 	ibnex_ctl_hca_port_info_32_t port_info;	/* out: port information */
613d1a5c838SRamaswamy Tummala } ibnex_ctl_query_hca_port_32_t;
614d1a5c838SRamaswamy Tummala 
615d1a5c838SRamaswamy Tummala #ifdef _KERNEL
616d1a5c838SRamaswamy Tummala _NOTE(SCHEME_PROTECTS_DATA("", ibnex_ctl_hca_info_s))
617d1a5c838SRamaswamy Tummala _NOTE(SCHEME_PROTECTS_DATA("", ibnex_ctl_hca_port_info_s))
618d1a5c838SRamaswamy Tummala _NOTE(SCHEME_PROTECTS_DATA("", ibnex_ctl_hca_port_info_32_s))
619d1a5c838SRamaswamy Tummala _NOTE(SCHEME_PROTECTS_DATA("", ibnex_ctl_query_hca_port_s))
620d1a5c838SRamaswamy Tummala _NOTE(SCHEME_PROTECTS_DATA("", ibnex_ctl_query_hca_port_32_s))
621d1a5c838SRamaswamy Tummala #endif
622d1a5c838SRamaswamy Tummala 
6237c478bd9Sstevel@tonic-gate 
6247c478bd9Sstevel@tonic-gate #ifdef __cplusplus
6257c478bd9Sstevel@tonic-gate }
6267c478bd9Sstevel@tonic-gate #endif
6277c478bd9Sstevel@tonic-gate 
6287c478bd9Sstevel@tonic-gate #endif	/* _SYS_IB_IBNEX_IBNEX_DEVCTL_H */
629