xref: /onnv-gate/usr/src/uts/common/sys/ib/adapters/hermon/hermon_hw.h (revision 12965:b65a8427f8fe)
19517SBill.Taylor@Sun.COM /*
29517SBill.Taylor@Sun.COM  * CDDL HEADER START
39517SBill.Taylor@Sun.COM  *
49517SBill.Taylor@Sun.COM  * The contents of this file are subject to the terms of the
59517SBill.Taylor@Sun.COM  * Common Development and Distribution License (the "License").
69517SBill.Taylor@Sun.COM  * You may not use this file except in compliance with the License.
79517SBill.Taylor@Sun.COM  *
89517SBill.Taylor@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99517SBill.Taylor@Sun.COM  * or http://www.opensolaris.org/os/licensing.
109517SBill.Taylor@Sun.COM  * See the License for the specific language governing permissions
119517SBill.Taylor@Sun.COM  * and limitations under the License.
129517SBill.Taylor@Sun.COM  *
139517SBill.Taylor@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
149517SBill.Taylor@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159517SBill.Taylor@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
169517SBill.Taylor@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
179517SBill.Taylor@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
189517SBill.Taylor@Sun.COM  *
199517SBill.Taylor@Sun.COM  * CDDL HEADER END
209517SBill.Taylor@Sun.COM  */
219517SBill.Taylor@Sun.COM 
229517SBill.Taylor@Sun.COM /*
2312647SWilliam.Taylor@Oracle.COM  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
249517SBill.Taylor@Sun.COM  */
259517SBill.Taylor@Sun.COM 
269517SBill.Taylor@Sun.COM #ifndef	_SYS_IB_ADAPTERS_HERMON_HW_H
279517SBill.Taylor@Sun.COM #define	_SYS_IB_ADAPTERS_HERMON_HW_H
289517SBill.Taylor@Sun.COM 
299517SBill.Taylor@Sun.COM /*
309517SBill.Taylor@Sun.COM  * hermon_hw.h
319517SBill.Taylor@Sun.COM  *    Contains all the structure definitions and #defines for all Hermon
329517SBill.Taylor@Sun.COM  *    hardware resources and registers (as defined by the Hermon register
339517SBill.Taylor@Sun.COM  *    specification).  Wherever possible, the names in the Hermon spec
349517SBill.Taylor@Sun.COM  *    have been preserved in the structure and field names below.
359517SBill.Taylor@Sun.COM  */
369517SBill.Taylor@Sun.COM 
379517SBill.Taylor@Sun.COM #include <sys/types.h>
389517SBill.Taylor@Sun.COM #include <sys/conf.h>
399517SBill.Taylor@Sun.COM #include <sys/ddi.h>
409517SBill.Taylor@Sun.COM #include <sys/sunddi.h>
419517SBill.Taylor@Sun.COM 
429517SBill.Taylor@Sun.COM #ifdef __cplusplus
439517SBill.Taylor@Sun.COM extern "C" {
449517SBill.Taylor@Sun.COM #endif
459517SBill.Taylor@Sun.COM 
469517SBill.Taylor@Sun.COM 
479517SBill.Taylor@Sun.COM /*
489517SBill.Taylor@Sun.COM  * PCI IDs for supported chipsets
499517SBill.Taylor@Sun.COM  */
509517SBill.Taylor@Sun.COM #define	PCI_VENID_MLX		0x15b3
519517SBill.Taylor@Sun.COM #define	PCI_DEVID_HERMON_SDR	0x6340	/* Mellanox MT25208-SDR PCIe Gen1 */
529517SBill.Taylor@Sun.COM #define	PCI_DEVID_HERMON_DDR	0x634A	/* Mellanox MT25208-DDR PCIe Gen1 */
539517SBill.Taylor@Sun.COM #define	PCI_DEVID_HERMON_DDRG2	0x6732	/* Mellanox MT25208-DDR PCIe Gen2 */
549517SBill.Taylor@Sun.COM #define	PCI_DEVID_HERMON_QDRG2	0x673C	/* Mellanox MT25208-QDR PCIe Gen2 */
5512688SWilliam.Taylor@Oracle.COM #define	PCI_DEVID_HERMON_QDRG2V	0x6746	/* Mellanox MT25208-QDR PCIe Gen2 */
569517SBill.Taylor@Sun.COM #define	PCI_DEVID_HERMON_MAINT	0x0191  /* Maintenance/Mem Controller Mode */
579517SBill.Taylor@Sun.COM 
589517SBill.Taylor@Sun.COM /*
599517SBill.Taylor@Sun.COM  * Native page size of the adapter
609517SBill.Taylor@Sun.COM  */
619517SBill.Taylor@Sun.COM #define	HERMON_PAGESIZE		0x1000	/* 4Kb */
6211972SBill.Taylor@Sun.COM #define	HERMON_PAGEOFFSET	(HERMON_PAGESIZE - 1)
6311972SBill.Taylor@Sun.COM #define	HERMON_PAGEMASK		(~HERMON_PAGEOFFSET)
649517SBill.Taylor@Sun.COM #define	HERMON_PAGESHIFT	0xC		/* 12  */
659517SBill.Taylor@Sun.COM 
669517SBill.Taylor@Sun.COM /*
679517SBill.Taylor@Sun.COM  * Offsets into the CMD BAR (BAR 0) for many of the more interesting hardware
689517SBill.Taylor@Sun.COM  * registers.  These registers include the HCR (more below), and the software
699517SBill.Taylor@Sun.COM  * reset register (SW_RESET).
709517SBill.Taylor@Sun.COM  */
719517SBill.Taylor@Sun.COM #define	HERMON_CMD_HCR_OFFSET		0x80680 /* PRM */
729517SBill.Taylor@Sun.COM #define	HERMON_CMD_SW_RESET_OFFSET	0xF0010 /* PRM */
739517SBill.Taylor@Sun.COM #define	HERMON_CMD_SW_SEMAPHORE_OFFSET	0xF03FC /* PRM */
749517SBill.Taylor@Sun.COM #define	HERMON_CMD_OFFSET_MASK		0xFFFFF /* per MLX instruction */
759517SBill.Taylor@Sun.COM 
769517SBill.Taylor@Sun.COM 
779517SBill.Taylor@Sun.COM /*
789517SBill.Taylor@Sun.COM  * Ownership flags used to define hardware or software ownership for
799517SBill.Taylor@Sun.COM  * various Hermon resources
809517SBill.Taylor@Sun.COM  */
819517SBill.Taylor@Sun.COM #define	HERMON_HW_OWNER			0x1
829517SBill.Taylor@Sun.COM #define	HERMON_SW_OWNER			0x0
839517SBill.Taylor@Sun.COM 
849517SBill.Taylor@Sun.COM /*
859517SBill.Taylor@Sun.COM  * Determines whether or not virtual-to-physical address translation is
869517SBill.Taylor@Sun.COM  * required.  Several of the Hermon hardware structures can be optionally
879517SBill.Taylor@Sun.COM  * accessed by Hermon without going through the TPT address translation
889517SBill.Taylor@Sun.COM  * tables.
899517SBill.Taylor@Sun.COM  */
909517SBill.Taylor@Sun.COM #define	HERMON_VA2PA_XLAT_ENABLED	0x1
919517SBill.Taylor@Sun.COM #define	HERMON_VA2PA_XLAT_DISABLED	0x0
929517SBill.Taylor@Sun.COM 
939517SBill.Taylor@Sun.COM /*
949517SBill.Taylor@Sun.COM  * HCA Command Register (HCR)
959517SBill.Taylor@Sun.COM  *    The HCR command interface provides privileged access to the HCA in
969517SBill.Taylor@Sun.COM  *    order to query, configure and modify HCA execution.  It is the
979517SBill.Taylor@Sun.COM  *    primary mechanism through which mailboxes may be posted to Hermon
989517SBill.Taylor@Sun.COM  *    firmware.  To use this interface software fills the HCR with pointers
999517SBill.Taylor@Sun.COM  *    to input and output mailboxes.  Some commands support immediate
1009517SBill.Taylor@Sun.COM  *    parameters, however, and for these commands the HCR will contain the
1019517SBill.Taylor@Sun.COM  *    input or output parameters. Command execution completion can be
1029517SBill.Taylor@Sun.COM  *    detected either by the software polling the HCR or by waiting for a
1039517SBill.Taylor@Sun.COM  *    command completion event.
1049517SBill.Taylor@Sun.COM  */
1059517SBill.Taylor@Sun.COM struct hermon_hw_hcr_s {
1069517SBill.Taylor@Sun.COM 	uint32_t	in_param0;
1079517SBill.Taylor@Sun.COM 	uint32_t	in_param1;
1089517SBill.Taylor@Sun.COM 	uint32_t	input_modifier;
1099517SBill.Taylor@Sun.COM 	uint32_t	out_param0;
1109517SBill.Taylor@Sun.COM 	uint32_t	out_param1;
1119517SBill.Taylor@Sun.COM 	uint32_t	token;
1129517SBill.Taylor@Sun.COM 	uint32_t	cmd;
1139517SBill.Taylor@Sun.COM };
1149517SBill.Taylor@Sun.COM #define	HERMON_HCR_TOKEN_MASK		0xFFFF0000
1159517SBill.Taylor@Sun.COM #define	HERMON_HCR_TOKEN_SHIFT		16
1169517SBill.Taylor@Sun.COM 
1179517SBill.Taylor@Sun.COM #define	HERMON_HCR_CMD_STATUS_MASK	0xFF000000
1189517SBill.Taylor@Sun.COM #define	HERMON_HCR_CMD_GO_MASK		0x00800000
1199517SBill.Taylor@Sun.COM #define	HERMON_HCR_CMD_E_MASK		0x00400000
1209517SBill.Taylor@Sun.COM #define	HERMON_HCR_CMD_T_MASK		0x00200000
1219517SBill.Taylor@Sun.COM #define	HERMON_HCR_CMD_OPMOD_MASK	0x0000F000
1229517SBill.Taylor@Sun.COM #define	HERMON_HCR_CMD_OPCODE_MASK	0x00000FFF
1239517SBill.Taylor@Sun.COM #define	HERMON_HCR_CMD_STATUS_SHFT	24
1249517SBill.Taylor@Sun.COM #define	HERMON_HCR_CMD_GO_SHFT		23
1259517SBill.Taylor@Sun.COM #define	HERMON_HCR_CMD_E_SHFT		22
1269517SBill.Taylor@Sun.COM #define	HERMON_HCR_CMD_T_SHFT		21
1279517SBill.Taylor@Sun.COM #define	HERMON_HCR_CMD_OPMOD_SHFT	12
1289517SBill.Taylor@Sun.COM 
1299517SBill.Taylor@Sun.COM /*
130*12965SWilliam.Taylor@Oracle.COM  * Arbel/tavor "QUERY_DEV_LIM" == Hermon "QUERY_DEV_CAP" - Same hex code
1319517SBill.Taylor@Sun.COM  *    same function as tavor/arbel QUERY_DEV_LIM, just renamed (whatever).
1329517SBill.Taylor@Sun.COM  *    The QUERY_DEV_LIM command returns the device limits and capabilities
1339517SBill.Taylor@Sun.COM  *    supported by the Hermon device.  This command must be run before
1349517SBill.Taylor@Sun.COM  *    running the INIT_HCA command (below) in order to determine the maximum
1359517SBill.Taylor@Sun.COM  *    capabilities of the device and which optional features are supported.
1369517SBill.Taylor@Sun.COM  */
1379517SBill.Taylor@Sun.COM #ifdef  _LITTLE_ENDIAN
1389517SBill.Taylor@Sun.COM struct hermon_hw_querydevlim_s {
1399517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[4];
1409517SBill.Taylor@Sun.COM 
1419517SBill.Taylor@Sun.COM 	uint32_t	log_max_scqs 	:4;
1429517SBill.Taylor@Sun.COM 	uint32_t			:4;
1439517SBill.Taylor@Sun.COM 	uint32_t	num_rsvd_scqs 	:6;
1449517SBill.Taylor@Sun.COM 	uint32_t			:2;
1459517SBill.Taylor@Sun.COM 	uint32_t	log_max_srq	:5;
1469517SBill.Taylor@Sun.COM 	uint32_t			:7;
1479517SBill.Taylor@Sun.COM 	uint32_t	log_rsvd_srq	:4;
1489517SBill.Taylor@Sun.COM 
1499517SBill.Taylor@Sun.COM 	uint32_t	log_max_qp	:5;
1509517SBill.Taylor@Sun.COM 	uint32_t			:3;
1519517SBill.Taylor@Sun.COM 	uint32_t	log_rsvd_qp	:4;
1529517SBill.Taylor@Sun.COM 	uint32_t			:4;
1539517SBill.Taylor@Sun.COM 	uint32_t	log_max_qp_sz	:8;
1549517SBill.Taylor@Sun.COM 	uint32_t	log_max_srq_sz	:8;
1559517SBill.Taylor@Sun.COM 
1569517SBill.Taylor@Sun.COM 	uint32_t	log_max_eq	:4;
1579517SBill.Taylor@Sun.COM 	uint32_t			:4;
1589517SBill.Taylor@Sun.COM 	uint32_t	num_rsvd_eq	:4;
1599517SBill.Taylor@Sun.COM 	uint32_t			:4;
1609517SBill.Taylor@Sun.COM 	uint32_t	log_max_dmpt	:6;
1619517SBill.Taylor@Sun.COM 	uint32_t			:2;
1629517SBill.Taylor@Sun.COM 	uint32_t	log_max_eq_sz	:8;
1639517SBill.Taylor@Sun.COM 
1649517SBill.Taylor@Sun.COM 	uint32_t	log_max_cq	:5;
1659517SBill.Taylor@Sun.COM 	uint32_t			:3;
1669517SBill.Taylor@Sun.COM 	uint32_t	log_rsvd_cq	:4;
1679517SBill.Taylor@Sun.COM 	uint32_t			:4;
1689517SBill.Taylor@Sun.COM 	uint32_t	log_max_cq_sz	:8;
1699517SBill.Taylor@Sun.COM 	uint32_t			:8;
1709517SBill.Taylor@Sun.COM 
1719517SBill.Taylor@Sun.COM 
1729517SBill.Taylor@Sun.COM 	uint32_t			:32;
1739517SBill.Taylor@Sun.COM 
1749517SBill.Taylor@Sun.COM 	uint32_t	log_max_mtt	:6;
1759517SBill.Taylor@Sun.COM 	uint32_t			:2;
1769517SBill.Taylor@Sun.COM 	uint32_t	log_rsvd_dmpt	:4;
1779517SBill.Taylor@Sun.COM 	uint32_t			:4;
178*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_max_mrw_sz	:7;
179*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
1809517SBill.Taylor@Sun.COM 	uint32_t	log_rsvd_mtt	:4;
1819517SBill.Taylor@Sun.COM 
1829517SBill.Taylor@Sun.COM 	uint32_t	log_max_ra_glob	:6;
1839517SBill.Taylor@Sun.COM 	uint32_t			:2;
1849517SBill.Taylor@Sun.COM 	uint32_t	log_max_rss_tbl_sz :4;
1859517SBill.Taylor@Sun.COM 	uint32_t	rss_toep	:1;	/* rss toeplitz hashing */
1869517SBill.Taylor@Sun.COM 	uint32_t	rss_xor		:1;	/* rss xor hashing */
1879517SBill.Taylor@Sun.COM 	uint32_t			:2;
1889517SBill.Taylor@Sun.COM 	uint32_t	log_max_gso_sz	:5;	/* Lge Send Offload */
1899517SBill.Taylor@Sun.COM 	uint32_t			:11;	/* new w/ 0.35, RSS info */
1909517SBill.Taylor@Sun.COM 
1919517SBill.Taylor@Sun.COM 	uint32_t	log_max_ra_res_qp	:6;
1929517SBill.Taylor@Sun.COM 	uint32_t			:10;
1939517SBill.Taylor@Sun.COM 	uint32_t	log_max_ra_req_qp	:6;
1949517SBill.Taylor@Sun.COM 	uint32_t			:10;
1959517SBill.Taylor@Sun.COM 
1969517SBill.Taylor@Sun.COM 	uint32_t	num_ports	:4;
1979517SBill.Taylor@Sun.COM 	uint32_t			:12;
1989517SBill.Taylor@Sun.COM 	uint32_t	ca_ack_delay	:5;
199*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cqmep		:3;	/* cq moderation policies */
2009517SBill.Taylor@Sun.COM 	uint32_t			:4;
201*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
202*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:3;
203*12965SWilliam.Taylor@Oracle.COM 
204*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mod_wr_srq	:1;	/* resize SRQ supported */
205*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:31;
206*12965SWilliam.Taylor@Oracle.COM 
207*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
2089517SBill.Taylor@Sun.COM 	uint32_t	stat_rate_sup	:16;
2099517SBill.Taylor@Sun.COM 
210*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
2119517SBill.Taylor@Sun.COM 	uint32_t			:4;
212*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:4;
2139517SBill.Taylor@Sun.COM 	uint32_t			:8;
2149517SBill.Taylor@Sun.COM 	uint32_t	log_max_msg	:5;
2159517SBill.Taylor@Sun.COM 	uint32_t			:3;
2169517SBill.Taylor@Sun.COM 
217*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rc		:1;	/* 0x44 */
2189517SBill.Taylor@Sun.COM 	uint32_t	uc		:1;
2199517SBill.Taylor@Sun.COM 	uint32_t	ud		:1;
2209517SBill.Taylor@Sun.COM 	uint32_t	xrc		:1;
2219517SBill.Taylor@Sun.COM 	uint32_t	rcm		:1;
2229517SBill.Taylor@Sun.COM 	uint32_t	fcoib		:1;
2239517SBill.Taylor@Sun.COM 	uint32_t	srq		:1;
2249517SBill.Taylor@Sun.COM 	uint32_t	ipoib_cksm	:1;
2259517SBill.Taylor@Sun.COM 	uint32_t	pkey_v		:1;
2269517SBill.Taylor@Sun.COM 	uint32_t	qkey_v		:1;
2279517SBill.Taylor@Sun.COM 	uint32_t	vmm		:1;
228*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fcoe		:1;
229*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dpdp		:1;	/* dual port diff protocol */
230*12965SWilliam.Taylor@Oracle.COM 	uint32_t	raw_etype	:1;
231*12965SWilliam.Taylor@Oracle.COM 	uint32_t	raw_ipv4	:1;
232*12965SWilliam.Taylor@Oracle.COM 	uint32_t	blh		:1;	/* big LSO header, bit in WQE */
2339517SBill.Taylor@Sun.COM 	uint32_t	mem_win		:1;
2349517SBill.Taylor@Sun.COM 	uint32_t	apm		:1;
2359517SBill.Taylor@Sun.COM 	uint32_t	atomic		:1;
2369517SBill.Taylor@Sun.COM 	uint32_t	raw_multi	:1;
2379517SBill.Taylor@Sun.COM 	uint32_t	avp		:1;
2389517SBill.Taylor@Sun.COM 	uint32_t	ud_multi	:1;
239*12965SWilliam.Taylor@Oracle.COM 	uint32_t	udm_ipv4	:1;
240*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dif		:1;	/* DIF supported */
2419517SBill.Taylor@Sun.COM 	uint32_t	pg_on_demand	:1;
2429517SBill.Taylor@Sun.COM 	uint32_t	router		:1;
243*12965SWilliam.Taylor@Oracle.COM 	uint32_t	l2mc		:1;	/* lev 2 enet multicast */
244*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
245*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ud_swp		:1;	/* sw parse for UD xport */
246*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ipv6_ex		:1;	/* offload w/ IPV6 ext hdrs */
247*12965SWilliam.Taylor@Oracle.COM 	uint32_t	lle		:1;	/* low latency enet */
248*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fcoe_t11	:1;	/* fcoenet T11 frame support */
249*12965SWilliam.Taylor@Oracle.COM 
250*12965SWilliam.Taylor@Oracle.COM 						/* 0x40 */
251*12965SWilliam.Taylor@Oracle.COM 	uint32_t	eth_uc_lb	:1;	/* enet unicast loopback */
252*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:3;
253*12965SWilliam.Taylor@Oracle.COM 	uint32_t	hdr_split	:1;
254*12965SWilliam.Taylor@Oracle.COM 	uint32_t	hdr_lookahead	:1;
255*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
256*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rss_udp		:1;
257*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
258*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
259*12965SWilliam.Taylor@Oracle.COM 
260*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_max_bf_page	:6;	/* 0x4c */
2619517SBill.Taylor@Sun.COM 	uint32_t			:2;
2629517SBill.Taylor@Sun.COM 	uint32_t	log_max_bf_req_ppg :6;
2639517SBill.Taylor@Sun.COM 	uint32_t			:2;
2649517SBill.Taylor@Sun.COM 	uint32_t	log_bf_reg_sz	:5;
2659517SBill.Taylor@Sun.COM 	uint32_t			:10;
2669517SBill.Taylor@Sun.COM 	uint32_t	blu_flm		:1;
2679517SBill.Taylor@Sun.COM 
268*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_pg_sz	:8;	/* 0x48 */
2699517SBill.Taylor@Sun.COM 	uint32_t			:8;
2709517SBill.Taylor@Sun.COM 	uint32_t	log_max_uar_sz	:6;
2719517SBill.Taylor@Sun.COM 	uint32_t			:6;
2729517SBill.Taylor@Sun.COM 	uint32_t	num_rsvd_uar	:4;
2739517SBill.Taylor@Sun.COM 
274*12965SWilliam.Taylor@Oracle.COM 	uint32_t	max_desc_sz_rq	:16;	/* 0x54 */
2759517SBill.Taylor@Sun.COM 	uint32_t	max_sg_rq	:8;
2769517SBill.Taylor@Sun.COM 	uint32_t			:8;
2779517SBill.Taylor@Sun.COM 
278*12965SWilliam.Taylor@Oracle.COM 	uint32_t	max_desc_sz_sq	:16;	/* 0x50 */
2799517SBill.Taylor@Sun.COM 	uint32_t	max_sg_sq	:8;
2809517SBill.Taylor@Sun.COM 	uint32_t			:8;
2819517SBill.Taylor@Sun.COM 
282*12965SWilliam.Taylor@Oracle.COM 
283*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd_fcoib;		/* 0x5C */
284*12965SWilliam.Taylor@Oracle.COM 
285*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;	/* 0x58 */
286*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fexch_base_mpt	:7;	/* FC exch base mpt num */
287*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fcp_ud_base_qp	:16;	/* RC UD base qp num */
288*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fexch_base_qp	:8;	/* FC exch base qp num */
289*12965SWilliam.Taylor@Oracle.COM 
290*12965SWilliam.Taylor@Oracle.COM 
291*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_max_xrcd	:5;	/* 0x64 */
292*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
293*12965SWilliam.Taylor@Oracle.COM 	uint32_t	num_rsvd_xrcds	:4;
2949517SBill.Taylor@Sun.COM 	uint32_t	log_max_pd	:5;
2959517SBill.Taylor@Sun.COM 	uint32_t			:7;
2969517SBill.Taylor@Sun.COM 	uint32_t	num_rsvd_pd	:4;
2979517SBill.Taylor@Sun.COM 
298*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_max_mcg	:8;	/* 0x60 */
2999517SBill.Taylor@Sun.COM 	uint32_t	num_rsvd_mcg	:4;
3009517SBill.Taylor@Sun.COM 	uint32_t			:4;
3019517SBill.Taylor@Sun.COM 	uint32_t	log_max_qp_mcg	:8;
3029517SBill.Taylor@Sun.COM 	uint32_t			:8;
3039517SBill.Taylor@Sun.COM 
3049517SBill.Taylor@Sun.COM 	uint32_t	rsrv2[6];
3059517SBill.Taylor@Sun.COM 
306*12965SWilliam.Taylor@Oracle.COM 	uint32_t	altc_entry_sz	:16;	/* 0x84 */
3079517SBill.Taylor@Sun.COM 	uint32_t	aux_entry_sz	:16;
3089517SBill.Taylor@Sun.COM 
309*12965SWilliam.Taylor@Oracle.COM 	uint32_t	qpc_entry_sz	:16;	/* 0x80 */
3109517SBill.Taylor@Sun.COM 	uint32_t	rdmardc_entry_sz :16;
3119517SBill.Taylor@Sun.COM 
312*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cmpt_entry_sz	:16;	/* 0x8C */
3139517SBill.Taylor@Sun.COM 	uint32_t	srq_entry_sz	:16;
3149517SBill.Taylor@Sun.COM 
315*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cqc_entry_sz	:16;	/* 0x88 */
3169517SBill.Taylor@Sun.COM 	uint32_t	eqc_entry_sz	:16;
3179517SBill.Taylor@Sun.COM 
318*12965SWilliam.Taylor@Oracle.COM 	uint32_t	bmme		:1;	/* 0x94 */
3199517SBill.Taylor@Sun.COM 	uint32_t	win_type	:1;
3209517SBill.Taylor@Sun.COM 	uint32_t	mps		:1;
3219517SBill.Taylor@Sun.COM 	uint32_t	bl		:1;
3229517SBill.Taylor@Sun.COM 	uint32_t	zb		:1;
3239517SBill.Taylor@Sun.COM 	uint32_t	lif		:1;
3249517SBill.Taylor@Sun.COM 	uint32_t	local_inv	:1;
3259517SBill.Taylor@Sun.COM 	uint32_t	remote_inv	:1;
3269517SBill.Taylor@Sun.COM 	uint32_t			:1;
3279517SBill.Taylor@Sun.COM 	uint32_t	win_type2	:1;
3289517SBill.Taylor@Sun.COM 	uint32_t	reserved_lkey	:1;
3299517SBill.Taylor@Sun.COM 	uint32_t	fast_reg_wr	:1;
3309517SBill.Taylor@Sun.COM 	uint32_t			:20;
3319517SBill.Taylor@Sun.COM 
332*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dmpt_entry_sz	:16;	/* 0x90 */
3339517SBill.Taylor@Sun.COM 	uint32_t	mtt_entry_sz	:16;
3349517SBill.Taylor@Sun.COM 
3359517SBill.Taylor@Sun.COM 	uint32_t			:32;
3369517SBill.Taylor@Sun.COM 
3379517SBill.Taylor@Sun.COM 	uint32_t	rsv_lkey;
338*12965SWilliam.Taylor@Oracle.COM 						/* 0xA0 */
3399517SBill.Taylor@Sun.COM 	uint64_t	max_icm_size;
3409517SBill.Taylor@Sun.COM 
3419517SBill.Taylor@Sun.COM 	uint32_t	rsrv3[22];
3429517SBill.Taylor@Sun.COM };
3439517SBill.Taylor@Sun.COM 
3449517SBill.Taylor@Sun.COM #else		/* BIG ENDIAN */
3459517SBill.Taylor@Sun.COM 
3469517SBill.Taylor@Sun.COM struct hermon_hw_querydevlim_s {
3479517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[4];
3489517SBill.Taylor@Sun.COM 
3499517SBill.Taylor@Sun.COM 	uint32_t	log_max_srq_sz	:8;
3509517SBill.Taylor@Sun.COM 	uint32_t	log_max_qp_sz	:8;
3519517SBill.Taylor@Sun.COM 	uint32_t			:4;
3529517SBill.Taylor@Sun.COM 	uint32_t	log_rsvd_qp	:4;
3539517SBill.Taylor@Sun.COM 	uint32_t			:3;
3549517SBill.Taylor@Sun.COM 	uint32_t	log_max_qp	:5;
3559517SBill.Taylor@Sun.COM 
3569517SBill.Taylor@Sun.COM 	uint32_t	log_rsvd_srq	:4;
3579517SBill.Taylor@Sun.COM 	uint32_t			:7;
3589517SBill.Taylor@Sun.COM 	uint32_t	log_max_srq	:5;
3599517SBill.Taylor@Sun.COM 	uint32_t			:2;
3609517SBill.Taylor@Sun.COM 	uint32_t	num_rsvd_scqs 	:6;
3619517SBill.Taylor@Sun.COM 	uint32_t			:4;
3629517SBill.Taylor@Sun.COM 	uint32_t	log_max_scqs 	:4;
3639517SBill.Taylor@Sun.COM 
3649517SBill.Taylor@Sun.COM 	uint32_t			:8;
3659517SBill.Taylor@Sun.COM 	uint32_t	log_max_cq_sz	:8;
3669517SBill.Taylor@Sun.COM 	uint32_t			:4;
3679517SBill.Taylor@Sun.COM 	uint32_t	log_rsvd_cq	:4;
3689517SBill.Taylor@Sun.COM 	uint32_t			:3;
3699517SBill.Taylor@Sun.COM 	uint32_t	log_max_cq	:5;
3709517SBill.Taylor@Sun.COM 
3719517SBill.Taylor@Sun.COM 	uint32_t	log_max_eq_sz	:8;
3729517SBill.Taylor@Sun.COM 	uint32_t			:2;
3739517SBill.Taylor@Sun.COM 	uint32_t	log_max_dmpt	:6;
3749517SBill.Taylor@Sun.COM 	uint32_t			:4;
3759517SBill.Taylor@Sun.COM 	uint32_t	num_rsvd_eq	:4;
3769517SBill.Taylor@Sun.COM 	uint32_t			:4;
3779517SBill.Taylor@Sun.COM 	uint32_t	log_max_eq	:4;
3789517SBill.Taylor@Sun.COM 
3799517SBill.Taylor@Sun.COM 	uint32_t	log_rsvd_mtt	:4;
380*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
381*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_max_mrw_sz	:7;
3829517SBill.Taylor@Sun.COM 	uint32_t			:4;
3839517SBill.Taylor@Sun.COM 	uint32_t	log_rsvd_dmpt	:4;
3849517SBill.Taylor@Sun.COM 	uint32_t			:2;
3859517SBill.Taylor@Sun.COM 	uint32_t	log_max_mtt	:6;
3869517SBill.Taylor@Sun.COM 
3879517SBill.Taylor@Sun.COM 	uint32_t			:32;
3889517SBill.Taylor@Sun.COM 
3899517SBill.Taylor@Sun.COM 	uint32_t			:10;
3909517SBill.Taylor@Sun.COM 	uint32_t	log_max_ra_req_qp	:6;
3919517SBill.Taylor@Sun.COM 	uint32_t			:10;
3929517SBill.Taylor@Sun.COM 	uint32_t	log_max_ra_res_qp	:6;
3939517SBill.Taylor@Sun.COM 
3949517SBill.Taylor@Sun.COM 	uint32_t			:11;	/* new w/ 0.35, RSS info */
3959517SBill.Taylor@Sun.COM 	uint32_t	log_max_gso_sz	:5;	/* Lge Send Offload */
3969517SBill.Taylor@Sun.COM 	uint32_t			:2;
3979517SBill.Taylor@Sun.COM 	uint32_t	rss_xor		:1;	/* rss xor hashing */
3989517SBill.Taylor@Sun.COM 	uint32_t	rss_toep	:1;	/* rss toeplitz hashing */
3999517SBill.Taylor@Sun.COM 	uint32_t	log_max_rss_tbl_sz :4;
4009517SBill.Taylor@Sun.COM 	uint32_t			:2;
4019517SBill.Taylor@Sun.COM 	uint32_t	log_max_ra_glob	:6;
4029517SBill.Taylor@Sun.COM 
4039517SBill.Taylor@Sun.COM 	uint32_t			:31;
404*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mod_wr_srq	:1;	/* resize SRQ supported */
405*12965SWilliam.Taylor@Oracle.COM 
406*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:3;
407*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
408*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:4;
409*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cqmep		:3;	/* cq moderation policies */
4109517SBill.Taylor@Sun.COM 	uint32_t	ca_ack_delay	:5;
4119517SBill.Taylor@Sun.COM 	uint32_t			:12;
4129517SBill.Taylor@Sun.COM 	uint32_t	num_ports	:4;
4139517SBill.Taylor@Sun.COM 
4149517SBill.Taylor@Sun.COM 	uint32_t			:3;
4159517SBill.Taylor@Sun.COM 	uint32_t	log_max_msg	:5;
4169517SBill.Taylor@Sun.COM 	uint32_t			:8;
417*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:4;
4189517SBill.Taylor@Sun.COM 	uint32_t			:4;
419*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
4209517SBill.Taylor@Sun.COM 
4219517SBill.Taylor@Sun.COM 	uint32_t	stat_rate_sup	:16;
422*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
423*12965SWilliam.Taylor@Oracle.COM 
424*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;	/* 0x40 */
425*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
426*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rss_udp		:1;
427*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
428*12965SWilliam.Taylor@Oracle.COM 	uint32_t	hdr_lookahead	:1;
429*12965SWilliam.Taylor@Oracle.COM 	uint32_t	hdr_split	:1;
430*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:3;
431*12965SWilliam.Taylor@Oracle.COM 	uint32_t	eth_uc_lb	:1;	/* enet unicast loopback */
432*12965SWilliam.Taylor@Oracle.COM 						/* 0x44 */
433*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fcoe_t11	:1;	/* fcoenet T11 frame support */
434*12965SWilliam.Taylor@Oracle.COM 	uint32_t	lle		:1;	/* low latency enet */
435*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ipv6_ex		:1;	/* offload w/ IPV6 ext hdrs */
436*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ud_swp		:1;	/* sw parse for UD xport */
437*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
438*12965SWilliam.Taylor@Oracle.COM 	uint32_t	l2mc		:1;	/* lev 2 enet multicast */
4399517SBill.Taylor@Sun.COM 	uint32_t	router		:1;
4409517SBill.Taylor@Sun.COM 	uint32_t	pg_on_demand	:1;
441*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dif		:1;	/* DIF supported */
442*12965SWilliam.Taylor@Oracle.COM 	uint32_t	udm_ipv4	:1;
4439517SBill.Taylor@Sun.COM 	uint32_t	ud_multi	:1;
4449517SBill.Taylor@Sun.COM 	uint32_t	avp		:1;
4459517SBill.Taylor@Sun.COM 	uint32_t	raw_multi	:1;
4469517SBill.Taylor@Sun.COM 	uint32_t	atomic		:1;
4479517SBill.Taylor@Sun.COM 	uint32_t	apm		:1;
4489517SBill.Taylor@Sun.COM 	uint32_t	mem_win		:1;
449*12965SWilliam.Taylor@Oracle.COM 	uint32_t	blh		:1;	/* big LSO header, bit in WQE */
450*12965SWilliam.Taylor@Oracle.COM 	uint32_t	raw_ipv4	:1;
451*12965SWilliam.Taylor@Oracle.COM 	uint32_t	raw_etype	:1;
452*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dpdp		:1;	/* dual port diff protocol */
453*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fcoe		:1;
4549517SBill.Taylor@Sun.COM 	uint32_t	vmm		:1;
4559517SBill.Taylor@Sun.COM 	uint32_t	qkey_v		:1;
4569517SBill.Taylor@Sun.COM 	uint32_t	pkey_v		:1;
4579517SBill.Taylor@Sun.COM 	uint32_t	ipoib_cksm	:1;
4589517SBill.Taylor@Sun.COM 	uint32_t	srq		:1;
4599517SBill.Taylor@Sun.COM 	uint32_t	fcoib		:1;
4609517SBill.Taylor@Sun.COM 	uint32_t	rcm		:1;
4619517SBill.Taylor@Sun.COM 	uint32_t	xrc		:1;
4629517SBill.Taylor@Sun.COM 	uint32_t	ud		:1;
4639517SBill.Taylor@Sun.COM 	uint32_t	uc		:1;
4649517SBill.Taylor@Sun.COM 	uint32_t	rc		:1;
4659517SBill.Taylor@Sun.COM 
466*12965SWilliam.Taylor@Oracle.COM 	uint32_t	num_rsvd_uar	:4;	/* 0x48 */
4679517SBill.Taylor@Sun.COM 	uint32_t			:6;
4689517SBill.Taylor@Sun.COM 	uint32_t	log_max_uar_sz	:6;
4699517SBill.Taylor@Sun.COM 	uint32_t			:8;
4709517SBill.Taylor@Sun.COM 	uint32_t	log_pg_sz	:8;
4719517SBill.Taylor@Sun.COM 
472*12965SWilliam.Taylor@Oracle.COM 	uint32_t	blu_flm		:1;	/* 0x4c */
4739517SBill.Taylor@Sun.COM 	uint32_t			:10;
4749517SBill.Taylor@Sun.COM 	uint32_t	log_bf_reg_sz	:5;
4759517SBill.Taylor@Sun.COM 	uint32_t			:2;
4769517SBill.Taylor@Sun.COM 	uint32_t	log_max_bf_req_ppg :6;
4779517SBill.Taylor@Sun.COM 	uint32_t			:2;
4789517SBill.Taylor@Sun.COM 	uint32_t	log_max_bf_page	:6;
4799517SBill.Taylor@Sun.COM 
480*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;	/* 0x50 */
4819517SBill.Taylor@Sun.COM 	uint32_t	max_sg_sq	:8;
4829517SBill.Taylor@Sun.COM 	uint32_t	max_desc_sz_sq	:16;
4839517SBill.Taylor@Sun.COM 
484*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;	/* 0x54 */
4859517SBill.Taylor@Sun.COM 	uint32_t	max_sg_rq	:8;
4869517SBill.Taylor@Sun.COM 	uint32_t	max_desc_sz_rq	:16;
4879517SBill.Taylor@Sun.COM 
488*12965SWilliam.Taylor@Oracle.COM 						/* 0x58 */
489*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fexch_base_qp	:8;	/* FC exch base qp num */
490*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fcp_ud_base_qp	:16;	/* RC UD base qp num */
491*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fexch_base_mpt	:7;	/* FC exch base mpt num */
492*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
493*12965SWilliam.Taylor@Oracle.COM 
494*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd_fcoib;		/* 0x5C */
495*12965SWilliam.Taylor@Oracle.COM 
496*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;	/* 0x60 */
4979517SBill.Taylor@Sun.COM 	uint32_t	log_max_qp_mcg	:8;
4989517SBill.Taylor@Sun.COM 	uint32_t			:4;
4999517SBill.Taylor@Sun.COM 	uint32_t	num_rsvd_mcg	:4;
5009517SBill.Taylor@Sun.COM 	uint32_t	log_max_mcg	:8;
5019517SBill.Taylor@Sun.COM 
502*12965SWilliam.Taylor@Oracle.COM 	uint32_t	num_rsvd_pd	:4;	/* 0x64 */
5039517SBill.Taylor@Sun.COM 	uint32_t			:7;
5049517SBill.Taylor@Sun.COM 	uint32_t	log_max_pd	:5;
505*12965SWilliam.Taylor@Oracle.COM 	uint32_t	num_rsvd_xrcds	:4;
506*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
507*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_max_xrcd	:5;
5089517SBill.Taylor@Sun.COM 
5099517SBill.Taylor@Sun.COM 	uint32_t	rsrv2[6];
5109517SBill.Taylor@Sun.COM 
511*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rdmardc_entry_sz :16;	/* 0x80 */
5129517SBill.Taylor@Sun.COM 	uint32_t	qpc_entry_sz	:16;
5139517SBill.Taylor@Sun.COM 
514*12965SWilliam.Taylor@Oracle.COM 	uint32_t	aux_entry_sz	:16;	/* 0x84 */
5159517SBill.Taylor@Sun.COM 	uint32_t	altc_entry_sz	:16;
5169517SBill.Taylor@Sun.COM 
517*12965SWilliam.Taylor@Oracle.COM 	uint32_t	eqc_entry_sz	:16;	/* 0x88 */
5189517SBill.Taylor@Sun.COM 	uint32_t	cqc_entry_sz	:16;
5199517SBill.Taylor@Sun.COM 
520*12965SWilliam.Taylor@Oracle.COM 	uint32_t	srq_entry_sz	:16;	/* 0x8C */
5219517SBill.Taylor@Sun.COM 	uint32_t	cmpt_entry_sz	:16;
5229517SBill.Taylor@Sun.COM 
523*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mtt_entry_sz	:16;	/* 0x90 */
5249517SBill.Taylor@Sun.COM 	uint32_t	dmpt_entry_sz	:16;
5259517SBill.Taylor@Sun.COM 
526*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:20;	/* 0x94 */
5279517SBill.Taylor@Sun.COM 	uint32_t	fast_reg_wr	:1;
5289517SBill.Taylor@Sun.COM 	uint32_t	reserved_lkey	:1;
5299517SBill.Taylor@Sun.COM 	uint32_t	win_type2	:1;
5309517SBill.Taylor@Sun.COM 	uint32_t			:1;
5319517SBill.Taylor@Sun.COM 	uint32_t	remote_inv	:1;
5329517SBill.Taylor@Sun.COM 	uint32_t	local_inv	:1;
5339517SBill.Taylor@Sun.COM 	uint32_t	lif		:1;
5349517SBill.Taylor@Sun.COM 	uint32_t	zb		:1;
5359517SBill.Taylor@Sun.COM 	uint32_t	bl		:1;
5369517SBill.Taylor@Sun.COM 	uint32_t	mps		:1;
5379517SBill.Taylor@Sun.COM 	uint32_t	win_type	:1;
5389517SBill.Taylor@Sun.COM 	uint32_t	bmme		:1;
5399517SBill.Taylor@Sun.COM 
5409517SBill.Taylor@Sun.COM 	uint32_t	rsv_lkey;
5419517SBill.Taylor@Sun.COM 
5429517SBill.Taylor@Sun.COM 	uint32_t			:32;
5439517SBill.Taylor@Sun.COM 
5449517SBill.Taylor@Sun.COM 	uint64_t	max_icm_size;
545*12965SWilliam.Taylor@Oracle.COM 						/* 0xA0 */
5469517SBill.Taylor@Sun.COM 	uint32_t	rsrv3[22];
5479517SBill.Taylor@Sun.COM };
5489517SBill.Taylor@Sun.COM #endif
5499517SBill.Taylor@Sun.COM 
5509517SBill.Taylor@Sun.COM 
5519517SBill.Taylor@Sun.COM 
5529517SBill.Taylor@Sun.COM /*
5539517SBill.Taylor@Sun.COM  * Hermon "QUERY_FW" command
5549517SBill.Taylor@Sun.COM  *    The QUERY_FW command retrieves the firmware revision and the Command
5559517SBill.Taylor@Sun.COM  *    Interface revision.  The command also returns the HCA attached local
5569517SBill.Taylor@Sun.COM  *    memory area (DDR) which is used by the firmware.  Below we also
5579517SBill.Taylor@Sun.COM  *    include some defines which are used to enforce a minimum firmware
5589517SBill.Taylor@Sun.COM  *    version check (see hermon_fw_version_check() for more details).
5599517SBill.Taylor@Sun.COM  */
5609517SBill.Taylor@Sun.COM 
5619517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
5629517SBill.Taylor@Sun.COM struct hermon_hw_queryfw_s {
5639517SBill.Taylor@Sun.COM 	uint32_t	fw_rev_minor	:16;
5649517SBill.Taylor@Sun.COM 	uint32_t	fw_rev_subminor	:16;
5659517SBill.Taylor@Sun.COM 
5669517SBill.Taylor@Sun.COM 	uint32_t	fw_rev_major	:16;
5679517SBill.Taylor@Sun.COM 	uint32_t	fw_pages	:16;
5689517SBill.Taylor@Sun.COM 
5699517SBill.Taylor@Sun.COM 	uint32_t	log_max_cmd	:8;
5709517SBill.Taylor@Sun.COM 	uint32_t			:23;
5719517SBill.Taylor@Sun.COM 	uint32_t	dbg_trace	:1;
5729517SBill.Taylor@Sun.COM 
5739517SBill.Taylor@Sun.COM 	uint32_t	cmd_intf_rev	:16;
5749517SBill.Taylor@Sun.COM 	uint32_t			:16;
5759517SBill.Taylor@Sun.COM 
576*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fw_day		:8;
5779517SBill.Taylor@Sun.COM 	uint32_t	fw_month	:8;
578*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fw_year		:16;
5799517SBill.Taylor@Sun.COM 
5809517SBill.Taylor@Sun.COM 	uint32_t			:1;
581*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ccq		:1;	/* currently not def'd */
5829517SBill.Taylor@Sun.COM 	uint32_t			:6;
583*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fw_sec		:8;
584*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fw_min		:8;
585*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fw_hour		:8;
5869517SBill.Taylor@Sun.COM 
5879517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[2];
5889517SBill.Taylor@Sun.COM 
5899517SBill.Taylor@Sun.COM 	uint64_t	clr_intr_offs;
5909517SBill.Taylor@Sun.COM 
5919517SBill.Taylor@Sun.COM 	uint32_t			:32;
5929517SBill.Taylor@Sun.COM 
5939517SBill.Taylor@Sun.COM 	uint32_t			:30;
5949517SBill.Taylor@Sun.COM 	uint32_t	clr_int_bar	:2;
5959517SBill.Taylor@Sun.COM 
5969517SBill.Taylor@Sun.COM 	uint64_t	error_buf_addr;
5979517SBill.Taylor@Sun.COM 
5989517SBill.Taylor@Sun.COM 	uint32_t			:30;
5999517SBill.Taylor@Sun.COM 	uint32_t	err_buf_bar	:2;
6009517SBill.Taylor@Sun.COM 
6019517SBill.Taylor@Sun.COM 	uint32_t	error_buf_sz;
6029517SBill.Taylor@Sun.COM 
603*12965SWilliam.Taylor@Oracle.COM 	uint64_t	vf_com_ch_addr;
604*12965SWilliam.Taylor@Oracle.COM 
605*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
606*12965SWilliam.Taylor@Oracle.COM 
607*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:30;
608*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vf_com_ch_bar	:2;
609*12965SWilliam.Taylor@Oracle.COM 
610*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv2[44];
6119517SBill.Taylor@Sun.COM };
612*12965SWilliam.Taylor@Oracle.COM #else	/* BIG ENDIAN */
6139517SBill.Taylor@Sun.COM struct hermon_hw_queryfw_s {
6149517SBill.Taylor@Sun.COM 	uint32_t	fw_pages	:16;
6159517SBill.Taylor@Sun.COM 	uint32_t	fw_rev_major	:16;
6169517SBill.Taylor@Sun.COM 
6179517SBill.Taylor@Sun.COM 	uint32_t	fw_rev_subminor	:16;
6189517SBill.Taylor@Sun.COM 	uint32_t	fw_rev_minor	:16;
6199517SBill.Taylor@Sun.COM 
6209517SBill.Taylor@Sun.COM 	uint32_t			:16;
6219517SBill.Taylor@Sun.COM 	uint32_t	cmd_intf_rev	:16;
6229517SBill.Taylor@Sun.COM 
6239517SBill.Taylor@Sun.COM 	uint32_t	dbg_trace	:1;
6249517SBill.Taylor@Sun.COM 	uint32_t			:23;
6259517SBill.Taylor@Sun.COM 	uint32_t	log_max_cmd	:8;
6269517SBill.Taylor@Sun.COM 
627*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fw_hour		:8;
628*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fw_min		:8;
629*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fw_sec		:8;
6309517SBill.Taylor@Sun.COM 	uint32_t			:6;
631*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ccq		:1;	/* currently not def'd */
6329517SBill.Taylor@Sun.COM 	uint32_t			:1;
6339517SBill.Taylor@Sun.COM 
634*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fw_year		:16;
6359517SBill.Taylor@Sun.COM 	uint32_t	fw_month	:8;
636*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fw_day		:8;
6379517SBill.Taylor@Sun.COM 
6389517SBill.Taylor@Sun.COM 	uint32_t	rsrv1[2];
6399517SBill.Taylor@Sun.COM 
6409517SBill.Taylor@Sun.COM 	uint64_t	clr_intr_offs;
6419517SBill.Taylor@Sun.COM 
6429517SBill.Taylor@Sun.COM 	uint32_t	clr_int_bar	:2;
6439517SBill.Taylor@Sun.COM 	uint32_t			:30;
6449517SBill.Taylor@Sun.COM 
6459517SBill.Taylor@Sun.COM 	uint32_t			:32;
6469517SBill.Taylor@Sun.COM 
6479517SBill.Taylor@Sun.COM 	uint64_t	error_buf_addr;
6489517SBill.Taylor@Sun.COM 
6499517SBill.Taylor@Sun.COM 	uint32_t	error_buf_sz;
6509517SBill.Taylor@Sun.COM 
6519517SBill.Taylor@Sun.COM 	uint32_t	err_buf_bar	:2;
6529517SBill.Taylor@Sun.COM 	uint32_t			:30;
6539517SBill.Taylor@Sun.COM 
654*12965SWilliam.Taylor@Oracle.COM 	uint64_t	vf_com_ch_addr;
655*12965SWilliam.Taylor@Oracle.COM 
656*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vf_com_ch_bar	:2;
657*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:30;
658*12965SWilliam.Taylor@Oracle.COM 
659*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
660*12965SWilliam.Taylor@Oracle.COM 
661*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv2[44];
6629517SBill.Taylor@Sun.COM };
6639517SBill.Taylor@Sun.COM #endif
6649517SBill.Taylor@Sun.COM 
6659517SBill.Taylor@Sun.COM /*
66612647SWilliam.Taylor@Oracle.COM  * 2.6.000 is critical for some performance features, e.g., Reserved_Lkey,
66712647SWilliam.Taylor@Oracle.COM  * and 2.7.000 is needed for FRWR and FCoIB.  Requiring 2.6.000 now so that
66812647SWilliam.Taylor@Oracle.COM  * existing customers get the performance, but are not required to upgrade
66912647SWilliam.Taylor@Oracle.COM  * to the latest.  Less than 2.6.000 will cause the driver to attach in
67012647SWilliam.Taylor@Oracle.COM  * maintenance mode, and throw an FMA event about upgrading the firmware.
6719517SBill.Taylor@Sun.COM  */
6729517SBill.Taylor@Sun.COM 
67312647SWilliam.Taylor@Oracle.COM #define	HERMON_FW_VER_MAJOR		0x0002
67412647SWilliam.Taylor@Oracle.COM #define	HERMON_FW_VER_MINOR		0x0006
6759517SBill.Taylor@Sun.COM #define	HERMON_FW_VER_SUBMINOR		0x0000
6769517SBill.Taylor@Sun.COM 
6779517SBill.Taylor@Sun.COM /*
6789517SBill.Taylor@Sun.COM  * Hermon "QUERY_ADAPTER" command
6799517SBill.Taylor@Sun.COM  *    The QUERY_ADAPTER command retrieves adapter specific parameters. The
6809517SBill.Taylor@Sun.COM  *    command also retrieves the PCI(X) interrupt pin routing for each of
6819517SBill.Taylor@Sun.COM  *    the INTx# pins supported by the device.  This information is used by
6829517SBill.Taylor@Sun.COM  *    the driver during interrupt processing in order to clear the appropriate
6839517SBill.Taylor@Sun.COM  *    interrupt bit.
6849517SBill.Taylor@Sun.COM  */
6859517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
6869517SBill.Taylor@Sun.COM struct hermon_hw_queryadapter_s {
6879517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[4];
6889517SBill.Taylor@Sun.COM 
6899517SBill.Taylor@Sun.COM 	uint32_t			:32;
6909517SBill.Taylor@Sun.COM 
6919517SBill.Taylor@Sun.COM 	uint32_t			:24;
6929517SBill.Taylor@Sun.COM 	uint32_t	inta_pin	:8;
6939517SBill.Taylor@Sun.COM 
6949517SBill.Taylor@Sun.COM 	uint32_t	vsd_vend_id	:16;		/* added v35 hermon */
6959517SBill.Taylor@Sun.COM 	uint32_t			:16;
6969517SBill.Taylor@Sun.COM 
6979517SBill.Taylor@Sun.COM 	uint32_t			:32;
6989517SBill.Taylor@Sun.COM 
6999517SBill.Taylor@Sun.COM 	uint32_t	vsd[52];
7009517SBill.Taylor@Sun.COM 	uint32_t	psid[4];
7019517SBill.Taylor@Sun.COM };
7029517SBill.Taylor@Sun.COM #else
7039517SBill.Taylor@Sun.COM struct hermon_hw_queryadapter_s {
7049517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[4];
7059517SBill.Taylor@Sun.COM 
7069517SBill.Taylor@Sun.COM 	uint32_t	inta_pin	:8;
7079517SBill.Taylor@Sun.COM 	uint32_t			:24;
7089517SBill.Taylor@Sun.COM 
7099517SBill.Taylor@Sun.COM 	uint32_t			:32;
7109517SBill.Taylor@Sun.COM 
7119517SBill.Taylor@Sun.COM 	uint32_t			:32;
7129517SBill.Taylor@Sun.COM 
7139517SBill.Taylor@Sun.COM 	uint32_t			:16;
7149517SBill.Taylor@Sun.COM 	uint32_t	vsd_vend_id	:16;		/* added v35 hermon */
7159517SBill.Taylor@Sun.COM 
7169517SBill.Taylor@Sun.COM 	uint32_t	vsd[52];
7179517SBill.Taylor@Sun.COM 	uint32_t	psid[4];
7189517SBill.Taylor@Sun.COM };
7199517SBill.Taylor@Sun.COM #endif
7209517SBill.Taylor@Sun.COM #define	HERMON_REV_A0	0xA0
7219517SBill.Taylor@Sun.COM #define	HERMON_REV_A1	0xA1
7229517SBill.Taylor@Sun.COM 
7239517SBill.Taylor@Sun.COM /*
7249517SBill.Taylor@Sun.COM  * Virtual physical mapping structure for: MAP_FA, MAP_ICM_AUX, and
7259517SBill.Taylor@Sun.COM  * MAP_ICM commands.
7269517SBill.Taylor@Sun.COM  */
7279517SBill.Taylor@Sun.COM 
7289517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
7299517SBill.Taylor@Sun.COM struct hermon_hw_vpm_s {
7309517SBill.Taylor@Sun.COM 	uint32_t			:12;
7319517SBill.Taylor@Sun.COM 	uint32_t	vaddr_l		:20;
732*12965SWilliam.Taylor@Oracle.COM 
7339517SBill.Taylor@Sun.COM 	uint32_t	vaddr_h;
7349517SBill.Taylor@Sun.COM 
735*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log2sz		:5;	/* in 4KB pages */
7369517SBill.Taylor@Sun.COM 	uint32_t			:7;
7379517SBill.Taylor@Sun.COM 	uint32_t	paddr_l		:20;
738*12965SWilliam.Taylor@Oracle.COM 
7399517SBill.Taylor@Sun.COM 	uint32_t	paddr_h;
7409517SBill.Taylor@Sun.COM };
7419517SBill.Taylor@Sun.COM #else
7429517SBill.Taylor@Sun.COM struct hermon_hw_vpm_s {
7439517SBill.Taylor@Sun.COM 	uint32_t	vaddr_h;
744*12965SWilliam.Taylor@Oracle.COM 
7459517SBill.Taylor@Sun.COM 	uint32_t	vaddr_l		:20;
7469517SBill.Taylor@Sun.COM 	uint32_t			:12;
7479517SBill.Taylor@Sun.COM 
7489517SBill.Taylor@Sun.COM 	uint32_t	paddr_h;
749*12965SWilliam.Taylor@Oracle.COM 
7509517SBill.Taylor@Sun.COM 	uint32_t	paddr_l		:20;
7519517SBill.Taylor@Sun.COM 	uint32_t			:7;
752*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log2sz		:5;	/* in 4KB pages */
7539517SBill.Taylor@Sun.COM };
7549517SBill.Taylor@Sun.COM #endif
7559517SBill.Taylor@Sun.COM 
7569517SBill.Taylor@Sun.COM 
7579517SBill.Taylor@Sun.COM 
7589517SBill.Taylor@Sun.COM 
7599517SBill.Taylor@Sun.COM /*
7609517SBill.Taylor@Sun.COM  * Hermon "INIT_HCA" and "QUERY_HCA" commands
7619517SBill.Taylor@Sun.COM  *    The INIT_HCA command configures all HCA resources in HCA attached local
7629517SBill.Taylor@Sun.COM  *    memory and some system relevant information.  The same mailbox output
7639517SBill.Taylor@Sun.COM  *    format is used by the QUERY_HCA command.  All parameters, which are
7649517SBill.Taylor@Sun.COM  *    specifically the output of the QUERY_HCA command are marked as
7659517SBill.Taylor@Sun.COM  *    "QUERY_HCA only".  These parameters are not configurable through the
7669517SBill.Taylor@Sun.COM  *    INIT_HCA command, but can be retrieved as read-only through the
7679517SBill.Taylor@Sun.COM  *    QUERY_HCA command.
7689517SBill.Taylor@Sun.COM  *
7699517SBill.Taylor@Sun.COM  *    Below we first define several structures which help make up the whole
7709517SBill.Taylor@Sun.COM  *    of the INIT_HCA/QUERY_HCA command.  These are:
7719517SBill.Taylor@Sun.COM  *    hermon_hw_qp_ee_cq_eq_rdb_t for "QPC/EEC/CQC/EQC/RDB Parameters",
7729517SBill.Taylor@Sun.COM  *    hermon_udav_mem_param_t for "Memory Access Parameters for UDAV Table",
7739517SBill.Taylor@Sun.COM  *    hermon_multicast_param_t for "Multicast Support Parameters",
7749517SBill.Taylor@Sun.COM  *    hermon_tpt_param_t for "Translation and Protection Table Parameters",
7759517SBill.Taylor@Sun.COM  *    and hermon_uar_param_t for Hermon "UAR Parameters".
7769517SBill.Taylor@Sun.COM  */
7779517SBill.Taylor@Sun.COM 
7789517SBill.Taylor@Sun.COM /*
7799517SBill.Taylor@Sun.COM  *  need to consider removing any ref to "ee", hermon doesn't support
7809517SBill.Taylor@Sun.COM  *       ee/rd stuff, and they've taken away the pretense
7819517SBill.Taylor@Sun.COM  */
7829517SBill.Taylor@Sun.COM 
7839517SBill.Taylor@Sun.COM 
7849517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
7859517SBill.Taylor@Sun.COM typedef struct hermon_hw_qp_ee_cq_eq_rdb_s {
7869517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[4];
7879517SBill.Taylor@Sun.COM 
7889517SBill.Taylor@Sun.COM 	uint32_t	log_num_qp	:5;
7899517SBill.Taylor@Sun.COM 	uint32_t	qpc_baseaddr_l	:27;
7909517SBill.Taylor@Sun.COM 	uint32_t	qpc_baseaddr_h;
7919517SBill.Taylor@Sun.COM 
7929517SBill.Taylor@Sun.COM 	uint32_t	rsrv1[4];
7939517SBill.Taylor@Sun.COM 
7949517SBill.Taylor@Sun.COM 	uint32_t	log_num_srq	:5;
7959517SBill.Taylor@Sun.COM 	uint32_t	srqc_baseaddr_l	:27;
7969517SBill.Taylor@Sun.COM 	uint32_t	srqc_baseaddr_h;
7979517SBill.Taylor@Sun.COM 
7989517SBill.Taylor@Sun.COM 	uint32_t	log_num_cq	:5;
7999517SBill.Taylor@Sun.COM 	uint32_t	cqc_baseaddr_l	:27;
8009517SBill.Taylor@Sun.COM 	uint32_t	cqc_baseaddr_h;
8019517SBill.Taylor@Sun.COM 
8029517SBill.Taylor@Sun.COM 	uint32_t	rsrv2[2];
8039517SBill.Taylor@Sun.COM 
8049517SBill.Taylor@Sun.COM 	uint64_t	altc_baseaddr;
8059517SBill.Taylor@Sun.COM 
8069517SBill.Taylor@Sun.COM 	uint32_t	rsrv3[2];
8079517SBill.Taylor@Sun.COM 
8089517SBill.Taylor@Sun.COM 	uint64_t	auxc_baseaddr;
8099517SBill.Taylor@Sun.COM 
8109517SBill.Taylor@Sun.COM 	uint32_t	rsrv4[2];
8119517SBill.Taylor@Sun.COM 
8129517SBill.Taylor@Sun.COM 	uint32_t	log_num_eq	:5;
8139517SBill.Taylor@Sun.COM 	uint32_t	eqc_baseaddr_l	:27;
8149517SBill.Taylor@Sun.COM 	uint32_t	eqc_baseaddr_h;
8159517SBill.Taylor@Sun.COM 
8169517SBill.Taylor@Sun.COM 	uint32_t	rsv5[2];
8179517SBill.Taylor@Sun.COM 
8189517SBill.Taylor@Sun.COM 	uint32_t	log_num_rdmardc	:3;
8199517SBill.Taylor@Sun.COM 	uint32_t			:2;
8209517SBill.Taylor@Sun.COM 	uint32_t	rdmardc_baseaddr_l :27;
8219517SBill.Taylor@Sun.COM 	uint32_t	rdmardc_baseaddr_h;
8229517SBill.Taylor@Sun.COM 
8239517SBill.Taylor@Sun.COM 	uint32_t	rsrv6[2];
8249517SBill.Taylor@Sun.COM } hermon_hw_qp_ee_cq_eq_rdb_t;
825*12965SWilliam.Taylor@Oracle.COM #else	/* BIG ENDIAN */
8269517SBill.Taylor@Sun.COM typedef struct hermon_hw_qp_ee_cq_eq_rdb_s {
8279517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[4];
8289517SBill.Taylor@Sun.COM 
8299517SBill.Taylor@Sun.COM 	uint32_t	qpc_baseaddr_h;
8309517SBill.Taylor@Sun.COM 	uint32_t	qpc_baseaddr_l	:27;
8319517SBill.Taylor@Sun.COM 	uint32_t	log_num_qp	:5;
8329517SBill.Taylor@Sun.COM 
8339517SBill.Taylor@Sun.COM 	uint32_t	rsrv1[4];
8349517SBill.Taylor@Sun.COM 
8359517SBill.Taylor@Sun.COM 	uint32_t	srqc_baseaddr_h;
8369517SBill.Taylor@Sun.COM 	uint32_t	srqc_baseaddr_l	:27;
8379517SBill.Taylor@Sun.COM 	uint32_t	log_num_srq	:5;
8389517SBill.Taylor@Sun.COM 
8399517SBill.Taylor@Sun.COM 	uint32_t	cqc_baseaddr_h;
8409517SBill.Taylor@Sun.COM 	uint32_t	cqc_baseaddr_l	:27;
8419517SBill.Taylor@Sun.COM 	uint32_t	log_num_cq	:5;
8429517SBill.Taylor@Sun.COM 
8439517SBill.Taylor@Sun.COM 	uint32_t	rsrv2[2];
8449517SBill.Taylor@Sun.COM 
8459517SBill.Taylor@Sun.COM 	uint64_t	altc_baseaddr;
8469517SBill.Taylor@Sun.COM 
8479517SBill.Taylor@Sun.COM 	uint32_t	rsrv3[2];
8489517SBill.Taylor@Sun.COM 
8499517SBill.Taylor@Sun.COM 	uint64_t	auxc_baseaddr;
8509517SBill.Taylor@Sun.COM 
8519517SBill.Taylor@Sun.COM 	uint32_t	rsrv4[2];
8529517SBill.Taylor@Sun.COM 
8539517SBill.Taylor@Sun.COM 	uint32_t	eqc_baseaddr_h;
8549517SBill.Taylor@Sun.COM 	uint32_t	eqc_baseaddr_l	:27;
8559517SBill.Taylor@Sun.COM 	uint32_t	log_num_eq	:5;
8569517SBill.Taylor@Sun.COM 
8579517SBill.Taylor@Sun.COM 	uint32_t	rsv5[2];
8589517SBill.Taylor@Sun.COM 
8599517SBill.Taylor@Sun.COM 	uint32_t	rdmardc_baseaddr_h;
8609517SBill.Taylor@Sun.COM 	uint32_t	rdmardc_baseaddr_l :27;
8619517SBill.Taylor@Sun.COM 	uint32_t			:2;
8629517SBill.Taylor@Sun.COM 	uint32_t	log_num_rdmardc	:3;
8639517SBill.Taylor@Sun.COM 
8649517SBill.Taylor@Sun.COM 	uint32_t	rsrv6[2];
8659517SBill.Taylor@Sun.COM } hermon_hw_qp_ee_cq_eq_rdb_t;
8669517SBill.Taylor@Sun.COM #endif
8679517SBill.Taylor@Sun.COM 
8689517SBill.Taylor@Sun.COM 
8699517SBill.Taylor@Sun.COM 
8709517SBill.Taylor@Sun.COM 
8719517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
8729517SBill.Taylor@Sun.COM typedef struct hermon_multicast_param_s {
8739517SBill.Taylor@Sun.COM 	uint64_t	mc_baseaddr;
8749517SBill.Taylor@Sun.COM 
8759517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[2];
8769517SBill.Taylor@Sun.COM 
8779517SBill.Taylor@Sun.COM 	uint32_t	log_mc_tbl_hash_sz :5;
8789517SBill.Taylor@Sun.COM 	uint32_t			:27;
8799517SBill.Taylor@Sun.COM 
8809517SBill.Taylor@Sun.COM 	uint32_t	log_mc_tbl_ent	:5;
8819517SBill.Taylor@Sun.COM 	uint32_t			:27;
8829517SBill.Taylor@Sun.COM 
8839517SBill.Taylor@Sun.COM 	uint32_t			:32;
8849517SBill.Taylor@Sun.COM 
8859517SBill.Taylor@Sun.COM 	uint32_t	log_mc_tbl_sz	:5;
8869517SBill.Taylor@Sun.COM 	uint32_t			:19;
8879517SBill.Taylor@Sun.COM 	uint32_t	mc_hash_fn	:3;
8889517SBill.Taylor@Sun.COM 	uint32_t			:5;
8899517SBill.Taylor@Sun.COM } hermon_multicast_param_t;
890*12965SWilliam.Taylor@Oracle.COM #else	/* BIG ENDIAN */
8919517SBill.Taylor@Sun.COM typedef struct hermon_multicast_param_s {
8929517SBill.Taylor@Sun.COM 	uint64_t	mc_baseaddr;
8939517SBill.Taylor@Sun.COM 
8949517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[2];
8959517SBill.Taylor@Sun.COM 
8969517SBill.Taylor@Sun.COM 	uint32_t			:27;
8979517SBill.Taylor@Sun.COM 	uint32_t	log_mc_tbl_ent	:5;
8989517SBill.Taylor@Sun.COM 
8999517SBill.Taylor@Sun.COM 	uint32_t			:27;
9009517SBill.Taylor@Sun.COM 	uint32_t	log_mc_tbl_hash_sz :5;
9019517SBill.Taylor@Sun.COM 
9029517SBill.Taylor@Sun.COM 	uint32_t			:5;
9039517SBill.Taylor@Sun.COM 	uint32_t	mc_hash_fn	:3;
9049517SBill.Taylor@Sun.COM 	uint32_t			:19;
9059517SBill.Taylor@Sun.COM 	uint32_t	log_mc_tbl_sz	:5;
9069517SBill.Taylor@Sun.COM 
9079517SBill.Taylor@Sun.COM 	uint32_t			:32;
9089517SBill.Taylor@Sun.COM } hermon_multicast_param_t;
9099517SBill.Taylor@Sun.COM #endif
9109517SBill.Taylor@Sun.COM 
9119517SBill.Taylor@Sun.COM #define	HERMON_MCG_DEFAULT_HASH_FN	0x0
9129517SBill.Taylor@Sun.COM 
9139517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
9149517SBill.Taylor@Sun.COM typedef struct hermon_tpt_param_s {
9159517SBill.Taylor@Sun.COM 	uint64_t	dmpt_baseaddr;
9169517SBill.Taylor@Sun.COM 
9179517SBill.Taylor@Sun.COM 	uint32_t			:32;
918*12965SWilliam.Taylor@Oracle.COM 
9199517SBill.Taylor@Sun.COM 	uint32_t	log_dmpt_sz	:6;
9209517SBill.Taylor@Sun.COM 	uint32_t			:2;
9219517SBill.Taylor@Sun.COM 	uint32_t	pgfault_rnr_to	:5;
9229517SBill.Taylor@Sun.COM 	uint32_t			:19;
9239517SBill.Taylor@Sun.COM 
9249517SBill.Taylor@Sun.COM 	uint64_t	mtt_baseaddr;
9259517SBill.Taylor@Sun.COM 
9269517SBill.Taylor@Sun.COM 	uint64_t	cmpt_baseaddr;
9279517SBill.Taylor@Sun.COM } hermon_tpt_param_t;
928*12965SWilliam.Taylor@Oracle.COM #else	/* BIG ENDIAN */
9299517SBill.Taylor@Sun.COM typedef struct hermon_tpt_param_s {
9309517SBill.Taylor@Sun.COM 	uint64_t	dmpt_baseaddr;
9319517SBill.Taylor@Sun.COM 
9329517SBill.Taylor@Sun.COM 	uint32_t			:19;
9339517SBill.Taylor@Sun.COM 	uint32_t	pgfault_rnr_to	:5;
9349517SBill.Taylor@Sun.COM 	uint32_t			:2;
9359517SBill.Taylor@Sun.COM 	uint32_t	log_dmpt_sz	:6;
936*12965SWilliam.Taylor@Oracle.COM 
9379517SBill.Taylor@Sun.COM 	uint32_t			:32;
9389517SBill.Taylor@Sun.COM 
9399517SBill.Taylor@Sun.COM 	uint64_t	mtt_baseaddr;
9409517SBill.Taylor@Sun.COM 
9419517SBill.Taylor@Sun.COM 	uint64_t	cmpt_baseaddr;
9429517SBill.Taylor@Sun.COM } hermon_tpt_param_t;
9439517SBill.Taylor@Sun.COM #endif
9449517SBill.Taylor@Sun.COM 
9459517SBill.Taylor@Sun.COM 
9469517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
9479517SBill.Taylor@Sun.COM typedef struct hermon_uar_param_s {
9489517SBill.Taylor@Sun.COM 	uint32_t	rsvd0[2];
9499517SBill.Taylor@Sun.COM 
9509517SBill.Taylor@Sun.COM 	uint32_t			:32;
9519517SBill.Taylor@Sun.COM 
9529517SBill.Taylor@Sun.COM 	uint32_t	uar_pg_sz	:8;
9539517SBill.Taylor@Sun.COM 	uint32_t	log_max_uars	:4;
9549517SBill.Taylor@Sun.COM 	uint32_t			:20;
9559517SBill.Taylor@Sun.COM 
9569517SBill.Taylor@Sun.COM 	uint32_t	resvd1[4];
9579517SBill.Taylor@Sun.COM } hermon_uar_param_t;
9589517SBill.Taylor@Sun.COM #else
9599517SBill.Taylor@Sun.COM typedef struct hermon_uar_param_s {
9609517SBill.Taylor@Sun.COM 	uint32_t	rsvd0[2];
9619517SBill.Taylor@Sun.COM 
9629517SBill.Taylor@Sun.COM 	uint32_t			:20;
9639517SBill.Taylor@Sun.COM 	uint32_t	log_max_uars	:4;
9649517SBill.Taylor@Sun.COM 	uint32_t	uar_pg_sz	:8;
9659517SBill.Taylor@Sun.COM 
9669517SBill.Taylor@Sun.COM 	uint32_t			:32;
9679517SBill.Taylor@Sun.COM 
9689517SBill.Taylor@Sun.COM 	uint32_t	resvd1[4];
9699517SBill.Taylor@Sun.COM } hermon_uar_param_t;
9709517SBill.Taylor@Sun.COM #endif
9719517SBill.Taylor@Sun.COM 
9729517SBill.Taylor@Sun.COM /*
9739517SBill.Taylor@Sun.COM  * NEW for Hermon
9749517SBill.Taylor@Sun.COM  *   QP Allocation Params
975*12965SWilliam.Taylor@Oracle.COM  *	NOTE:  	as of PRM v0.50 no longer needed (ccq not supported
976*12965SWilliam.Taylor@Oracle.COM  *		leave structure here, just in case ccq comes back )
977*12965SWilliam.Taylor@Oracle.COM  *		but adjust the overall structure
978*12965SWilliam.Taylor@Oracle.COM  *		not to use it
9799517SBill.Taylor@Sun.COM  *
9809517SBill.Taylor@Sun.COM  */
9819517SBill.Taylor@Sun.COM 
9829517SBill.Taylor@Sun.COM #ifdef _LITTLE_ENDIAN
9839517SBill.Taylor@Sun.COM typedef struct hermon_qp_alloc_param_s {
9849517SBill.Taylor@Sun.COM 	uint32_t			:32;
9859517SBill.Taylor@Sun.COM 
9869517SBill.Taylor@Sun.COM 	uint32_t	ccq_base	:24;
9879517SBill.Taylor@Sun.COM 	uint32_t	log2ccqs	:5;
9889517SBill.Taylor@Sun.COM 	uint32_t			:2;
9899517SBill.Taylor@Sun.COM 	uint32_t	ccq_en	:1;
9909517SBill.Taylor@Sun.COM 
9919517SBill.Taylor@Sun.COM 	uint32_t	rsvd[6];	/* but 0x14 def'd for fibre channel */
9929517SBill.Taylor@Sun.COM } hermon_qp_alloc_param_t;
9939517SBill.Taylor@Sun.COM #else /* BIG ENDIAN */
9949517SBill.Taylor@Sun.COM typedef struct hermon_qp_alloc_param_s {
9959517SBill.Taylor@Sun.COM 	uint32_t	ccq_en		:1;
9969517SBill.Taylor@Sun.COM 	uint32_t			:2;
9979517SBill.Taylor@Sun.COM 	uint32_t	log2ccqs	:5;
9989517SBill.Taylor@Sun.COM 	uint32_t	ccq_base	:24;
9999517SBill.Taylor@Sun.COM 
10009517SBill.Taylor@Sun.COM 	uint32_t			:32;
10019517SBill.Taylor@Sun.COM 
10029517SBill.Taylor@Sun.COM 	uint32_t	rsvd[6];	/* but 0x14 def'd for fibre channel */
10039517SBill.Taylor@Sun.COM } hermon_qp_alloc_param_t;
10049517SBill.Taylor@Sun.COM #endif
10059517SBill.Taylor@Sun.COM 
1006*12965SWilliam.Taylor@Oracle.COM 
10079517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
10089517SBill.Taylor@Sun.COM struct hermon_hw_initqueryhca_s {
10099517SBill.Taylor@Sun.COM 	uint32_t			:32;
10109517SBill.Taylor@Sun.COM 
10119517SBill.Taylor@Sun.COM 	uint32_t			:24;
1012*12965SWilliam.Taylor@Oracle.COM 	uint32_t	version		:8;
10139517SBill.Taylor@Sun.COM 
10149517SBill.Taylor@Sun.COM 	uint32_t			:13;
10159517SBill.Taylor@Sun.COM 	uint32_t	log2_cacheline  :3;
10169517SBill.Taylor@Sun.COM 	uint32_t	hca_core_clock	:16;	/* QUERY_HCA only */
10179517SBill.Taylor@Sun.COM 
10189517SBill.Taylor@Sun.COM 	uint32_t			:32;
10199517SBill.Taylor@Sun.COM 
10209517SBill.Taylor@Sun.COM 	uint32_t	udav_port_chk	:1;
10219517SBill.Taylor@Sun.COM 	uint32_t	big_endian	:1;
1022*12965SWilliam.Taylor@Oracle.COM 	uint32_t	qos		:1;
10239517SBill.Taylor@Sun.COM 	uint32_t	chsum_en	:1;
1024*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:12;
1025*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cqpm_short_pkt_lim :14; /* short pkt limit for qpm */
1026*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cqmp		:2;	/* cq moderation policy */
10279517SBill.Taylor@Sun.COM 
10289517SBill.Taylor@Sun.COM 	uint32_t	router_qp	:24;
10299517SBill.Taylor@Sun.COM 	uint32_t			:5;
10309517SBill.Taylor@Sun.COM 	uint32_t	ipr2		:1;
10319517SBill.Taylor@Sun.COM 	uint32_t	ipr1		:1;
10329517SBill.Taylor@Sun.COM 	uint32_t	router_en	:1;
10339517SBill.Taylor@Sun.COM 
10349517SBill.Taylor@Sun.COM 	uint32_t	rsrv1[2];
10359517SBill.Taylor@Sun.COM 
10369517SBill.Taylor@Sun.COM 	hermon_hw_qp_ee_cq_eq_rdb_t	context;
10379517SBill.Taylor@Sun.COM 
10389517SBill.Taylor@Sun.COM 	uint32_t	rsrv2[8];
10399517SBill.Taylor@Sun.COM 
1040*12965SWilliam.Taylor@Oracle.COM 	hermon_multicast_param_t	multi;
10419517SBill.Taylor@Sun.COM 
10429517SBill.Taylor@Sun.COM 	uint32_t	rsrv3[4];
10439517SBill.Taylor@Sun.COM 
10449517SBill.Taylor@Sun.COM 	hermon_tpt_param_t		tpt;
10459517SBill.Taylor@Sun.COM 
10469517SBill.Taylor@Sun.COM 	uint32_t	rsrv4[4];
10479517SBill.Taylor@Sun.COM 
10489517SBill.Taylor@Sun.COM 	hermon_uar_param_t		uar;
10499517SBill.Taylor@Sun.COM 
1050*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv5[36];
1051*12965SWilliam.Taylor@Oracle.COM 
1052*12965SWilliam.Taylor@Oracle.COM 	hermon_multicast_param_t	enet_multi;
1053*12965SWilliam.Taylor@Oracle.COM 
1054*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv6[24];		/* to 0x24C */
1055*12965SWilliam.Taylor@Oracle.COM 
1056*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
1057*12965SWilliam.Taylor@Oracle.COM 
1058*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fcoe_t11	:1;	/* fcoe t11 frame enable */
1059*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:31;
1060*12965SWilliam.Taylor@Oracle.COM 
1061*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv7[42];		/* 0x254 - 0x2FC */
10629517SBill.Taylor@Sun.COM };
10639517SBill.Taylor@Sun.COM #else	/* BIG ENDIAN */
10649517SBill.Taylor@Sun.COM struct hermon_hw_initqueryhca_s {
1065*12965SWilliam.Taylor@Oracle.COM 	uint32_t	version		:8;
10669517SBill.Taylor@Sun.COM 	uint32_t			:24;
10679517SBill.Taylor@Sun.COM 
10689517SBill.Taylor@Sun.COM 	uint32_t			:32;
10699517SBill.Taylor@Sun.COM 
10709517SBill.Taylor@Sun.COM 	uint32_t			:32;
10719517SBill.Taylor@Sun.COM 
10729517SBill.Taylor@Sun.COM 	uint32_t	hca_core_clock	:16;	/* QUERY_HCA only */
10739517SBill.Taylor@Sun.COM 	uint32_t	log2_cacheline	:3;
10749517SBill.Taylor@Sun.COM 	uint32_t			:13;
10759517SBill.Taylor@Sun.COM 
10769517SBill.Taylor@Sun.COM 	uint32_t	router_en	:1;
10779517SBill.Taylor@Sun.COM 	uint32_t	ipr1		:1;
10789517SBill.Taylor@Sun.COM 	uint32_t	ipr2		:1;
10799517SBill.Taylor@Sun.COM 	uint32_t			:5;
10809517SBill.Taylor@Sun.COM 	uint32_t	router_qp	:24;
10819517SBill.Taylor@Sun.COM 
1082*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cqmp		:2;	/* cq moderation policy */
1083*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cqpm_short_pkt_lim :14; /* short pkt limit for qpm */
1084*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:12;
10859517SBill.Taylor@Sun.COM 	uint32_t	chsum_en	:1;
1086*12965SWilliam.Taylor@Oracle.COM 	uint32_t	qos		:1;
10879517SBill.Taylor@Sun.COM 	uint32_t	big_endian	:1;
10889517SBill.Taylor@Sun.COM 	uint32_t	udav_port_chk	:1;
10899517SBill.Taylor@Sun.COM 
10909517SBill.Taylor@Sun.COM 	uint32_t	rsrv1[2];
10919517SBill.Taylor@Sun.COM 
10929517SBill.Taylor@Sun.COM 	hermon_hw_qp_ee_cq_eq_rdb_t	context;
10939517SBill.Taylor@Sun.COM 
10949517SBill.Taylor@Sun.COM 	uint32_t	rsrv2[8];
10959517SBill.Taylor@Sun.COM 
1096*12965SWilliam.Taylor@Oracle.COM 	hermon_multicast_param_t	multi;
10979517SBill.Taylor@Sun.COM 
10989517SBill.Taylor@Sun.COM 	uint32_t	rsrv3[4];
10999517SBill.Taylor@Sun.COM 
11009517SBill.Taylor@Sun.COM 	hermon_tpt_param_t		tpt;
11019517SBill.Taylor@Sun.COM 
11029517SBill.Taylor@Sun.COM 	uint32_t	rsrv4[4];
11039517SBill.Taylor@Sun.COM 
11049517SBill.Taylor@Sun.COM 	hermon_uar_param_t		uar;
11059517SBill.Taylor@Sun.COM 
1106*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv5[36];
1107*12965SWilliam.Taylor@Oracle.COM 
1108*12965SWilliam.Taylor@Oracle.COM 	hermon_multicast_param_t	enet_multi;
1109*12965SWilliam.Taylor@Oracle.COM 
1110*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv6[24];		/* to 0x24C */
1111*12965SWilliam.Taylor@Oracle.COM 
1112*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:31;
1113*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fcoe_t11	:1;	/* fcoe t11 frame enable */
1114*12965SWilliam.Taylor@Oracle.COM 
1115*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
1116*12965SWilliam.Taylor@Oracle.COM 
1117*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv7[42];		/* 0x254 - 0x2FC */
11189517SBill.Taylor@Sun.COM };
11199517SBill.Taylor@Sun.COM #endif
11209517SBill.Taylor@Sun.COM #define	HERMON_UDAV_PROTECT_DISABLED	0x0
11219517SBill.Taylor@Sun.COM #define	HERMON_UDAV_PROTECT_ENABLED	0x1
11229517SBill.Taylor@Sun.COM #define	HERMON_UDAV_PORTCHK_DISABLED	0x0
11239517SBill.Taylor@Sun.COM #define	HERMON_UDAV_PORTCHK_ENABLED	0x1
11249517SBill.Taylor@Sun.COM 
11259517SBill.Taylor@Sun.COM 
11269517SBill.Taylor@Sun.COM /*
11279517SBill.Taylor@Sun.COM  * Hermon "INIT_IB"/"INIT_PORT" command
11289517SBill.Taylor@Sun.COM  *    The INIT_IB/INIT_PORT command enables the physical layer of an IB port.
11299517SBill.Taylor@Sun.COM  *    It provides control over the IB port attributes.  The capabilities
11309517SBill.Taylor@Sun.COM  *    requested here should not exceed the device limits, as retrieved by
11319517SBill.Taylor@Sun.COM  *    the QUERY_DEV_LIM/CAP command (above).  To query information about the IB
11329517SBill.Taylor@Sun.COM  *    port or node, the driver may submit GetPortInfo or GetNodeInfo MADs
11339517SBill.Taylor@Sun.COM  *    through the Hermon MAD_IFC command.
11349517SBill.Taylor@Sun.COM  *
11359517SBill.Taylor@Sun.COM  *	Changed name to initport, but operates similar to initib - but as of
11369517SBill.Taylor@Sun.COM  *	PRM v0.35c the initport just does that, and the params set previously
11379517SBill.Taylor@Sun.COM  *	by initib are now set in SET_PORT
11389517SBill.Taylor@Sun.COM  */
11399517SBill.Taylor@Sun.COM 
11409517SBill.Taylor@Sun.COM 
11419517SBill.Taylor@Sun.COM 
11429517SBill.Taylor@Sun.COM 
11439517SBill.Taylor@Sun.COM /*
11449517SBill.Taylor@Sun.COM  * HERMON query_port and set_port commands.  QUERY_PORT is new for hermon,
11459517SBill.Taylor@Sun.COM  *	doing some of what used to be done in the QUERY_DEV_CAP command.  It is
11469517SBill.Taylor@Sun.COM  *	introduced in PRM v0.35 and will need to be added to the list of
11479517SBill.Taylor@Sun.COM  *	supported HCA commands
11489517SBill.Taylor@Sun.COM  *
11499517SBill.Taylor@Sun.COM  *	SET_PORT is similar to the SET_IB command from tavor and arbel.  Here,
11509517SBill.Taylor@Sun.COM  *	tho, it's more extensive and will be easier to deal with I suspect by
11519517SBill.Taylor@Sun.COM  * 	making it a structure and filling it in and then doing the copy to the
11529517SBill.Taylor@Sun.COM  *	mailbox (instead of just writing the minimal information to the mailbox
11539517SBill.Taylor@Sun.COM  *	directly as was done for the previous HCAs).
11549517SBill.Taylor@Sun.COM  */
11559517SBill.Taylor@Sun.COM 
1156*12965SWilliam.Taylor@Oracle.COM /*
1157*12965SWilliam.Taylor@Oracle.COM  * 	PRM 0.4X and 0.50 changed the query_port to integrate the ethernet
1158*12965SWilliam.Taylor@Oracle.COM  *	stuff as well, so this is a signficant change to the structure
1159*12965SWilliam.Taylor@Oracle.COM  */
1160*12965SWilliam.Taylor@Oracle.COM 
11619517SBill.Taylor@Sun.COM #ifdef _LITTLE_ENDIAN
11629517SBill.Taylor@Sun.COM struct hermon_hw_query_port_s {
1163*12965SWilliam.Taylor@Oracle.COM 						/* 0x04 */
11649517SBill.Taylor@Sun.COM 	uint32_t	log_max_pkey 	:4;	/* pkey table size */
11659517SBill.Taylor@Sun.COM 	uint32_t	log_max_gid	:4;	/* max gids / port */
1166*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ib_port_wid	:8;
1167*12965SWilliam.Taylor@Oracle.COM 	/*
1168*12965SWilliam.Taylor@Oracle.COM 	 * Enet link speed - 0x0 10Gb XAUI, 0x01 10Gb XFI,
1169*12965SWilliam.Taylor@Oracle.COM 	 *	0x02 1Gb, 0xF other
1170*12965SWilliam.Taylor@Oracle.COM 	 */
1171*12965SWilliam.Taylor@Oracle.COM 	uint32_t	eth_link_spd	:4;
11729517SBill.Taylor@Sun.COM 	uint32_t			:4;
1173*12965SWilliam.Taylor@Oracle.COM 	/*
1174*12965SWilliam.Taylor@Oracle.COM 	 * IB Link speed - bit 0 SDR, bit1 DDR, Bit 2 QDR
1175*12965SWilliam.Taylor@Oracle.COM 	 */
1176*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ib_link_spd	:8;
1177*12965SWilliam.Taylor@Oracle.COM 
1178*12965SWilliam.Taylor@Oracle.COM 						/* 0x00 */
1179*12965SWilliam.Taylor@Oracle.COM 	uint32_t	eth_mtu		:16;	/* in bytes */
1180*12965SWilliam.Taylor@Oracle.COM 	/*
1181*12965SWilliam.Taylor@Oracle.COM 	 * IB MTU - 0x0 rsvd, 0x1=256, 0x2=512, 0x3=1024, 0x4=2048, 0x5=4096
1182*12965SWilliam.Taylor@Oracle.COM 	 */
1183*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ib_mtu		:4;
11849517SBill.Taylor@Sun.COM 	uint32_t			:4;
11859517SBill.Taylor@Sun.COM 	/*
1186*12965SWilliam.Taylor@Oracle.COM 	 * for next two if link down
1187*12965SWilliam.Taylor@Oracle.COM 	 * -> what port supports, if up
1188*12965SWilliam.Taylor@Oracle.COM 	 * -> what port is running
11899517SBill.Taylor@Sun.COM 	 */
1190*12965SWilliam.Taylor@Oracle.COM 
1191*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ib_link		:1;
1192*12965SWilliam.Taylor@Oracle.COM 	uint32_t	eth_link	:1;
1193*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1194*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vpi		:1;
1195*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:3;
1196*12965SWilliam.Taylor@Oracle.COM 	uint32_t	link_up		:1;
1197*12965SWilliam.Taylor@Oracle.COM 
1198*12965SWilliam.Taylor@Oracle.COM 
1199*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;	/* 0x0C */
1200*12965SWilliam.Taylor@Oracle.COM 
12019517SBill.Taylor@Sun.COM 	/* max vl's supported (not incl vl_15) */
1202*12965SWilliam.Taylor@Oracle.COM 	uint32_t	max_vl		:4;	/* 0x08 */
12039517SBill.Taylor@Sun.COM 	uint32_t			:4;
1204*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_max_mac	:4;
1205*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_max_vlan	:4;
12069517SBill.Taylor@Sun.COM 	uint32_t			:16;
12079517SBill.Taylor@Sun.COM 
1208*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_lo;
1209*12965SWilliam.Taylor@Oracle.COM 
1210*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_hi		:16;
1211*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
1212*12965SWilliam.Taylor@Oracle.COM 
1213*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd1[2];
12149517SBill.Taylor@Sun.COM };
1215*12965SWilliam.Taylor@Oracle.COM 
12169517SBill.Taylor@Sun.COM #else /* BIG ENDIAN */
12179517SBill.Taylor@Sun.COM struct hermon_hw_query_port_s {
1218*12965SWilliam.Taylor@Oracle.COM 						/* 0x00 */
1219*12965SWilliam.Taylor@Oracle.COM 	uint32_t	link_up		:1;
1220*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:3;
1221*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vpi		:1;
1222*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1223*12965SWilliam.Taylor@Oracle.COM 	/*
1224*12965SWilliam.Taylor@Oracle.COM 	 * for next two if link down
1225*12965SWilliam.Taylor@Oracle.COM 	 * -> what port supports, if up
1226*12965SWilliam.Taylor@Oracle.COM 	 * -> what port is running
1227*12965SWilliam.Taylor@Oracle.COM 	 */
1228*12965SWilliam.Taylor@Oracle.COM 	uint32_t	eth_link	:1;
1229*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ib_link		:1;
12309517SBill.Taylor@Sun.COM 	uint32_t			:4;
12319517SBill.Taylor@Sun.COM 	/*
1232*12965SWilliam.Taylor@Oracle.COM 	 * IB MTU - 0x0 rsvd, 0x1=256, 0x2=512, 0x3=1024, 0x4=2048, 0x5=4096
12339517SBill.Taylor@Sun.COM 	 */
12349517SBill.Taylor@Sun.COM 	uint32_t	ib_mtu		:4;
1235*12965SWilliam.Taylor@Oracle.COM 	uint32_t	eth_mtu		:16;	/* in bytes */
1236*12965SWilliam.Taylor@Oracle.COM 
1237*12965SWilliam.Taylor@Oracle.COM 						/* 0x04 */
12389517SBill.Taylor@Sun.COM 	/*
1239*12965SWilliam.Taylor@Oracle.COM 	 * IB Link speed - bit 0 SDR, bit1 DDR, Bit 2 QDR
12409517SBill.Taylor@Sun.COM 	 */
1241*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ib_link_spd	:8;
12429517SBill.Taylor@Sun.COM 	uint32_t			:4;
1243*12965SWilliam.Taylor@Oracle.COM 	/*
1244*12965SWilliam.Taylor@Oracle.COM 	 * Enet link speed - 0x0 10Gb XAUI, 0x01 10Gb XFI,
1245*12965SWilliam.Taylor@Oracle.COM 	 *	0x02 1Gb, 0xF other
1246*12965SWilliam.Taylor@Oracle.COM 	 */
1247*12965SWilliam.Taylor@Oracle.COM 	uint32_t	eth_link_spd	:4;
1248*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ib_port_wid	:8;
12499517SBill.Taylor@Sun.COM 	uint32_t	log_max_gid	:4;	/* max gids / port */
12509517SBill.Taylor@Sun.COM 	uint32_t	log_max_pkey 	:4;	/* pkey table size */
12519517SBill.Taylor@Sun.COM 
1252*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;	/* 0x08 */
1253*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_max_vlan	:4;
1254*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_max_mac	:4;
12559517SBill.Taylor@Sun.COM 	uint32_t			:4;
12569517SBill.Taylor@Sun.COM 	/* max vl's supported (not incl vl_15) */
12579517SBill.Taylor@Sun.COM 	uint32_t	max_vl		:4;
12589517SBill.Taylor@Sun.COM 
1259*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;	/* 0x0C */
1260*12965SWilliam.Taylor@Oracle.COM 
1261*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
1262*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_hi		:16;
1263*12965SWilliam.Taylor@Oracle.COM 
1264*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_lo;
1265*12965SWilliam.Taylor@Oracle.COM 
1266*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd1[2];
12679517SBill.Taylor@Sun.COM 
12689517SBill.Taylor@Sun.COM };
12699517SBill.Taylor@Sun.COM #endif
12709517SBill.Taylor@Sun.COM 
1271*12965SWilliam.Taylor@Oracle.COM /*
1272*12965SWilliam.Taylor@Oracle.COM  * the following structure is used for IB set port
1273*12965SWilliam.Taylor@Oracle.COM  *	others following are for ethernet set port
1274*12965SWilliam.Taylor@Oracle.COM  */
1275*12965SWilliam.Taylor@Oracle.COM 
1276*12965SWilliam.Taylor@Oracle.COM #define	HERMON_HW_OPMOD_SETPORT_IB	0x0
1277*12965SWilliam.Taylor@Oracle.COM #define	HERMON_HW_OPMOD_SETPORT_EN	0x1
1278*12965SWilliam.Taylor@Oracle.COM #define	HERMON_HW_OPMOD_SETPORT_EXT	0x2
1279*12965SWilliam.Taylor@Oracle.COM 
1280*12965SWilliam.Taylor@Oracle.COM 
12819517SBill.Taylor@Sun.COM #ifdef _LITTLE_ENDIAN
12829517SBill.Taylor@Sun.COM struct hermon_hw_set_port_s {
12839517SBill.Taylor@Sun.COM 	uint32_t	cap_mask;
12849517SBill.Taylor@Sun.COM 
12859517SBill.Taylor@Sun.COM 	uint32_t	rqk		:1;	/* reset qkey violation cntr */
128610852SBill.Taylor@Sun.COM 	uint32_t	rcm		:1;	/* reset capability mask */
128710852SBill.Taylor@Sun.COM 	uint32_t			:2;
128810852SBill.Taylor@Sun.COM 	uint32_t	vl_cap		:4;
128910852SBill.Taylor@Sun.COM 	uint32_t			:4;
129010852SBill.Taylor@Sun.COM 	uint32_t	mtu_cap		:4;
12919517SBill.Taylor@Sun.COM 	uint32_t	g0		:1;	/* set port GUID0 */
12929517SBill.Taylor@Sun.COM 	uint32_t	ng		:1;	/* set node GUID (all ports) */
12939517SBill.Taylor@Sun.COM 	uint32_t	sig		:1;	/* set sys image */
12949517SBill.Taylor@Sun.COM 	uint32_t	mg		:1;	/* change GID table */
12959517SBill.Taylor@Sun.COM 	uint32_t	mp		:1;	/* change pkey table size */
129610852SBill.Taylor@Sun.COM 	uint32_t	mvc		:1;	/* change vl_cap */
129710852SBill.Taylor@Sun.COM 	uint32_t	mmc		:1;	/* change mtu_cap */
129810852SBill.Taylor@Sun.COM 	uint32_t			:9;
12999517SBill.Taylor@Sun.COM 
13009517SBill.Taylor@Sun.COM 	uint64_t	sys_img_guid;
13019517SBill.Taylor@Sun.COM 
13029517SBill.Taylor@Sun.COM 	uint64_t	guid0;
13039517SBill.Taylor@Sun.COM 
13049517SBill.Taylor@Sun.COM 	uint64_t	node_guid;
13059517SBill.Taylor@Sun.COM 
1306*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ingress_sniff_qpn  :24;
1307*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ingress_sniff_mode :1;
1308*12965SWilliam.Taylor@Oracle.COM 	uint32_t			   :7;
1309*12965SWilliam.Taylor@Oracle.COM 
1310*12965SWilliam.Taylor@Oracle.COM 	uint32_t	egress_sniff_qpn  :24;
1311*12965SWilliam.Taylor@Oracle.COM 	uint32_t	egress_sniff_mode :1;
1312*12965SWilliam.Taylor@Oracle.COM 	uint32_t			  :7;
13139517SBill.Taylor@Sun.COM 
13149517SBill.Taylor@Sun.COM 	uint32_t			:32;
13159517SBill.Taylor@Sun.COM 
1316*12965SWilliam.Taylor@Oracle.COM 	uint32_t	max_gid		:16;	/* valid if noted above */
13179517SBill.Taylor@Sun.COM 	uint32_t	max_pkey	:16;	/* valid if noted above */
13189517SBill.Taylor@Sun.COM 
13199517SBill.Taylor@Sun.COM 	uint32_t	rsrd0[500];
13209517SBill.Taylor@Sun.COM };
13219517SBill.Taylor@Sun.COM #else	/* BIG ENDIAN */
13229517SBill.Taylor@Sun.COM struct hermon_hw_set_port_s {
132310852SBill.Taylor@Sun.COM 	uint32_t			:9;
132410852SBill.Taylor@Sun.COM 	uint32_t	mmc		:1;	/* change mtu_cap */
132510852SBill.Taylor@Sun.COM 	uint32_t	mvc		:1;	/* change vl_cap */
13269517SBill.Taylor@Sun.COM 	uint32_t	mp		:1;	/* change pkey table size */
13279517SBill.Taylor@Sun.COM 	uint32_t	mg		:1;	/* change GID table size */
13289517SBill.Taylor@Sun.COM 	uint32_t	sig		:1;	/* set sys image GUID */
13299517SBill.Taylor@Sun.COM 	uint32_t	ng		:1;	/* set node GUID (all ports) */
13309517SBill.Taylor@Sun.COM 	uint32_t	g0		:1;	/* set port GUID0 */
133110852SBill.Taylor@Sun.COM 	uint32_t	mtu_cap		:4;
133210852SBill.Taylor@Sun.COM 	uint32_t			:4;
133310852SBill.Taylor@Sun.COM 	uint32_t	vl_cap		:4;
133410852SBill.Taylor@Sun.COM 	uint32_t			:2;
133510852SBill.Taylor@Sun.COM 	uint32_t	rcm		:1;	/* reset capability mask */
13369517SBill.Taylor@Sun.COM 	uint32_t	rqk		:1;	/* reset qkey violation cntr */
13379517SBill.Taylor@Sun.COM 
13389517SBill.Taylor@Sun.COM 	uint32_t	cap_mask;
13399517SBill.Taylor@Sun.COM 
13409517SBill.Taylor@Sun.COM 	uint64_t	sys_img_guid;
13419517SBill.Taylor@Sun.COM 
13429517SBill.Taylor@Sun.COM 	uint64_t	guid0;
13439517SBill.Taylor@Sun.COM 
13449517SBill.Taylor@Sun.COM 	uint64_t	node_guid;
13459517SBill.Taylor@Sun.COM 
1346*12965SWilliam.Taylor@Oracle.COM 	uint32_t			  :7;
1347*12965SWilliam.Taylor@Oracle.COM 	uint32_t	egress_sniff_mode :1;
1348*12965SWilliam.Taylor@Oracle.COM 	uint32_t	egress_sniff_qpn   :24;
1349*12965SWilliam.Taylor@Oracle.COM 
1350*12965SWilliam.Taylor@Oracle.COM 	uint32_t			   :7;
1351*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ingress_sniff_mode :1;
1352*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ingress_sniff_qpn  :24;
1353*12965SWilliam.Taylor@Oracle.COM 
13549517SBill.Taylor@Sun.COM 
13559517SBill.Taylor@Sun.COM 	uint32_t	max_pkey	:16;	/* valid if noted above */
1356*12965SWilliam.Taylor@Oracle.COM 	uint32_t	max_gid		:16;	/* valid if noted above */
13579517SBill.Taylor@Sun.COM 
13589517SBill.Taylor@Sun.COM 	uint32_t			:32;
13599517SBill.Taylor@Sun.COM 
13609517SBill.Taylor@Sun.COM 	uint32_t	rsrd0[500];
13619517SBill.Taylor@Sun.COM };
13629517SBill.Taylor@Sun.COM #endif
13639517SBill.Taylor@Sun.COM 
1364*12965SWilliam.Taylor@Oracle.COM /*
1365*12965SWilliam.Taylor@Oracle.COM  * structures  for ethernet setport
1366*12965SWilliam.Taylor@Oracle.COM  * Which structure is used depends on low-16 of opmod
1367*12965SWilliam.Taylor@Oracle.COM  * Low 8 == port number, 15:8 == selector
1368*12965SWilliam.Taylor@Oracle.COM  * Or the following with port number
1369*12965SWilliam.Taylor@Oracle.COM  */
1370*12965SWilliam.Taylor@Oracle.COM 
1371*12965SWilliam.Taylor@Oracle.COM #define	HERMON_HW_ENET_OPMOD_SELECT_GEN	0x0000		/* general params */
1372*12965SWilliam.Taylor@Oracle.COM #define	HERMON_HW_ENET_OPMOD_SELECT_RQN 0x0100		/* rcv qpn calc */
1373*12965SWilliam.Taylor@Oracle.COM #define	HERMON_HW_ENET_OPMOD_SELECT_MAC 0x0200		/* MAC table conf */
1374*12965SWilliam.Taylor@Oracle.COM #define	HERMON_HW_ENET_OPMOD_SELECT_VLAN 0x0300		/* VLAN table conf */
1375*12965SWilliam.Taylor@Oracle.COM #define	HERMON_HW_ENET_OPMOD_SELECT_PRIO 0x0400		/* Priority table */
1376*12965SWilliam.Taylor@Oracle.COM #define	HERMON_HW_ENET_OPMOD_SELECT_GID	 0x0500		/* GID Table */
1377*12965SWilliam.Taylor@Oracle.COM 
1378*12965SWilliam.Taylor@Oracle.COM /*
1379*12965SWilliam.Taylor@Oracle.COM  * set port for enthernet, general parameters
1380*12965SWilliam.Taylor@Oracle.COM  * Which structure
1381*12965SWilliam.Taylor@Oracle.COM  */
1382*12965SWilliam.Taylor@Oracle.COM 
1383*12965SWilliam.Taylor@Oracle.COM #ifdef _LITTLE_ENDIAN
1384*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_en_s {
1385*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mtu		:16;
1386*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
1387*12965SWilliam.Taylor@Oracle.COM 
1388*12965SWilliam.Taylor@Oracle.COM 	uint32_t	v_mtu		:1;
1389*12965SWilliam.Taylor@Oracle.COM 	uint32_t	v_pprx		:1;
1390*12965SWilliam.Taylor@Oracle.COM 	uint32_t	v_pptx		:1;
1391*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:29;
1392*12965SWilliam.Taylor@Oracle.COM 
1393*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
1394*12965SWilliam.Taylor@Oracle.COM 	uint32_t	pfcrx		:8;
1395*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
1396*12965SWilliam.Taylor@Oracle.COM 	uint32_t	pprx		:1;
1397*12965SWilliam.Taylor@Oracle.COM 
1398*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
1399*12965SWilliam.Taylor@Oracle.COM 	uint32_t	pfctx		:8;
1400*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
1401*12965SWilliam.Taylor@Oracle.COM 	uint32_t	pptx		:1;
1402*12965SWilliam.Taylor@Oracle.COM 
1403*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd0[4];
1404*12965SWilliam.Taylor@Oracle.COM };
1405*12965SWilliam.Taylor@Oracle.COM 
1406*12965SWilliam.Taylor@Oracle.COM #else /* BIG ENDIAN */
1407*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_en_s {
1408*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:29;
1409*12965SWilliam.Taylor@Oracle.COM 	uint32_t	v_pptx		:1;
1410*12965SWilliam.Taylor@Oracle.COM 	uint32_t	v_pprx		:1;
1411*12965SWilliam.Taylor@Oracle.COM 	uint32_t	v_mtu		:1;
1412*12965SWilliam.Taylor@Oracle.COM 
1413*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
1414*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mtu		:16;
1415*12965SWilliam.Taylor@Oracle.COM 
1416*12965SWilliam.Taylor@Oracle.COM 	uint32_t	pptx		:1;
1417*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
1418*12965SWilliam.Taylor@Oracle.COM 	uint32_t	pfctx		:8;
1419*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
1420*12965SWilliam.Taylor@Oracle.COM 
1421*12965SWilliam.Taylor@Oracle.COM 	uint32_t	pprx		:1;
1422*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
1423*12965SWilliam.Taylor@Oracle.COM 	uint32_t	pfcrx		:8;
1424*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
1425*12965SWilliam.Taylor@Oracle.COM 
1426*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd0[4];
1427*12965SWilliam.Taylor@Oracle.COM 
1428*12965SWilliam.Taylor@Oracle.COM };
1429*12965SWilliam.Taylor@Oracle.COM #endif
1430*12965SWilliam.Taylor@Oracle.COM 
1431*12965SWilliam.Taylor@Oracle.COM /* set_port for enet, RX QPM calculations Parameters */
1432*12965SWilliam.Taylor@Oracle.COM 
1433*12965SWilliam.Taylor@Oracle.COM #ifdef _LITTLE_ENDIAN
1434*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_en_rqpn_s {
1435*12965SWilliam.Taylor@Oracle.COM 	uint32_t	n_p		:2;
1436*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:6;
1437*12965SWilliam.Taylor@Oracle.COM 	uint32_t	n_v		:3;
1438*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
1439*12965SWilliam.Taylor@Oracle.COM 	uint32_t	n_m		:4;
1440*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:12;
1441*12965SWilliam.Taylor@Oracle.COM 
1442*12965SWilliam.Taylor@Oracle.COM 	uint32_t	base_qpn	:24;
1443*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
1444*12965SWilliam.Taylor@Oracle.COM 
1445*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_miss_idx	:7;
1446*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
1447*12965SWilliam.Taylor@Oracle.COM 	uint32_t	intra_vlan_miss	:1;
1448*12965SWilliam.Taylor@Oracle.COM 	uint32_t	no_vlan_idx	:7;
1449*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
1450*12965SWilliam.Taylor@Oracle.COM 	uint32_t	intra_no_vlan	:1;
1451*12965SWilliam.Taylor@Oracle.COM 
1452*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_miss_idx	:8;
1453*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:24;
1454*12965SWilliam.Taylor@Oracle.COM 
1455*12965SWilliam.Taylor@Oracle.COM 	uint32_t	promisc_qpn	:24;
1456*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
1457*12965SWilliam.Taylor@Oracle.COM 	uint32_t	en_uc_promisc	:1;
1458*12965SWilliam.Taylor@Oracle.COM 
1459*12965SWilliam.Taylor@Oracle.COM 	uint32_t	no_vlan_prio	:3;
1460*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:29;
1461*12965SWilliam.Taylor@Oracle.COM 
1462*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
1463*12965SWilliam.Taylor@Oracle.COM 
1464*12965SWilliam.Taylor@Oracle.COM 	uint32_t	def_mcast_qpn	:24;
1465*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
1466*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mc_by_vlan	:1;
1467*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mc_promisc_mode :2;
1468*12965SWilliam.Taylor@Oracle.COM 
1469*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd0[4];
1470*12965SWilliam.Taylor@Oracle.COM };
1471*12965SWilliam.Taylor@Oracle.COM 
1472*12965SWilliam.Taylor@Oracle.COM #else /* BIG ENDIAN */
1473*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_en_rqpn_s {
1474*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
1475*12965SWilliam.Taylor@Oracle.COM 	uint32_t	base_qpn	:24;
1476*12965SWilliam.Taylor@Oracle.COM 
1477*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:12;
1478*12965SWilliam.Taylor@Oracle.COM 	uint32_t	n_m		:4;
1479*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
1480*12965SWilliam.Taylor@Oracle.COM 	uint32_t	n_v		:3;
1481*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:6;
1482*12965SWilliam.Taylor@Oracle.COM 	uint32_t	n_p		:2;
1483*12965SWilliam.Taylor@Oracle.COM 
1484*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:24;
1485*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_miss_idx	:8;
1486*12965SWilliam.Taylor@Oracle.COM 
1487*12965SWilliam.Taylor@Oracle.COM 	uint32_t	intra_no_vlan	:1;
1488*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
1489*12965SWilliam.Taylor@Oracle.COM 	uint32_t	no_vlan_idx	:7;
1490*12965SWilliam.Taylor@Oracle.COM 	uint32_t	intra_vlan_miss	:1;
1491*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
1492*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_miss_idx	:7;
1493*12965SWilliam.Taylor@Oracle.COM 
1494*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:29;
1495*12965SWilliam.Taylor@Oracle.COM 	uint32_t	no_vlan_prio	:3;
1496*12965SWilliam.Taylor@Oracle.COM 
1497*12965SWilliam.Taylor@Oracle.COM 	uint32_t	en_uc_promisc	:1;
1498*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
1499*12965SWilliam.Taylor@Oracle.COM 	uint32_t	promisc_qpn	:24;
1500*12965SWilliam.Taylor@Oracle.COM 
1501*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mc_promisc_mode :2;
1502*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mc_by_vlan	:1;
1503*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
1504*12965SWilliam.Taylor@Oracle.COM 	uint32_t	def_mcast_qpn	:24;
1505*12965SWilliam.Taylor@Oracle.COM 
1506*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
1507*12965SWilliam.Taylor@Oracle.COM 
1508*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd0[4];
1509*12965SWilliam.Taylor@Oracle.COM };
1510*12965SWilliam.Taylor@Oracle.COM #endif
1511*12965SWilliam.Taylor@Oracle.COM 
1512*12965SWilliam.Taylor@Oracle.COM 
1513*12965SWilliam.Taylor@Oracle.COM #ifdef _LITTLE_ENDIAN
1514*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_mact_entry_s {
1515*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_lo		:32;
1516*12965SWilliam.Taylor@Oracle.COM 
1517*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_hi		:16;
1518*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
1519*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_valid	:1;
1520*12965SWilliam.Taylor@Oracle.COM };
1521*12965SWilliam.Taylor@Oracle.COM #else /* BIG ENDIAN */
1522*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_mact_entry_s {
1523*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_valid	:1;
1524*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
1525*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_hi		:16;
1526*12965SWilliam.Taylor@Oracle.COM 
1527*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_lo		:32;
1528*12965SWilliam.Taylor@Oracle.COM 
1529*12965SWilliam.Taylor@Oracle.COM };
1530*12965SWilliam.Taylor@Oracle.COM #endif
1531*12965SWilliam.Taylor@Oracle.COM 
1532*12965SWilliam.Taylor@Oracle.COM 
1533*12965SWilliam.Taylor@Oracle.COM /* set_port for enet, MAC Table Configuration */
1534*12965SWilliam.Taylor@Oracle.COM 
1535*12965SWilliam.Taylor@Oracle.COM #ifdef _LITTLE_ENDIAN
1536*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_en_mact_s {
1537*12965SWilliam.Taylor@Oracle.COM 	struct hermon_hw_set_port_mact_entry_s mtable[128];
1538*12965SWilliam.Taylor@Oracle.COM };
1539*12965SWilliam.Taylor@Oracle.COM #else /* BIG ENDIAN */
1540*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_en_mact_s {
1541*12965SWilliam.Taylor@Oracle.COM 	struct hermon_hw_set_port_mact_entry_s mtable[128];
1542*12965SWilliam.Taylor@Oracle.COM };
1543*12965SWilliam.Taylor@Oracle.COM #endif
1544*12965SWilliam.Taylor@Oracle.COM 
1545*12965SWilliam.Taylor@Oracle.COM 
1546*12965SWilliam.Taylor@Oracle.COM /* set_port for enet, VLAN Table Configuration */
1547*12965SWilliam.Taylor@Oracle.COM 
1548*12965SWilliam.Taylor@Oracle.COM #ifdef _LITTLE_ENDIAN
1549*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_vlant_entry_s {
1550*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_id		:12;
1551*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:18;
1552*12965SWilliam.Taylor@Oracle.COM 	uint32_t	intra		:1;
1553*12965SWilliam.Taylor@Oracle.COM 	uint32_t	valid		:1;
1554*12965SWilliam.Taylor@Oracle.COM };
1555*12965SWilliam.Taylor@Oracle.COM #else /* BIG ENDIAN */
1556*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_vlant_entry_s {
1557*12965SWilliam.Taylor@Oracle.COM 	uint32_t	valid		:1;
1558*12965SWilliam.Taylor@Oracle.COM 	uint32_t	intra		:1;
1559*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:18;
1560*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_id		:12;
1561*12965SWilliam.Taylor@Oracle.COM };
1562*12965SWilliam.Taylor@Oracle.COM #endif
1563*12965SWilliam.Taylor@Oracle.COM 
1564*12965SWilliam.Taylor@Oracle.COM #ifdef _LITTLE_ENDIAN
1565*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_en_vlant_s {
1566*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd[2];
1567*12965SWilliam.Taylor@Oracle.COM 	struct hermon_hw_set_port_vlant_entry_s table[126];
1568*12965SWilliam.Taylor@Oracle.COM };
1569*12965SWilliam.Taylor@Oracle.COM #else /* BIG ENDIAN */
1570*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_en_vlant_s {
1571*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd[2];
1572*12965SWilliam.Taylor@Oracle.COM 	struct hermon_hw_set_port_vlant_entry_s table[126];
1573*12965SWilliam.Taylor@Oracle.COM };
1574*12965SWilliam.Taylor@Oracle.COM #endif
1575*12965SWilliam.Taylor@Oracle.COM 
1576*12965SWilliam.Taylor@Oracle.COM /* set_port for enet, Priority table Parameters */
1577*12965SWilliam.Taylor@Oracle.COM 
1578*12965SWilliam.Taylor@Oracle.COM #ifdef _LITTLE_ENDIAN
1579*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_en_priot_s {
1580*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
1581*12965SWilliam.Taylor@Oracle.COM 
1582*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio0		:3;
1583*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1584*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio1		:3;
1585*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1586*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio2		:3;
1587*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1588*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio3		:3;
1589*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1590*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio4		:3;
1591*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1592*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio5		:3;
1593*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1594*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio6		:3;
1595*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1596*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio7		:3;
1597*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1598*12965SWilliam.Taylor@Oracle.COM 
1599*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd[2];
1600*12965SWilliam.Taylor@Oracle.COM };
1601*12965SWilliam.Taylor@Oracle.COM #else /* BIG ENDIAN */
1602*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_en_priot_s {
1603*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1604*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio7		:3;
1605*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1606*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio6		:3;
1607*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1608*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio5		:3;
1609*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1610*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio4		:3;
1611*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1612*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio3		:3;
1613*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1614*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio2		:3;
1615*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1616*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio1		:3;
1617*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
1618*12965SWilliam.Taylor@Oracle.COM 	uint32_t	prio0		:3;
1619*12965SWilliam.Taylor@Oracle.COM 
1620*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
1621*12965SWilliam.Taylor@Oracle.COM 
1622*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd[2];
1623*12965SWilliam.Taylor@Oracle.COM 
1624*12965SWilliam.Taylor@Oracle.COM };
1625*12965SWilliam.Taylor@Oracle.COM #endif
1626*12965SWilliam.Taylor@Oracle.COM 
1627*12965SWilliam.Taylor@Oracle.COM 
1628*12965SWilliam.Taylor@Oracle.COM /* note:  GID table is same BIG or LITTLE ENDIAN */
1629*12965SWilliam.Taylor@Oracle.COM 
1630*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_port_gidtable_s {
1631*12965SWilliam.Taylor@Oracle.COM 	uint64_t	gid[128];
1632*12965SWilliam.Taylor@Oracle.COM };
1633*12965SWilliam.Taylor@Oracle.COM 
1634*12965SWilliam.Taylor@Oracle.COM #ifdef _LITTLE_ENDIAN
1635*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_conf_int_mod_s {
1636*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
1637*12965SWilliam.Taylor@Oracle.COM 
1638*12965SWilliam.Taylor@Oracle.COM 	uint32_t	int_vect	:16;
1639*12965SWilliam.Taylor@Oracle.COM 	uint32_t	min_delay	:16;
1640*12965SWilliam.Taylor@Oracle.COM };
1641*12965SWilliam.Taylor@Oracle.COM #else /* BIG ENDIAN */
1642*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_conf_int_mod_s {
1643*12965SWilliam.Taylor@Oracle.COM 	uint32_t	min_delay	:16;
1644*12965SWilliam.Taylor@Oracle.COM 	uint32_t	int_vect	:16;
1645*12965SWilliam.Taylor@Oracle.COM 
1646*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
1647*12965SWilliam.Taylor@Oracle.COM };
1648*12965SWilliam.Taylor@Oracle.COM #endif
1649*12965SWilliam.Taylor@Oracle.COM 
16509517SBill.Taylor@Sun.COM 
16519517SBill.Taylor@Sun.COM 
16529517SBill.Taylor@Sun.COM 
16539517SBill.Taylor@Sun.COM /*
16549517SBill.Taylor@Sun.COM  * Hermon Memory Protection Table (MPT) entries
16559517SBill.Taylor@Sun.COM  *
16569517SBill.Taylor@Sun.COM  *    The Memory Protection Table (MPT) contains the information associated
16579517SBill.Taylor@Sun.COM  *    with all the regions and windows. The MPT table resides in a virtually-
16589517SBill.Taylor@Sun.COM  *    contiguous area in ICM, and the memory key (R_Key or L_Key) is used to
16599517SBill.Taylor@Sun.COM  *    calculate the physical address for accessing the entries in the table.
16609517SBill.Taylor@Sun.COM  *
16619517SBill.Taylor@Sun.COM  *
16629517SBill.Taylor@Sun.COM  *    The SW2HW_MPT command transfers ownership of an MPT entry from software
16639517SBill.Taylor@Sun.COM  *    to hardware. The command takes the MPT entry from the input mailbox and
16649517SBill.Taylor@Sun.COM  *    stores it in the MPT in the hardware. The command will fail if the
16659517SBill.Taylor@Sun.COM  *    requested MPT entry is already owned by the hardware or if the MPT index
16669517SBill.Taylor@Sun.COM  *    given in the command is inconsistent with the MPT entry memory key.
16679517SBill.Taylor@Sun.COM  *    The QUERY_MPT command retrieves a snapshot of an MPT entry. The command
16689517SBill.Taylor@Sun.COM  *    takes the current state of an MPT entry from the hardware and stores it
16699517SBill.Taylor@Sun.COM  *    in the output mailbox.  The command will fail if the requested MPT entry
16709517SBill.Taylor@Sun.COM  *    is already owned by software.
16719517SBill.Taylor@Sun.COM  *    Finally, the HW2SW_MPT command transfers ownership of an MPT entry from
16729517SBill.Taylor@Sun.COM  *    the hardware to the software. The command takes the MPT entry from the
16739517SBill.Taylor@Sun.COM  *    hardware, invalidates it, and stores it in the output mailbox. The
16749517SBill.Taylor@Sun.COM  *    command will fail if the requested entry is already owned by software.
16759517SBill.Taylor@Sun.COM  *    The command will also fail if the MPT entry in question is a Memory
16769517SBill.Taylor@Sun.COM  *    Region which has Memory Windows currently bound to it.
16779517SBill.Taylor@Sun.COM  *
16789517SBill.Taylor@Sun.COM  *    The following structure is used in the SW2HW_MPT, QUERY_MPT, and
16799517SBill.Taylor@Sun.COM  *    HW2SW_MPT commands, and ONLY for the dMPT - for data.
16809517SBill.Taylor@Sun.COM  */
16819517SBill.Taylor@Sun.COM 
16829517SBill.Taylor@Sun.COM #ifdef _LITTLE_ENDIAN
16839517SBill.Taylor@Sun.COM struct hermon_hw_dmpt_s {
16849517SBill.Taylor@Sun.COM 	uint32_t			:7;
16859517SBill.Taylor@Sun.COM 	uint32_t	bnd_qp		:1;
16869517SBill.Taylor@Sun.COM 	uint32_t	qpn		:24;	/* dw 1, byte 4-7 */
16879517SBill.Taylor@Sun.COM 
16889517SBill.Taylor@Sun.COM 	uint32_t			:8;
16899517SBill.Taylor@Sun.COM 	uint32_t	reg_win		:1;
16909517SBill.Taylor@Sun.COM 	uint32_t	phys_addr	:1;
16919517SBill.Taylor@Sun.COM 	uint32_t	lr		:1;
16929517SBill.Taylor@Sun.COM 	uint32_t	lw		:1;
16939517SBill.Taylor@Sun.COM 	uint32_t	rr		:1;
16949517SBill.Taylor@Sun.COM 	uint32_t	rw		:1;
16959517SBill.Taylor@Sun.COM 	uint32_t	atomic		:1;
16969517SBill.Taylor@Sun.COM 	uint32_t	en_bind		:1;
16979517SBill.Taylor@Sun.COM 	uint32_t	atc_req		:1;
16989517SBill.Taylor@Sun.COM 	uint32_t	atc_xlat	:1;
16999517SBill.Taylor@Sun.COM 	uint32_t			:1;
17009517SBill.Taylor@Sun.COM 	uint32_t	no_snoop	:1;
17019517SBill.Taylor@Sun.COM 	uint32_t			:8;
17029517SBill.Taylor@Sun.COM 	uint32_t	status		:4;	/* dw 0, byte 0-3 */
17039517SBill.Taylor@Sun.COM 
17049517SBill.Taylor@Sun.COM 	uint32_t	pd		:24;
17059517SBill.Taylor@Sun.COM 	uint32_t	ren_inval	:1;
17069517SBill.Taylor@Sun.COM 	uint32_t	en_inval	:1;
17079517SBill.Taylor@Sun.COM 	uint32_t	net_cache	:1;
17089517SBill.Taylor@Sun.COM 	uint32_t	fast_reg_en	:1;
17099517SBill.Taylor@Sun.COM 	uint32_t	rem_acc_en	:1;
17109517SBill.Taylor@Sun.COM 	uint32_t	w_dif		:1;
17119517SBill.Taylor@Sun.COM 	uint32_t	m_dif		:1;
17129517SBill.Taylor@Sun.COM 	uint32_t			:1; 	/* dw 2, byte 0xc-f */
17139517SBill.Taylor@Sun.COM 
17149517SBill.Taylor@Sun.COM 	uint32_t	mem_key;
1715*12965SWilliam.Taylor@Oracle.COM 
17169517SBill.Taylor@Sun.COM 	uint64_t	start_addr;		/* dw 4-5, byte 0x10-17 */
17179517SBill.Taylor@Sun.COM 
17189517SBill.Taylor@Sun.COM 	uint64_t	reg_win_len;		/* dw 6-7, byte 0x18-1f */
17199517SBill.Taylor@Sun.COM 
17209517SBill.Taylor@Sun.COM 	uint32_t	win_cnt		:24;
17219517SBill.Taylor@Sun.COM 	uint32_t			:8; 	/* dw 9, byte 0x24-27 */
17229517SBill.Taylor@Sun.COM 
17239517SBill.Taylor@Sun.COM 	uint32_t	lkey;			/* dw 8, byte 0x20-23 */
17249517SBill.Taylor@Sun.COM 
17259517SBill.Taylor@Sun.COM 	uint32_t	mtt_addr_h	:8;
17269517SBill.Taylor@Sun.COM 	uint32_t			:24;	/* dw 11, byte 0x2c-2f */
17279517SBill.Taylor@Sun.COM 
17289517SBill.Taylor@Sun.COM 	uint32_t	mtt_rep		:4;
17299517SBill.Taylor@Sun.COM 	uint32_t			:17;
17309517SBill.Taylor@Sun.COM 	uint32_t	blk_mode	:1;
17319517SBill.Taylor@Sun.COM 	uint32_t	len_b64		:1;	/* bit 64 of length */
17329517SBill.Taylor@Sun.COM 	uint32_t	fbo_en		:1;
17339517SBill.Taylor@Sun.COM 	uint32_t			:8; 	/* dw 10, byte 0x28-2b */
17349517SBill.Taylor@Sun.COM 
17359517SBill.Taylor@Sun.COM 	uint32_t	mtt_size;		/* dw 13, byte 0x34-37 */
17369517SBill.Taylor@Sun.COM 
17379517SBill.Taylor@Sun.COM 	uint32_t			:3;
17389517SBill.Taylor@Sun.COM 	uint32_t	mtt_addr_l	:29; 	/* dw 12, byte 0x30-33 */
17399517SBill.Taylor@Sun.COM 
17409517SBill.Taylor@Sun.COM 	uint32_t	mtt_fbo		:21;
17419517SBill.Taylor@Sun.COM 	uint32_t			:11; 	/* dw 15, byte 0x3c-3f */
17429517SBill.Taylor@Sun.COM 
17439517SBill.Taylor@Sun.COM 	uint32_t	entity_sz	:21;
17449517SBill.Taylor@Sun.COM 	uint32_t			:11;	/* dw 14, byte 0x38-3b */
1745*12965SWilliam.Taylor@Oracle.COM 
17469517SBill.Taylor@Sun.COM 	uint32_t	dif_m_atag	:16;
17479517SBill.Taylor@Sun.COM 	uint32_t			:16;	/* dw 17, 0x44-47 */
17489517SBill.Taylor@Sun.COM 
17499517SBill.Taylor@Sun.COM 	uint32_t	dif_a_msk	:16;
17509517SBill.Taylor@Sun.COM 	uint32_t	dif_v_msk	:2;
17519517SBill.Taylor@Sun.COM 	uint32_t	dif_rep		:2;
1752*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:4;
1753*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dif_err		:3;
1754*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;	/* dw 16, 0x40-43 */
17559517SBill.Taylor@Sun.COM 
17569517SBill.Taylor@Sun.COM 	uint32_t	dif_w_atag	:16;
17579517SBill.Taylor@Sun.COM 	uint32_t			:16;	/* dw 19, 0x4c-4f */
17589517SBill.Taylor@Sun.COM 
17599517SBill.Taylor@Sun.COM 	uint32_t	dif_m_rtagb;		/* dw 18, 0x48-4b */
17609517SBill.Taylor@Sun.COM 
17619517SBill.Taylor@Sun.COM 	uint32_t			:32;
17629517SBill.Taylor@Sun.COM 
17639517SBill.Taylor@Sun.COM 	uint32_t	dif_w_rtagb;		/* dw 20, 0x50-53 */
1764*12965SWilliam.Taylor@Oracle.COM 
1765*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd[10];
1766*12965SWilliam.Taylor@Oracle.COM 
17679517SBill.Taylor@Sun.COM };
17689517SBill.Taylor@Sun.COM 
17699517SBill.Taylor@Sun.COM #else /* BIG ENDIAN */
17709517SBill.Taylor@Sun.COM struct hermon_hw_dmpt_s {
17719517SBill.Taylor@Sun.COM 	uint32_t	status		:4;
17729517SBill.Taylor@Sun.COM 	uint32_t			:8;
17739517SBill.Taylor@Sun.COM 	uint32_t	no_snoop	:1;
17749517SBill.Taylor@Sun.COM 	uint32_t			:1;
17759517SBill.Taylor@Sun.COM 	uint32_t	atc_xlat	:1;
17769517SBill.Taylor@Sun.COM 	uint32_t	atc_req		:1;
17779517SBill.Taylor@Sun.COM 	uint32_t	en_bind		:1;
17789517SBill.Taylor@Sun.COM 	uint32_t	atomic		:1;
17799517SBill.Taylor@Sun.COM 	uint32_t	rw		:1;
17809517SBill.Taylor@Sun.COM 	uint32_t	rr		:1;
17819517SBill.Taylor@Sun.COM 	uint32_t	lw		:1;
17829517SBill.Taylor@Sun.COM 	uint32_t	lr		:1;
17839517SBill.Taylor@Sun.COM 	uint32_t	phys_addr	:1;
17849517SBill.Taylor@Sun.COM 	uint32_t	reg_win		:1;
17859517SBill.Taylor@Sun.COM 	uint32_t			:8;	/* dw 0, byte 0x0-3 */
17869517SBill.Taylor@Sun.COM 
17879517SBill.Taylor@Sun.COM 	uint32_t	qpn		:24;
17889517SBill.Taylor@Sun.COM 	uint32_t	bnd_qp		:1;
17899517SBill.Taylor@Sun.COM 	uint32_t			:7;	/* dw 1, byte 0x4-7 */
17909517SBill.Taylor@Sun.COM 
17919517SBill.Taylor@Sun.COM 	uint32_t	mem_key;		/* dw 2, byte 0x8-b */
17929517SBill.Taylor@Sun.COM 
17939517SBill.Taylor@Sun.COM 	uint32_t			:1;
17949517SBill.Taylor@Sun.COM 	uint32_t	m_dif		:1;
17959517SBill.Taylor@Sun.COM 	uint32_t	w_dif		:1;
17969517SBill.Taylor@Sun.COM 	uint32_t	rem_acc_en	:1;
17979517SBill.Taylor@Sun.COM 	uint32_t	fast_reg_en	:1;
17989517SBill.Taylor@Sun.COM 	uint32_t	net_cache	:1;
17999517SBill.Taylor@Sun.COM 	uint32_t	en_inval	:1;
180011972SBill.Taylor@Sun.COM 	uint32_t	ren_inval	:1;
18019517SBill.Taylor@Sun.COM 	uint32_t	pd		:24;	/* dw 3, byte 0xc-f */
18029517SBill.Taylor@Sun.COM 
18039517SBill.Taylor@Sun.COM 	uint64_t	start_addr;		/* dw 4-5, byte 0x10-17 */
18049517SBill.Taylor@Sun.COM 
18059517SBill.Taylor@Sun.COM 	uint64_t	reg_win_len;		/* dw 6-7, byte 0x18-1f */
18069517SBill.Taylor@Sun.COM 
18079517SBill.Taylor@Sun.COM 	uint32_t	lkey;			/* dw 8, bytd 0x20-23 */
18089517SBill.Taylor@Sun.COM 
18099517SBill.Taylor@Sun.COM 	uint32_t			:8;
18109517SBill.Taylor@Sun.COM 	uint32_t	win_cnt		:24;	/* dw 9, byte 0x24-27 */
18119517SBill.Taylor@Sun.COM 
18129517SBill.Taylor@Sun.COM 	uint32_t			:8;
18139517SBill.Taylor@Sun.COM 	uint32_t	fbo_en		:1;
18149517SBill.Taylor@Sun.COM 	uint32_t	len_b64		:1;	/* bit 64 of length */
18159517SBill.Taylor@Sun.COM 	uint32_t	blk_mode	:1;
18169517SBill.Taylor@Sun.COM 	uint32_t			:17;
18179517SBill.Taylor@Sun.COM 	uint32_t	mtt_rep		:4;	/* dw 10, byte 0x28-2b */
18189517SBill.Taylor@Sun.COM 
18199517SBill.Taylor@Sun.COM 	uint32_t			:24;
18209517SBill.Taylor@Sun.COM 	uint32_t	mtt_addr_h	:8;	/* dw 11, byte 0x2c-2f */
18219517SBill.Taylor@Sun.COM 
18229517SBill.Taylor@Sun.COM 	uint32_t	mtt_addr_l	:29;
18239517SBill.Taylor@Sun.COM 	uint32_t			:3;	/* dw 12, byte 0x30-33 */
18249517SBill.Taylor@Sun.COM 
18259517SBill.Taylor@Sun.COM 	uint32_t	mtt_size;		/* dw 13, byte 0x34-37 */
18269517SBill.Taylor@Sun.COM 
18279517SBill.Taylor@Sun.COM 	uint32_t			:11;
18289517SBill.Taylor@Sun.COM 	uint32_t	entity_sz	:21;	/* dw 14, byte 0x38-3b */
18299517SBill.Taylor@Sun.COM 
18309517SBill.Taylor@Sun.COM 	uint32_t			:11;
18319517SBill.Taylor@Sun.COM 	uint32_t	mtt_fbo		:21;	/* dw 15, byte 0x3c-3f */
1832*12965SWilliam.Taylor@Oracle.COM 
1833*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
18349517SBill.Taylor@Sun.COM 	uint32_t	dif_err		:3;
1835*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:4;
18369517SBill.Taylor@Sun.COM 	uint32_t	dif_rep		:2;
18379517SBill.Taylor@Sun.COM 	uint32_t	dif_v_msk	:2;
18389517SBill.Taylor@Sun.COM 	uint32_t	dif_a_msk	:16;	/* dw 16, 0x40-43 */
18399517SBill.Taylor@Sun.COM 
18409517SBill.Taylor@Sun.COM 	uint32_t			:16;
18419517SBill.Taylor@Sun.COM 	uint32_t	dif_m_atag	:16;	/* dw 17, 0x44-47 */
18429517SBill.Taylor@Sun.COM 
18439517SBill.Taylor@Sun.COM 	uint32_t	dif_m_rtagb;		/* dw 18, 0x48-4b */
18449517SBill.Taylor@Sun.COM 
18459517SBill.Taylor@Sun.COM 	uint32_t			:16;
18469517SBill.Taylor@Sun.COM 	uint32_t	dif_w_atag	:16;	/* dw 19, 0x4c-4f */
18479517SBill.Taylor@Sun.COM 
18489517SBill.Taylor@Sun.COM 	uint32_t	dif_w_rtagb;		/* dw 20, 0x50-53 */
18499517SBill.Taylor@Sun.COM 
18509517SBill.Taylor@Sun.COM 	uint32_t			:32;
1851*12965SWilliam.Taylor@Oracle.COM 
1852*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd[10];
1853*12965SWilliam.Taylor@Oracle.COM 
18549517SBill.Taylor@Sun.COM };
18559517SBill.Taylor@Sun.COM #endif
18569517SBill.Taylor@Sun.COM 
18579517SBill.Taylor@Sun.COM /*
18589517SBill.Taylor@Sun.COM  * The following structure is for the CMPTs.  This is NEVER actually built and
18599517SBill.Taylor@Sun.COM  * passed to the hardware - we use it to track information needed for the
18609517SBill.Taylor@Sun.COM  * context entries, and to facilitate the alloc tracking.  It differs from
18619517SBill.Taylor@Sun.COM  * the dMPT sturcture above in that it does not have/need the "dif" stuff.
18629517SBill.Taylor@Sun.COM  *
18639517SBill.Taylor@Sun.COM  */
18649517SBill.Taylor@Sun.COM 
18659517SBill.Taylor@Sun.COM 
18669517SBill.Taylor@Sun.COM 
18679517SBill.Taylor@Sun.COM #ifdef _LITTLE_ENDIAN
18689517SBill.Taylor@Sun.COM struct hermon_hw_cmpt_s {
18699517SBill.Taylor@Sun.COM 	uint32_t			:7;
18709517SBill.Taylor@Sun.COM 	uint32_t	bnd_qp		:1;
18719517SBill.Taylor@Sun.COM 	uint32_t	qpn		:24;	/* dw 1, byte 4-7 */
18729517SBill.Taylor@Sun.COM 
18739517SBill.Taylor@Sun.COM 	uint32_t			:8;
18749517SBill.Taylor@Sun.COM 	uint32_t	reg_win	:1;
18759517SBill.Taylor@Sun.COM 	uint32_t	phys_addr	:1;
18769517SBill.Taylor@Sun.COM 	uint32_t	lr		:1;
18779517SBill.Taylor@Sun.COM 	uint32_t	lw		:1;
18789517SBill.Taylor@Sun.COM 	uint32_t	rr		:1;
18799517SBill.Taylor@Sun.COM 	uint32_t	rw		:1;
18809517SBill.Taylor@Sun.COM 	uint32_t	atomic		:1;
18819517SBill.Taylor@Sun.COM 	uint32_t	en_bind		:1;
18829517SBill.Taylor@Sun.COM 	uint32_t	atc_req		:1;
18839517SBill.Taylor@Sun.COM 	uint32_t	atc_xlat	:1;
18849517SBill.Taylor@Sun.COM 	uint32_t			:1;
18859517SBill.Taylor@Sun.COM 	uint32_t	no_snoop	:1;
18869517SBill.Taylor@Sun.COM 	uint32_t			:8;
18879517SBill.Taylor@Sun.COM 	uint32_t	status		:4;	/* dw 0, byte 0-3 */
18889517SBill.Taylor@Sun.COM 
18899517SBill.Taylor@Sun.COM 	uint32_t	pd		:24;
18909517SBill.Taylor@Sun.COM 	uint32_t	ren_inval	:1;
18919517SBill.Taylor@Sun.COM 	uint32_t	en_inval	:1;
18929517SBill.Taylor@Sun.COM 	uint32_t	net_cache	:1;
18939517SBill.Taylor@Sun.COM 	uint32_t	fast_reg_en	:1;
18949517SBill.Taylor@Sun.COM 	uint32_t	rem_acc_en	:1;
18959517SBill.Taylor@Sun.COM 	uint32_t	w_dif		:1;
18969517SBill.Taylor@Sun.COM 	uint32_t	m_dif		:1;
18979517SBill.Taylor@Sun.COM 	uint32_t			:1; 	/* dw 2, byte 0xc-f */
18989517SBill.Taylor@Sun.COM 
18999517SBill.Taylor@Sun.COM 	uint32_t	mem_key;
19009517SBill.Taylor@Sun.COM 	uint64_t	start_addr;		/* dw 4-5, byte 0x10-17 */
19019517SBill.Taylor@Sun.COM 
19029517SBill.Taylor@Sun.COM 	uint64_t	reg_win_len;		/* dw 6-7, byte 0x18-1f */
19039517SBill.Taylor@Sun.COM 
1904*12965SWilliam.Taylor@Oracle.COM 	uint32_t	win_cnt		:24;
19059517SBill.Taylor@Sun.COM 	uint32_t			:8; 	/* dw 9, byte 0x24-27 */
19069517SBill.Taylor@Sun.COM 
19079517SBill.Taylor@Sun.COM 	uint32_t	lkey;			/* dw 8, byte 0x20-23 */
19089517SBill.Taylor@Sun.COM 
19099517SBill.Taylor@Sun.COM 	uint32_t	mtt_addr_h	:8;
19109517SBill.Taylor@Sun.COM 	uint32_t			:24;	/* dw 11, byte 0x2c-2f */
19119517SBill.Taylor@Sun.COM 
19129517SBill.Taylor@Sun.COM 	uint32_t	mtt_rep		:4;
19139517SBill.Taylor@Sun.COM 	uint32_t			:17;
19149517SBill.Taylor@Sun.COM 	uint32_t	blk_mode	:1;
1915*12965SWilliam.Taylor@Oracle.COM 	uint32_t	len_b64		:1;	/* bit 64 of length */
1916*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fbo_en		:1;
19179517SBill.Taylor@Sun.COM 	uint32_t			:8; 	/* dw 10, byte 0x28-2b */
19189517SBill.Taylor@Sun.COM 
19199517SBill.Taylor@Sun.COM 	uint32_t	mtt_size;		/* dw 13, byte 0x34-37 */
19209517SBill.Taylor@Sun.COM 
19219517SBill.Taylor@Sun.COM 	uint32_t			:3;
19229517SBill.Taylor@Sun.COM 	uint32_t	mtt_addr_l	:29; 	/* dw 12, byte 0x30-33 */
19239517SBill.Taylor@Sun.COM 
1924*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mtt_fbo		:21;
19259517SBill.Taylor@Sun.COM 	uint32_t			:11; 	/* dw 15, byte 0x3c-3f */
19269517SBill.Taylor@Sun.COM 
19279517SBill.Taylor@Sun.COM 	uint32_t	entity_sz	:21;
19289517SBill.Taylor@Sun.COM 	uint32_t			:11;	/* dw 14, byte 0x38-3b */
19299517SBill.Taylor@Sun.COM 
19309517SBill.Taylor@Sun.COM };
19319517SBill.Taylor@Sun.COM 
19329517SBill.Taylor@Sun.COM 
19339517SBill.Taylor@Sun.COM #else /* BIG ENDIAN */
19349517SBill.Taylor@Sun.COM struct hermon_hw_cmpt_s {
1935*12965SWilliam.Taylor@Oracle.COM 	uint32_t	status		:4;
19369517SBill.Taylor@Sun.COM 	uint32_t			:8;
19379517SBill.Taylor@Sun.COM 	uint32_t	no_snoop	:1;
19389517SBill.Taylor@Sun.COM 	uint32_t			:1;
19399517SBill.Taylor@Sun.COM 	uint32_t	atc_xlat	:1;
1940*12965SWilliam.Taylor@Oracle.COM 	uint32_t	atc_req		:1;
1941*12965SWilliam.Taylor@Oracle.COM 	uint32_t	en_bind		:1;
1942*12965SWilliam.Taylor@Oracle.COM 	uint32_t	atomic		:1;
19439517SBill.Taylor@Sun.COM 	uint32_t	rw		:1;
19449517SBill.Taylor@Sun.COM 	uint32_t	rr		:1;
19459517SBill.Taylor@Sun.COM 	uint32_t	lw		:1;
19469517SBill.Taylor@Sun.COM 	uint32_t	lr		:1;
19479517SBill.Taylor@Sun.COM 	uint32_t	phys_addr	:1;
1948*12965SWilliam.Taylor@Oracle.COM 	uint32_t	reg_win		:1;
19499517SBill.Taylor@Sun.COM 	uint32_t			:8;	/* dw 0, byte 0x0-3 */
19509517SBill.Taylor@Sun.COM 
19519517SBill.Taylor@Sun.COM 	uint32_t	qpn		:24;
1952*12965SWilliam.Taylor@Oracle.COM 	uint32_t	bnd_qp		:1;
19539517SBill.Taylor@Sun.COM 	uint32_t			:7;	/* dw 1, byte 0x4-7 */
19549517SBill.Taylor@Sun.COM 
19559517SBill.Taylor@Sun.COM 	uint32_t	mem_key;		/* dw 2, byte 0x8-b */
19569517SBill.Taylor@Sun.COM 
19579517SBill.Taylor@Sun.COM 	uint32_t			:1;
19589517SBill.Taylor@Sun.COM 	uint32_t	m_dif		:1;
19599517SBill.Taylor@Sun.COM 	uint32_t	w_dif		:1;
19609517SBill.Taylor@Sun.COM 	uint32_t	rem_acc_en	:1;
19619517SBill.Taylor@Sun.COM 	uint32_t	fast_reg_en	:1;
19629517SBill.Taylor@Sun.COM 	uint32_t	net_cache	:1;
19639517SBill.Taylor@Sun.COM 	uint32_t	en_inval	:1;
196411972SBill.Taylor@Sun.COM 	uint32_t	ren_inval	:1;
19659517SBill.Taylor@Sun.COM 	uint32_t	pd		:24;	/* dw 3, byte 0xc-f */
19669517SBill.Taylor@Sun.COM 
19679517SBill.Taylor@Sun.COM 	uint64_t	start_addr;		/* dw 4-5, byte 0x10-17 */
19689517SBill.Taylor@Sun.COM 
19699517SBill.Taylor@Sun.COM 	uint64_t	reg_win_len;	/* dw 6-7, byte 0x18-1f */
19709517SBill.Taylor@Sun.COM 
19719517SBill.Taylor@Sun.COM 	uint32_t	lkey;			/* dw 8, bytd 0x20-23 */
19729517SBill.Taylor@Sun.COM 
19739517SBill.Taylor@Sun.COM 	uint32_t			:8;
1974*12965SWilliam.Taylor@Oracle.COM 	uint32_t	win_cnt		:24;	/* dw 9, byte 0x24-27 */
19759517SBill.Taylor@Sun.COM 
19769517SBill.Taylor@Sun.COM 	uint32_t			:8;
1977*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fbo_en		:1;
1978*12965SWilliam.Taylor@Oracle.COM 	uint32_t	len_b64		:1;	/* bit 64 of length */
19799517SBill.Taylor@Sun.COM 	uint32_t	blk_mode	:1;
19809517SBill.Taylor@Sun.COM 	uint32_t			:17;
1981*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mtt_rep		:4;	/* dw 10, byte 0x28-2b */
19829517SBill.Taylor@Sun.COM 
19839517SBill.Taylor@Sun.COM 	uint32_t			:24;
19849517SBill.Taylor@Sun.COM 	uint32_t	mtt_addr_h	:8;	/* dw 11, byte 0x2c-2f */
19859517SBill.Taylor@Sun.COM 
19869517SBill.Taylor@Sun.COM 	uint32_t	mtt_addr_l	:29;
19879517SBill.Taylor@Sun.COM 	uint32_t			:3;	/* dw 12, byte 0x30-33 */
19889517SBill.Taylor@Sun.COM 
19899517SBill.Taylor@Sun.COM 	uint32_t	mtt_size;		/* dw 13, byte 0x34-37 */
19909517SBill.Taylor@Sun.COM 
19919517SBill.Taylor@Sun.COM 	uint32_t			:11;
19929517SBill.Taylor@Sun.COM 	uint32_t	entity_sz	:21;	/* dw 14, byte 0x38-3b */
1993*12965SWilliam.Taylor@Oracle.COM 
1994*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:11; 	/* dw 15, byte 0x3c-3f */
1995*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mtt_fbo		:21;
19969517SBill.Taylor@Sun.COM };
19979517SBill.Taylor@Sun.COM #endif
19989517SBill.Taylor@Sun.COM 
19999517SBill.Taylor@Sun.COM 
20009517SBill.Taylor@Sun.COM #define	HERMON_MEM_CYCLE_GENERATE	0x1
20019517SBill.Taylor@Sun.COM #define	HERMON_IO_CYCLE_GENERATE	0x0
20029517SBill.Taylor@Sun.COM 
20039517SBill.Taylor@Sun.COM #define	HERMON_MPT_IS_WINDOW		0x0
20049517SBill.Taylor@Sun.COM #define	HERMON_MPT_IS_REGION		0x1
20059517SBill.Taylor@Sun.COM 
20069517SBill.Taylor@Sun.COM #define	HERMON_MPT_DEFAULT_VERSION	0x0
20079517SBill.Taylor@Sun.COM 
20089517SBill.Taylor@Sun.COM #define	HERMON_UNLIMITED_WIN_BIND	0x0
20099517SBill.Taylor@Sun.COM 
20109517SBill.Taylor@Sun.COM #define	HERMON_PHYSADDR_ENABLED		0x1
20119517SBill.Taylor@Sun.COM #define	HERMON_PHYSADDR_DISABLED	0x0
20129517SBill.Taylor@Sun.COM 
20139517SBill.Taylor@Sun.COM 
20149517SBill.Taylor@Sun.COM /*
20159517SBill.Taylor@Sun.COM  * Hermon Memory Translation Table (MTT) entries
20169517SBill.Taylor@Sun.COM  *    After accessing the MPT table (above) and validating the access rights
20179517SBill.Taylor@Sun.COM  *    to the region/window, Hermon address translation moves to the next step
20189517SBill.Taylor@Sun.COM  *    where it translates the virtual address to a physical address.  This
20199517SBill.Taylor@Sun.COM  *    translation is performed using the Memory Translation Table entries
20209517SBill.Taylor@Sun.COM  *    (MTT).  Note: The MTT in hardware is organized into segments and each
20219517SBill.Taylor@Sun.COM  *    segment contains multiple address translation pages (MTT entries).
20229517SBill.Taylor@Sun.COM  *    Each memory region (MPT above) points to the first segment in the MTT
20239517SBill.Taylor@Sun.COM  *    that corresponds to that region.
20249517SBill.Taylor@Sun.COM  */
20259517SBill.Taylor@Sun.COM 
20269517SBill.Taylor@Sun.COM #ifdef _LITTLE_ENDIAN
20279517SBill.Taylor@Sun.COM struct hermon_hw_mtt_s {
20289517SBill.Taylor@Sun.COM 	uint32_t	present	:1;
20299517SBill.Taylor@Sun.COM 	uint32_t		:2;
20309517SBill.Taylor@Sun.COM 	uint32_t	ptag_l	:29;
20319517SBill.Taylor@Sun.COM 
20329517SBill.Taylor@Sun.COM 	uint32_t	ptag_h;
20339517SBill.Taylor@Sun.COM };
20349517SBill.Taylor@Sun.COM #else /* BIG_ENDIAN */
20359517SBill.Taylor@Sun.COM struct hermon_hw_mtt_s {
20369517SBill.Taylor@Sun.COM 	uint32_t	ptag_h;
20379517SBill.Taylor@Sun.COM 
20389517SBill.Taylor@Sun.COM 	uint32_t	ptag_l	:29;
20399517SBill.Taylor@Sun.COM 	uint32_t		:2;
20409517SBill.Taylor@Sun.COM 	uint32_t	present	:1;
20419517SBill.Taylor@Sun.COM };
20429517SBill.Taylor@Sun.COM 
20439517SBill.Taylor@Sun.COM #endif
20449517SBill.Taylor@Sun.COM #define	HERMON_MTT_ENTRY_NOTPRESENT	0x0
20459517SBill.Taylor@Sun.COM #define	HERMON_MTT_ENTRY_PRESENT	0x1
20469517SBill.Taylor@Sun.COM 
20479517SBill.Taylor@Sun.COM 
20489517SBill.Taylor@Sun.COM /*
20499517SBill.Taylor@Sun.COM  * Hermon Event Queue Context Table (EQC) entries
20509517SBill.Taylor@Sun.COM  *    Hermon supports 512 Event Queues, and the status of Event Queues is stored
20519517SBill.Taylor@Sun.COM  *    in the Event Queue Context (EQC) table.  The EQC table is a virtually-
20529517SBill.Taylor@Sun.COM  *    contiguous memory structure in the ICM.  Each EQC
20539517SBill.Taylor@Sun.COM  *    table entry contains Event Queue status and information required by
20549517SBill.Taylor@Sun.COM  *    the hardware in order to access the event queue.
20559517SBill.Taylor@Sun.COM  * 	NOTE that in Hermon (as opposed to earlier HCAs),
20569517SBill.Taylor@Sun.COM  *	you have to allocate ICM for 2**32 (or about 16 M), even though
20579517SBill.Taylor@Sun.COM  *	it doesn't support that many.  See PRM v35.  Also, some set of them
20589517SBill.Taylor@Sun.COM  * 	will be available for each domain in a virtual environment, needing to
20599517SBill.Taylor@Sun.COM  *	rething the allocation and usage model for EQs - in the future.
20609517SBill.Taylor@Sun.COM  *
20619517SBill.Taylor@Sun.COM  *    The following structure is used in the SW2HW_EQ, QUERY_EQ, and HW2SW_EQ
20629517SBill.Taylor@Sun.COM  *    commands.
20639517SBill.Taylor@Sun.COM  *    The SW2HW_EQ command transfers ownership of an EQ context from software
20649517SBill.Taylor@Sun.COM  *    to hardware. The command takes the EQC entry from the input mailbox and
20659517SBill.Taylor@Sun.COM  *    stores it in the EQC in the hardware. The command will fail if the
20669517SBill.Taylor@Sun.COM  *    requested EQC entry is already owned by the hardware.  NOTE:  the
20679517SBill.Taylor@Sun.COM  *    initialization of the cMPT for the EQC occurs implicitly as a result
20689517SBill.Taylor@Sun.COM  *    of executing this command, and MR has/had to be adjusted for it.
20699517SBill.Taylor@Sun.COM  *    The QUERY_EQ command retrieves a snapshot of an EQC entry. The command
20709517SBill.Taylor@Sun.COM  *    stores the snapshot in the output mailbox.  The EQC state and its values
20719517SBill.Taylor@Sun.COM  *    are not affected by the QUERY_EQ command.
20729517SBill.Taylor@Sun.COM  *    Finally, the HW2SW_EQ command transfers ownership of an EQC entry from
20739517SBill.Taylor@Sun.COM  *    the hardware to the software. The command takes the EQC entry from the
20749517SBill.Taylor@Sun.COM  *    hardware and stores it in the output mailbox. The EQC entry will be
20759517SBill.Taylor@Sun.COM  *    invalidated as a result of the command.  It is the responsibility of the
20769517SBill.Taylor@Sun.COM  *    software to unmap all the events, which might have been previously
20779517SBill.Taylor@Sun.COM  *    mapped to the EQ, prior to issuing the HW2SW_EQ command.
20789517SBill.Taylor@Sun.COM  */
20799517SBill.Taylor@Sun.COM 
20809517SBill.Taylor@Sun.COM 
20819517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
20829517SBill.Taylor@Sun.COM struct hermon_hw_eqc_s {
20839517SBill.Taylor@Sun.COM 	uint32_t			:32;
20849517SBill.Taylor@Sun.COM 
20859517SBill.Taylor@Sun.COM 	uint32_t			:8;
20869517SBill.Taylor@Sun.COM 	uint32_t	state		:4;
20879517SBill.Taylor@Sun.COM 	uint32_t			:5;
20889517SBill.Taylor@Sun.COM 	uint32_t	overrun_ignore	:1;
20899517SBill.Taylor@Sun.COM 	uint32_t	ev_coalesc	:1;
20909517SBill.Taylor@Sun.COM 	uint32_t			:9;
20919517SBill.Taylor@Sun.COM 	uint32_t	status		:4;
20929517SBill.Taylor@Sun.COM 
20939517SBill.Taylor@Sun.COM 	uint32_t			:24;
20949517SBill.Taylor@Sun.COM 	uint32_t	log_eq_sz	:5;
20959517SBill.Taylor@Sun.COM 	uint32_t			:3;
20969517SBill.Taylor@Sun.COM 
20979517SBill.Taylor@Sun.COM 	uint32_t			:5;
20989517SBill.Taylor@Sun.COM 	uint32_t	pg_offs		:7;
20999517SBill.Taylor@Sun.COM 	uint32_t			:20;
21009517SBill.Taylor@Sun.COM 
21019517SBill.Taylor@Sun.COM 	uint32_t	intr		:10;
21029517SBill.Taylor@Sun.COM 	uint32_t			:22;
21039517SBill.Taylor@Sun.COM 
21049517SBill.Taylor@Sun.COM 	uint32_t	eq_max_cnt	:16;
21059517SBill.Taylor@Sun.COM 	uint32_t	eq_period	:16;
21069517SBill.Taylor@Sun.COM 
21079517SBill.Taylor@Sun.COM 	uint32_t			:3;
21089517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addrl	:29;
21099517SBill.Taylor@Sun.COM 
21109517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addrh 	:8;
21119517SBill.Taylor@Sun.COM 	uint32_t			:16;
21129517SBill.Taylor@Sun.COM 	uint32_t	log2_pgsz	:6;	/* in 4K pages */
21139517SBill.Taylor@Sun.COM 	uint32_t			:2;
21149517SBill.Taylor@Sun.COM 
21159517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[2];
21169517SBill.Taylor@Sun.COM 
21179517SBill.Taylor@Sun.COM 	uint32_t	prod_indx	:24;
21189517SBill.Taylor@Sun.COM 	uint32_t			:8;
21199517SBill.Taylor@Sun.COM 
21209517SBill.Taylor@Sun.COM 	uint32_t	cons_indx	:24;
21219517SBill.Taylor@Sun.COM 	uint32_t			:8;
21229517SBill.Taylor@Sun.COM 
21239517SBill.Taylor@Sun.COM 	uint64_t	rsrv1[2];	/* force it to 8b alignment */
21249517SBill.Taylor@Sun.COM };
21259517SBill.Taylor@Sun.COM #else /* BIG ENDIAN */
21269517SBill.Taylor@Sun.COM struct hermon_hw_eqc_s {
21279517SBill.Taylor@Sun.COM 	uint32_t	status		:4;
21289517SBill.Taylor@Sun.COM 	uint32_t			:9;
21299517SBill.Taylor@Sun.COM 	uint32_t	ev_coalesc	:1;
21309517SBill.Taylor@Sun.COM 	uint32_t	overrun_ignore	:1;
21319517SBill.Taylor@Sun.COM 	uint32_t			:5;
21329517SBill.Taylor@Sun.COM 	uint32_t	state		:4;
21339517SBill.Taylor@Sun.COM 	uint32_t			:8;
21349517SBill.Taylor@Sun.COM 
21359517SBill.Taylor@Sun.COM 	uint32_t			:32;
21369517SBill.Taylor@Sun.COM 
21379517SBill.Taylor@Sun.COM 	uint32_t			:20;
21389517SBill.Taylor@Sun.COM 	uint32_t	pg_offs		:7;
21399517SBill.Taylor@Sun.COM 	uint32_t			:5;
21409517SBill.Taylor@Sun.COM 
21419517SBill.Taylor@Sun.COM 	uint32_t			:3;
21429517SBill.Taylor@Sun.COM 	uint32_t	log_eq_sz	:5;
21439517SBill.Taylor@Sun.COM 	uint32_t			:24;
21449517SBill.Taylor@Sun.COM 
21459517SBill.Taylor@Sun.COM 	uint32_t	eq_period	:16;
21469517SBill.Taylor@Sun.COM 	uint32_t	eq_max_cnt	:16;
21479517SBill.Taylor@Sun.COM 
21489517SBill.Taylor@Sun.COM 	uint32_t			:22;
21499517SBill.Taylor@Sun.COM 	uint32_t	intr		:10;
21509517SBill.Taylor@Sun.COM 
21519517SBill.Taylor@Sun.COM 	uint32_t			:2;
21529517SBill.Taylor@Sun.COM 	uint32_t	log2_pgsz	:6;	/* in 4K pages */
21539517SBill.Taylor@Sun.COM 	uint32_t			:16;
21549517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addrh 	:8;
21559517SBill.Taylor@Sun.COM 
21569517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addrl	:29;
21579517SBill.Taylor@Sun.COM 	uint32_t			:3;
21589517SBill.Taylor@Sun.COM 
21599517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[2];
21609517SBill.Taylor@Sun.COM 
21619517SBill.Taylor@Sun.COM 	uint32_t			:8;
21629517SBill.Taylor@Sun.COM 	uint32_t	cons_indx	:24;
21639517SBill.Taylor@Sun.COM 
21649517SBill.Taylor@Sun.COM 	uint32_t			:8;
21659517SBill.Taylor@Sun.COM 	uint32_t	prod_indx	:24;
21669517SBill.Taylor@Sun.COM 
21679517SBill.Taylor@Sun.COM 	uint64_t	rsrv1[2];	/* force it to 8b alignment */
21689517SBill.Taylor@Sun.COM };
21699517SBill.Taylor@Sun.COM #endif
21709517SBill.Taylor@Sun.COM #define	HERMON_EQ_STATUS_OK		0x0
21719517SBill.Taylor@Sun.COM #define	HERMON_EQ_STATUS_OVERFLOW	0x9
21729517SBill.Taylor@Sun.COM #define	HERMON_EQ_STATUS_WRITE_FAILURE	0xA
21739517SBill.Taylor@Sun.COM 
21749517SBill.Taylor@Sun.COM #define	HERMON_EQ_ARMED			0x9
21759517SBill.Taylor@Sun.COM #define	HERMON_EQ_FIRED			0xA
21769517SBill.Taylor@Sun.COM #define	HERMON_EQ_ALWAYS_ARMED		0xB
21779517SBill.Taylor@Sun.COM 
21789517SBill.Taylor@Sun.COM 
21799517SBill.Taylor@Sun.COM /*
21809517SBill.Taylor@Sun.COM  * Hermon Event Queue Entries (EQE)
21819517SBill.Taylor@Sun.COM  *    Each EQE contains enough information for the software to identify the
21829517SBill.Taylor@Sun.COM  *    source of the event.  The following structures are used to define each
21839517SBill.Taylor@Sun.COM  *    of the various kinds of events that the Hermon hardware will generate.
21849517SBill.Taylor@Sun.COM  *    Note: The hermon_hw_eqe_t below is the generic "Event Queue Entry".  All
21859517SBill.Taylor@Sun.COM  *    other EQEs differ only in the contents of their "event_data" field.
21869517SBill.Taylor@Sun.COM  *
21879517SBill.Taylor@Sun.COM  *    Below we first define several structures which define the contents of
21889517SBill.Taylor@Sun.COM  *    the "event_data" fields:
21899517SBill.Taylor@Sun.COM  *    hermon_hw_eqe_cq_t for "Completion Queue Events"
21909517SBill.Taylor@Sun.COM  *    hermon_hw_eqe_qp_evt_t for "Queue Pair Events" such as Path Migration
21919517SBill.Taylor@Sun.COM  *        Succeeded, Path Migration Failed, Communication Established, Send
21929517SBill.Taylor@Sun.COM  *        Queue Drained, Local WQ Catastrophic Error, Invalid Request Local
21939517SBill.Taylor@Sun.COM  *        WQ Error, and Local Access Violation WQ Error.
21949517SBill.Taylor@Sun.COM  *    hermon_hw_eqe_cqerr_t for "Completion Queue Error Events"
21959517SBill.Taylor@Sun.COM  *    hermon_hw_eqe_portstate_t for "Port State Change Events"
21969517SBill.Taylor@Sun.COM  *    hermon_hw_eqe_gpio_t for "GPIO State Change Events"
21979517SBill.Taylor@Sun.COM  *    hermon_hw_eqe_cmdcmpl_t for "Command Interface Completion Events"
21989517SBill.Taylor@Sun.COM  *    hermon_hw_eqe_operr_t for "Operational and Catastrophic Error Events"
21999517SBill.Taylor@Sun.COM  *        such as EQ Overflow, Misbehaved UAR page, Internal Parity Error,
22009517SBill.Taylor@Sun.COM  *        Uplink bus error, and DDR data error.
22019517SBill.Taylor@Sun.COM  *    hermon_hw_eqe_pgflt_t for "Not-present Page Fault on WQE or Data
22029517SBill.Taylor@Sun.COM  *        Buffer Access".  (Note: Currently, this event is unsupported).
22039517SBill.Taylor@Sun.COM  *
22049517SBill.Taylor@Sun.COM  *    Note also: The following structures are not #define'd with both
22059517SBill.Taylor@Sun.COM  *    little-endian and big-endian definitions.  This is because their
22069517SBill.Taylor@Sun.COM  *    individual fields are not directly accessed except through the macros
22079517SBill.Taylor@Sun.COM  *    defined below.
22089517SBill.Taylor@Sun.COM  */
22099517SBill.Taylor@Sun.COM 
22109517SBill.Taylor@Sun.COM 
22119517SBill.Taylor@Sun.COM typedef struct hermon_hw_eqe_cq_s {
22129517SBill.Taylor@Sun.COM 	uint32_t			:8;
22139517SBill.Taylor@Sun.COM 	uint32_t	cqn		:24;
22149517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[5];
22159517SBill.Taylor@Sun.COM } hermon_hw_eqe_cq_t;
22169517SBill.Taylor@Sun.COM 
22179517SBill.Taylor@Sun.COM 
22189517SBill.Taylor@Sun.COM 
22199517SBill.Taylor@Sun.COM typedef struct hermon_hw_eqe_qp_evt_s {
22209517SBill.Taylor@Sun.COM 	uint32_t			:8;
22219517SBill.Taylor@Sun.COM 	uint32_t	qpn		:24;
22229517SBill.Taylor@Sun.COM 
22239517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[5];
22249517SBill.Taylor@Sun.COM } hermon_hw_eqe_qpevt_t;
22259517SBill.Taylor@Sun.COM 
22269517SBill.Taylor@Sun.COM 
22279517SBill.Taylor@Sun.COM typedef struct hermon_hw_eqe_cqerr_s {
22289517SBill.Taylor@Sun.COM 	uint32_t			:8;
22299517SBill.Taylor@Sun.COM 	uint32_t	cqn		:24;
22309517SBill.Taylor@Sun.COM 
22319517SBill.Taylor@Sun.COM 	uint32_t			:32;
22329517SBill.Taylor@Sun.COM 
22339517SBill.Taylor@Sun.COM 	uint32_t			:24;
22349517SBill.Taylor@Sun.COM 	uint32_t	syndrome	:8;
22359517SBill.Taylor@Sun.COM 
22369517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[3];
22379517SBill.Taylor@Sun.COM } hermon_hw_eqe_cqerr_t;
22389517SBill.Taylor@Sun.COM #define	HERMON_CQERR_OVERFLOW		0x1
22399517SBill.Taylor@Sun.COM #define	HERMON_CQERR_ACCESS_VIOLATION	0x2
22409517SBill.Taylor@Sun.COM 
22419517SBill.Taylor@Sun.COM 
22429517SBill.Taylor@Sun.COM typedef struct hermon_hw_eqe_portstate_s {
22439517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[2];
22449517SBill.Taylor@Sun.COM 
22459517SBill.Taylor@Sun.COM 	uint32_t			:2;
22469517SBill.Taylor@Sun.COM 	uint32_t	port		:2;
22479517SBill.Taylor@Sun.COM 	uint32_t			:28;
22489517SBill.Taylor@Sun.COM 
22499517SBill.Taylor@Sun.COM 	uint32_t	rsrv1[3];
22509517SBill.Taylor@Sun.COM } hermon_hw_eqe_portstate_t;
22519517SBill.Taylor@Sun.COM #define	HERMON_PORT_LINK_ACTIVE		0x4
22529517SBill.Taylor@Sun.COM #define	HERMON_PORT_LINK_DOWN		0x1
22539517SBill.Taylor@Sun.COM 
22549517SBill.Taylor@Sun.COM 
22559517SBill.Taylor@Sun.COM typedef struct hermon_hw_eqe_gpio_s {
22569517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[3];
22579517SBill.Taylor@Sun.COM 
22589517SBill.Taylor@Sun.COM 	uint32_t	gpio_ev0;
22599517SBill.Taylor@Sun.COM 
22609517SBill.Taylor@Sun.COM 	uint32_t	gpio_ev1;
22619517SBill.Taylor@Sun.COM 
22629517SBill.Taylor@Sun.COM 	uint32_t		:32;
22639517SBill.Taylor@Sun.COM } hermon_hw_eqe_gpio_t;
22649517SBill.Taylor@Sun.COM 
22659517SBill.Taylor@Sun.COM 
22669517SBill.Taylor@Sun.COM typedef struct hermon_hw_eqe_cmdcmpl_s {
22679517SBill.Taylor@Sun.COM 	uint32_t			:16;
22689517SBill.Taylor@Sun.COM 	uint32_t	token		:16;
22699517SBill.Taylor@Sun.COM 
22709517SBill.Taylor@Sun.COM 	uint32_t			:32;
22719517SBill.Taylor@Sun.COM 
22729517SBill.Taylor@Sun.COM 	uint32_t			:24;
22739517SBill.Taylor@Sun.COM 	uint32_t	status	:8;
22749517SBill.Taylor@Sun.COM 
22759517SBill.Taylor@Sun.COM 	uint32_t	out_param0;
22769517SBill.Taylor@Sun.COM 
22779517SBill.Taylor@Sun.COM 	uint32_t	out_param1;
22789517SBill.Taylor@Sun.COM 
22799517SBill.Taylor@Sun.COM 	uint32_t			:32;
22809517SBill.Taylor@Sun.COM } hermon_hw_eqe_cmdcmpl_t;
22819517SBill.Taylor@Sun.COM 
22829517SBill.Taylor@Sun.COM 
22839517SBill.Taylor@Sun.COM typedef struct hermon_hw_eqe_operr_s {
22849517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[2];
22859517SBill.Taylor@Sun.COM 
22869517SBill.Taylor@Sun.COM 	uint32_t			:24;
22879517SBill.Taylor@Sun.COM 	uint32_t	error_type	:8;
22889517SBill.Taylor@Sun.COM 
22899517SBill.Taylor@Sun.COM 	uint32_t	data;
22909517SBill.Taylor@Sun.COM 
22919517SBill.Taylor@Sun.COM 	uint32_t	rsrv1[2];
22929517SBill.Taylor@Sun.COM } hermon_hw_eqe_operr_t;
22939517SBill.Taylor@Sun.COM #define	HERMON_ERREVT_EQ_OVERFLOW	0x1
22949517SBill.Taylor@Sun.COM #define	HERMON_ERREVT_BAD_UARPG		0x2
22959517SBill.Taylor@Sun.COM #define	HERMON_ERREVT_UPLINK_BUSERR	0x3
22969517SBill.Taylor@Sun.COM #define	HERMON_ERREVT_DDR_DATAERR	0x4
22979517SBill.Taylor@Sun.COM #define	HERMON_ERREVT_INTERNAL_PARITY	0x5
22989517SBill.Taylor@Sun.COM 
22999517SBill.Taylor@Sun.COM 
2300*12965SWilliam.Taylor@Oracle.COM typedef struct hermon_hw_eqe_fcerr_s {
2301*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:14;
2302*12965SWilliam.Taylor@Oracle.COM 	uint32_t	port		:2;
2303*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fexch		:16;	/* fexch number */
2304*12965SWilliam.Taylor@Oracle.COM 
2305*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
2306*12965SWilliam.Taylor@Oracle.COM 
2307*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:24;
2308*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fcsyndrome	:8;
2309*12965SWilliam.Taylor@Oracle.COM 
2310*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd[3];
2311*12965SWilliam.Taylor@Oracle.COM } hermon_hw_eqe_fcerr_t;
2312*12965SWilliam.Taylor@Oracle.COM 
2313*12965SWilliam.Taylor@Oracle.COM #define	HERMON_ERR_FC_BADIU		0x0
2314*12965SWilliam.Taylor@Oracle.COM #define	HERMON_ERR_FC_SEQUENCE		0x01
2315*12965SWilliam.Taylor@Oracle.COM 
23169517SBill.Taylor@Sun.COM typedef struct hermon_hw_eqe_pgflt_s {
23179517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[2];
23189517SBill.Taylor@Sun.COM 	uint32_t			:24;
23199517SBill.Taylor@Sun.COM 	uint32_t	fault_type	:4;
23209517SBill.Taylor@Sun.COM 	uint32_t	wqv		:1;
23219517SBill.Taylor@Sun.COM 	uint32_t	wqe_data	:1;
23229517SBill.Taylor@Sun.COM 	uint32_t	rem_loc		:1;
23239517SBill.Taylor@Sun.COM 	uint32_t	snd_rcv		:1;
23249517SBill.Taylor@Sun.COM 	uint32_t	vaddr_h;
23259517SBill.Taylor@Sun.COM 	uint32_t	vaddr_l;
23269517SBill.Taylor@Sun.COM 	uint32_t	mem_key;
23279517SBill.Taylor@Sun.COM } hermon_hw_eqe_pgflt_t;
23289517SBill.Taylor@Sun.COM #define	HERMON_PGFLT_PG_NOTPRESENT	0x8
23299517SBill.Taylor@Sun.COM #define	HERMON_PGFLT_PG_WRACC_VIOL	0xA
23309517SBill.Taylor@Sun.COM #define	HERMON_PGFLT_UNSUP_NOTPRESENT	0xE
23319517SBill.Taylor@Sun.COM #define	HERMON_PGFLT_UNSUP_WRACC_VIOL	0xF
23329517SBill.Taylor@Sun.COM #define	HERMON_PGFLT_WQE_CAUSED		0x1
23339517SBill.Taylor@Sun.COM #define	HERMON_PGFLT_DATA_CAUSED		0x0
23349517SBill.Taylor@Sun.COM #define	HERMON_PGFLT_REMOTE_CAUSED	0x1
23359517SBill.Taylor@Sun.COM #define	HERMON_PGFLT_LOCAL_CAUSED	0x0
23369517SBill.Taylor@Sun.COM #define	HERMON_PGFLT_SEND_CAUSED		0x1
23379517SBill.Taylor@Sun.COM #define	HERMON_PGFLT_RECV_CAUSED		0x0
23389517SBill.Taylor@Sun.COM #define	HERMON_PGFLT_DESC_CONSUMED	0x1
23399517SBill.Taylor@Sun.COM #define	HERMON_PGFLT_DESC_NOTCONSUMED	0x0
23409517SBill.Taylor@Sun.COM 
23419517SBill.Taylor@Sun.COM struct hermon_hw_eqe_s {
23429517SBill.Taylor@Sun.COM 	uint32_t			:8;
23439517SBill.Taylor@Sun.COM 	uint32_t	event_type	:8;
23449517SBill.Taylor@Sun.COM 	uint32_t			:8;
23459517SBill.Taylor@Sun.COM 	uint32_t	event_subtype	:8;
23469517SBill.Taylor@Sun.COM 	union {
23479517SBill.Taylor@Sun.COM 		hermon_hw_eqe_cq_t		eqe_cq;
23489517SBill.Taylor@Sun.COM 		hermon_hw_eqe_qpevt_t		eqe_qpevt;
23499517SBill.Taylor@Sun.COM 		hermon_hw_eqe_cqerr_t		eqe_cqerr;
23509517SBill.Taylor@Sun.COM 		hermon_hw_eqe_portstate_t	eqe_portstate;
23519517SBill.Taylor@Sun.COM 		hermon_hw_eqe_gpio_t		eqe_gpio;
23529517SBill.Taylor@Sun.COM 		hermon_hw_eqe_cmdcmpl_t		eqe_cmdcmpl;
23539517SBill.Taylor@Sun.COM 		hermon_hw_eqe_operr_t		eqe_operr;
23549517SBill.Taylor@Sun.COM 		hermon_hw_eqe_pgflt_t		eqe_pgflt;
2355*12965SWilliam.Taylor@Oracle.COM 		hermon_hw_eqe_fcerr_t		eqe_fcerr;
23569517SBill.Taylor@Sun.COM 	} event_data;
23579517SBill.Taylor@Sun.COM 	uint32_t			:24;
23589517SBill.Taylor@Sun.COM 	uint32_t	owner		:1;
23599517SBill.Taylor@Sun.COM 	uint32_t			:7;
23609517SBill.Taylor@Sun.COM };
23619517SBill.Taylor@Sun.COM #define	eqe_cq				event_data.eqe_cq
23629517SBill.Taylor@Sun.COM #define	eqe_qpevt			event_data.eqe_qpevt
23639517SBill.Taylor@Sun.COM #define	eqe_cqerr			event_data.eqe_cqerr
23649517SBill.Taylor@Sun.COM #define	eqe_portstate			event_data.eqe_portstate
23659517SBill.Taylor@Sun.COM #define	eqe_gpio			event_data.eqe_gpio
23669517SBill.Taylor@Sun.COM #define	eqe_cmdcmpl			event_data.eqe_cmdcmpl
23679517SBill.Taylor@Sun.COM #define	eqe_operr			event_data.eqe_operr
23689517SBill.Taylor@Sun.COM #define	eqe_pgflt			event_data.eqe_pgflt
2369*12965SWilliam.Taylor@Oracle.COM #define	eqe_fcerr			event_data.eqe_fcerr
23709517SBill.Taylor@Sun.COM 
23719517SBill.Taylor@Sun.COM /*
23729517SBill.Taylor@Sun.COM  * The following macros are used for extracting (and in some cases filling in)
23739517SBill.Taylor@Sun.COM  * information from EQEs
23749517SBill.Taylor@Sun.COM  */
23759517SBill.Taylor@Sun.COM #define	HERMON_EQE_CQNUM_MASK		0x00FFFFFF
23769517SBill.Taylor@Sun.COM #define	HERMON_EQE_CQNUM_SHIFT		0
23779517SBill.Taylor@Sun.COM #define	HERMON_EQE_QPNUM_MASK		0x00FFFFFF
23789517SBill.Taylor@Sun.COM #define	HERMON_EQE_QPNUM_SHIFT		0
23799517SBill.Taylor@Sun.COM #define	HERMON_EQE_PORTNUM_MASK		0x30
23809517SBill.Taylor@Sun.COM #define	HERMON_EQE_PORTNUM_SHIFT	4
23819517SBill.Taylor@Sun.COM #define	HERMON_EQE_OWNER_MASK		0x00000080
23829517SBill.Taylor@Sun.COM #define	HERMON_EQE_OWNER_SHIFT		7
23839517SBill.Taylor@Sun.COM 
23849517SBill.Taylor@Sun.COM #define	HERMON_EQE_EVTTYPE_GET(eq, eqe)					\
23859517SBill.Taylor@Sun.COM 	(((uint8_t *)(eqe))[1])
23869517SBill.Taylor@Sun.COM #define	HERMON_EQE_EVTSUBTYPE_GET(eq, eqe)				\
23879517SBill.Taylor@Sun.COM 	(((uint8_t *)(eqe))[3])
23889517SBill.Taylor@Sun.COM #define	HERMON_EQE_CQNUM_GET(eq, eqe)					\
23899517SBill.Taylor@Sun.COM 	((htonl(((uint32_t *)(eqe))[1]) & HERMON_EQE_CQNUM_MASK) >>	\
23909517SBill.Taylor@Sun.COM 	    HERMON_EQE_CQNUM_SHIFT)
23919517SBill.Taylor@Sun.COM #define	HERMON_EQE_QPNUM_GET(eq, eqe)					\
23929517SBill.Taylor@Sun.COM 	((htonl(((uint32_t *)(eqe))[1]) & HERMON_EQE_QPNUM_MASK) >>	\
23939517SBill.Taylor@Sun.COM 	HERMON_EQE_QPNUM_SHIFT)
23949517SBill.Taylor@Sun.COM #define	HERMON_EQE_PORTNUM_GET(eq, eqe)					\
23959517SBill.Taylor@Sun.COM 	(((((uint8_t *)(eqe))[12]) & HERMON_EQE_PORTNUM_MASK) >>	\
23969517SBill.Taylor@Sun.COM 	    HERMON_EQE_PORTNUM_SHIFT)
23979517SBill.Taylor@Sun.COM #define	HERMON_EQE_CMDTOKEN_GET(eq, eqe)				\
23989517SBill.Taylor@Sun.COM 	htons(((uint16_t *)(eqe))[3])
23999517SBill.Taylor@Sun.COM #define	HERMON_EQE_CMDSTATUS_GET(eq, eqe)				\
24009517SBill.Taylor@Sun.COM 	(((uint8_t *)(eqe))[0xf])
24019517SBill.Taylor@Sun.COM #define	HERMON_EQE_CMDOUTP0_GET(eq, eqe)				\
24029517SBill.Taylor@Sun.COM 	htonl(((uint32_t *)(eqe))[4])
24039517SBill.Taylor@Sun.COM #define	HERMON_EQE_CMDOUTP1_GET(eq, eqe)				\
24049517SBill.Taylor@Sun.COM 	htonl(((uint32_t *)(eqe))[5])
24059517SBill.Taylor@Sun.COM #define	HERMON_EQE_OPERRTYPE_GET(eq, eqe)				\
24069517SBill.Taylor@Sun.COM 	(((uint8_t *)(eqe))[0xf])
24079517SBill.Taylor@Sun.COM #define	HERMON_EQE_OPERRDATA_GET(eq, eqe)				\
24089517SBill.Taylor@Sun.COM 	htonl(((uint32_t *)(eqe))[4])
2409*12965SWilliam.Taylor@Oracle.COM #define	HERMON_EQE_FEXCH_PORTNUM_GET(eq, eqe)				\
2410*12965SWilliam.Taylor@Oracle.COM 	(((uint8_t *)(eqe))[5] & 0x3)
2411*12965SWilliam.Taylor@Oracle.COM #define	HERMON_EQE_FEXCH_FEXCH_GET(eq, eqe)				\
2412*12965SWilliam.Taylor@Oracle.COM 	htons(((uint16_t *)(eqe))[3])
2413*12965SWilliam.Taylor@Oracle.COM #define	HERMON_EQE_FEXCH_SYNDROME_GET(eq, eqe)				\
2414*12965SWilliam.Taylor@Oracle.COM 	(((uint8_t *)(eqe))[15])
2415*12965SWilliam.Taylor@Oracle.COM 
24169517SBill.Taylor@Sun.COM /*
24179517SBill.Taylor@Sun.COM  * Hermon does ownership of CQ and EQ differently from Arbel & Tavor.
24189517SBill.Taylor@Sun.COM  * Now, you keep track of the TOTAL number of CQE's or EQE's that have been
24199517SBill.Taylor@Sun.COM  * processed, and the sense of the ownership bit changes each time through.
24209517SBill.Taylor@Sun.COM  * That is, if the size of the queue is 16, so 4 bits [3:0] are the index
24219517SBill.Taylor@Sun.COM  * number, then bit [4] is the ownership bit in the count.  So you mask that
24229517SBill.Taylor@Sun.COM  * bit and compare it to the owner bit in the entry - if the same, then the
24239517SBill.Taylor@Sun.COM  * entry is in SW onwership.  Otherwise, it's in hardware and the driver
24249517SBill.Taylor@Sun.COM  * does not consume it.
24259517SBill.Taylor@Sun.COM  */
24269517SBill.Taylor@Sun.COM 
2427*12965SWilliam.Taylor@Oracle.COM #define	HERMON_EQE_OWNER_IS_SW(eq, eqe, consindx, shift)		\
24289517SBill.Taylor@Sun.COM 	((((uint8_t *)(eqe))[0x1f] & HERMON_EQE_OWNER_MASK) ==		\
2429*12965SWilliam.Taylor@Oracle.COM 	    (((consindx) & eq->eq_bufsz) >> (shift)))
24309517SBill.Taylor@Sun.COM 
24319517SBill.Taylor@Sun.COM /*
24329517SBill.Taylor@Sun.COM  * Hermon Completion Queue Context Table (CQC) entries
24339517SBill.Taylor@Sun.COM  *    The CQC table is a virtually-contiguous memory area residing in HCA's
24349517SBill.Taylor@Sun.COM  *    ICM.  Each CQC table entry contains information
24359517SBill.Taylor@Sun.COM  *    required by the hardware to access the completion queue to post
24369517SBill.Taylor@Sun.COM  *    completions (CQE).
24379517SBill.Taylor@Sun.COM  *
24389517SBill.Taylor@Sun.COM  *    The following structure is used in the SW2HW_CQ, QUERY_CQ, RESIZE_CQ,
24399517SBill.Taylor@Sun.COM  *    and HW2SW_CQ commands.
24409517SBill.Taylor@Sun.COM  *    The SW2HW_CQ command transfers ownership of an CQ context from software
24419517SBill.Taylor@Sun.COM  *    to hardware. The command takes the CQC entry from the input mailbox and
24429517SBill.Taylor@Sun.COM  *    stores it in the CQC in the hardware. The command will fail if the
24439517SBill.Taylor@Sun.COM  *    requested CQC entry is already owned by the hardware.
24449517SBill.Taylor@Sun.COM  *    The QUERY_CQ command retrieves a snapshot of a CQC entry. The command
24459517SBill.Taylor@Sun.COM  *    stores the snapshot in the output mailbox.  The CQC state and its values
24469517SBill.Taylor@Sun.COM  *    are not affected by the QUERY_CQ command.
24479517SBill.Taylor@Sun.COM  *    Finally, the HW2SW_CQ command transfers ownership of a CQC entry from
24489517SBill.Taylor@Sun.COM  *    the hardware to the software. The command takes the CQC entry from the
24499517SBill.Taylor@Sun.COM  *    hardware and stores it in the output mailbox. The CQC entry will be
24509517SBill.Taylor@Sun.COM  *    invalidated as a result of the command.
24519517SBill.Taylor@Sun.COM  */
24529517SBill.Taylor@Sun.COM 
24539517SBill.Taylor@Sun.COM 
24549517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
24559517SBill.Taylor@Sun.COM struct hermon_hw_cqc_s {
24569517SBill.Taylor@Sun.COM 	uint32_t			:32;
24579517SBill.Taylor@Sun.COM 
24589517SBill.Taylor@Sun.COM 	uint32_t			:8;
24599517SBill.Taylor@Sun.COM 	uint32_t	state		:4;
24609517SBill.Taylor@Sun.COM 	uint32_t			:5;
24619517SBill.Taylor@Sun.COM 	uint32_t	overrun_ignore	:1;
24629517SBill.Taylor@Sun.COM 	uint32_t	cqe_coalesc	:1;
24639517SBill.Taylor@Sun.COM 	uint32_t			:9;
24649517SBill.Taylor@Sun.COM 	uint32_t	status		:4;
24659517SBill.Taylor@Sun.COM 
24669517SBill.Taylor@Sun.COM 	uint32_t	usr_page	:24;
24679517SBill.Taylor@Sun.COM 	uint32_t	log_cq_sz	:5;
24689517SBill.Taylor@Sun.COM 	uint32_t			:3;
24699517SBill.Taylor@Sun.COM 
24709517SBill.Taylor@Sun.COM 	uint32_t			:5;
24719517SBill.Taylor@Sun.COM 	uint32_t	pg_offs		:7;
24729517SBill.Taylor@Sun.COM 	uint32_t			:20;
24739517SBill.Taylor@Sun.COM 
24749517SBill.Taylor@Sun.COM 	uint32_t	c_eqn		:9;
24759517SBill.Taylor@Sun.COM 	uint32_t			:23;
24769517SBill.Taylor@Sun.COM 
24779517SBill.Taylor@Sun.COM 	uint32_t	cq_max_cnt	:16;
24789517SBill.Taylor@Sun.COM 	uint32_t	cq_period	:16;
24799517SBill.Taylor@Sun.COM 
24809517SBill.Taylor@Sun.COM 	uint32_t			:3;
24819517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addl 	:29;
24829517SBill.Taylor@Sun.COM 
24839517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addh 	:8;
24849517SBill.Taylor@Sun.COM 	uint32_t			:16;
24859517SBill.Taylor@Sun.COM 	uint32_t	log2_pgsz	:6;
24869517SBill.Taylor@Sun.COM 	uint32_t			:2;
24879517SBill.Taylor@Sun.COM 
24889517SBill.Taylor@Sun.COM 	uint32_t	solicit_prod_indx :24;
24899517SBill.Taylor@Sun.COM 	uint32_t				:8;
24909517SBill.Taylor@Sun.COM 
24919517SBill.Taylor@Sun.COM 	uint32_t	last_notified_indx	:24;
24929517SBill.Taylor@Sun.COM 	uint32_t				:8;
24939517SBill.Taylor@Sun.COM 
24949517SBill.Taylor@Sun.COM 	uint32_t	prod_cntr		:24;	/* producer counter */
24959517SBill.Taylor@Sun.COM 	uint32_t				:8;
24969517SBill.Taylor@Sun.COM 
24979517SBill.Taylor@Sun.COM 	uint32_t	cons_cntr		:24;	/* consumer counter */
24989517SBill.Taylor@Sun.COM 	uint32_t				:8;
24999517SBill.Taylor@Sun.COM 
25009517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[2];
25019517SBill.Taylor@Sun.COM 
25029517SBill.Taylor@Sun.COM 	uint32_t				:3;
25039517SBill.Taylor@Sun.COM 	uint32_t	dbr_addrl		:29;
25049517SBill.Taylor@Sun.COM 
25059517SBill.Taylor@Sun.COM 	uint32_t	dbr_addrh;
25069517SBill.Taylor@Sun.COM 
25079517SBill.Taylor@Sun.COM 	uint64_t	rsrv1[8];		/* hermon, match DEV_CAP size */
25089517SBill.Taylor@Sun.COM };
25099517SBill.Taylor@Sun.COM #else
25109517SBill.Taylor@Sun.COM struct hermon_hw_cqc_s {
2511*12965SWilliam.Taylor@Oracle.COM 	uint32_t	status		:4;
25129517SBill.Taylor@Sun.COM 	uint32_t			:9;
25139517SBill.Taylor@Sun.COM 	uint32_t	cqe_coalesc	:1;
25149517SBill.Taylor@Sun.COM 	uint32_t	overrun_ignore	:1;
25159517SBill.Taylor@Sun.COM 	uint32_t			:5;
25169517SBill.Taylor@Sun.COM 	uint32_t	state		:4;
25179517SBill.Taylor@Sun.COM 	uint32_t			:8;
25189517SBill.Taylor@Sun.COM 
25199517SBill.Taylor@Sun.COM 	uint32_t			:32;
25209517SBill.Taylor@Sun.COM 
25219517SBill.Taylor@Sun.COM 	uint32_t			:20;
25229517SBill.Taylor@Sun.COM 	uint32_t	pg_offs		:7;
25239517SBill.Taylor@Sun.COM 	uint32_t			:5;
25249517SBill.Taylor@Sun.COM 
25259517SBill.Taylor@Sun.COM 	uint32_t			:3;
25269517SBill.Taylor@Sun.COM 	uint32_t	log_cq_sz	:5;
25279517SBill.Taylor@Sun.COM 	uint32_t	usr_page	:24;
25289517SBill.Taylor@Sun.COM 
25299517SBill.Taylor@Sun.COM 	uint32_t	cq_period	:16;
25309517SBill.Taylor@Sun.COM 	uint32_t	cq_max_cnt	:16;
25319517SBill.Taylor@Sun.COM 
25329517SBill.Taylor@Sun.COM 	uint32_t			:23;
25339517SBill.Taylor@Sun.COM 	uint32_t	c_eqn		:9;
25349517SBill.Taylor@Sun.COM 
25359517SBill.Taylor@Sun.COM 	uint32_t			:2;
25369517SBill.Taylor@Sun.COM 	uint32_t	log2_pgsz	:6;
25379517SBill.Taylor@Sun.COM 	uint32_t			:16;
25389517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addh 	:8;
25399517SBill.Taylor@Sun.COM 
25409517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addl 	:29;
25419517SBill.Taylor@Sun.COM 	uint32_t				:3;
25429517SBill.Taylor@Sun.COM 
25439517SBill.Taylor@Sun.COM 	uint32_t				:8;
25449517SBill.Taylor@Sun.COM 	uint32_t	last_notified_indx	:24;
25459517SBill.Taylor@Sun.COM 
25469517SBill.Taylor@Sun.COM 	uint32_t				:8;
25479517SBill.Taylor@Sun.COM 	uint32_t	solicit_prod_indx	:24;
25489517SBill.Taylor@Sun.COM 
25499517SBill.Taylor@Sun.COM 	uint32_t				:8;
25509517SBill.Taylor@Sun.COM 	uint32_t	cons_cntr		:24;	/* consumer counter */
25519517SBill.Taylor@Sun.COM 
25529517SBill.Taylor@Sun.COM 	uint32_t				:8;
25539517SBill.Taylor@Sun.COM 	uint32_t	prod_cntr		:24;	/* priducer counter */
25549517SBill.Taylor@Sun.COM 
25559517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[2];
25569517SBill.Taylor@Sun.COM 
25579517SBill.Taylor@Sun.COM 	uint32_t	dbr_addrh;
25589517SBill.Taylor@Sun.COM 
25599517SBill.Taylor@Sun.COM 	uint32_t	dbr_addrl		:29;
25609517SBill.Taylor@Sun.COM 	uint32_t				:3;
25619517SBill.Taylor@Sun.COM 
25629517SBill.Taylor@Sun.COM 	uint64_t	rsrv1[8];		/* hermon, match DEV_CAP size */
25639517SBill.Taylor@Sun.COM };
25649517SBill.Taylor@Sun.COM #endif
25659517SBill.Taylor@Sun.COM #define	HERMON_CQ_STATUS_OK		0x0
25669517SBill.Taylor@Sun.COM #define	HERMON_CQ_STATUS_OVERFLOW	0x9
25679517SBill.Taylor@Sun.COM #define	HERMON_CQ_STATUS_WRITE_FAILURE	0xA
25689517SBill.Taylor@Sun.COM 
25699517SBill.Taylor@Sun.COM #define	HERMON_CQ_DISARMED		0x0
25709517SBill.Taylor@Sun.COM #define	HERMON_CQ_ARMED			0x1
25719517SBill.Taylor@Sun.COM #define	HERMON_CQ_ARMED_SOLICITED	0x4
25729517SBill.Taylor@Sun.COM #define	HERMON_CQ_FIRED			0xA
25739517SBill.Taylor@Sun.COM 
25749517SBill.Taylor@Sun.COM /*
25759517SBill.Taylor@Sun.COM  * Hermon Completion Queue Entries (CQE)
25769517SBill.Taylor@Sun.COM  *    Each CQE contains enough information for the software to associate the
25779517SBill.Taylor@Sun.COM  *    completion with the Work Queue Element (WQE) to which it corresponds.
25789517SBill.Taylor@Sun.COM  *
25799517SBill.Taylor@Sun.COM  *    Note: The following structure is not #define'd with both little-endian
25809517SBill.Taylor@Sun.COM  *    and big-endian definitions.  This is because each CQE's individual
25819517SBill.Taylor@Sun.COM  *    fields are not directly accessed except through the macros defined below.
25829517SBill.Taylor@Sun.COM  */
25839517SBill.Taylor@Sun.COM 
25849517SBill.Taylor@Sun.COM 
25859517SBill.Taylor@Sun.COM struct hermon_hw_cqe_s {
25869517SBill.Taylor@Sun.COM 	uint32_t	dife		:1;
2587*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan		:2;
25889517SBill.Taylor@Sun.COM 	uint32_t	fl		:1;
2589*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fcrc_sd		:1;
25909517SBill.Taylor@Sun.COM 	uint32_t	d2s		:1;
25919517SBill.Taylor@Sun.COM 	uint32_t			:2;
25929517SBill.Taylor@Sun.COM 	uint32_t	my_qpn		:24;
25939517SBill.Taylor@Sun.COM 
25949517SBill.Taylor@Sun.COM 	uint32_t	immed_rss_val_key;
25959517SBill.Taylor@Sun.COM 
25969517SBill.Taylor@Sun.COM 	uint32_t	grh		:1;
25979517SBill.Taylor@Sun.COM 	uint32_t	ml_path		:7;
25989517SBill.Taylor@Sun.COM 	uint32_t	srq_rqpn	:24;
25999517SBill.Taylor@Sun.COM 
26009517SBill.Taylor@Sun.COM 	uint32_t	sl		:4;
2601*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vid		:12;
2602*12965SWilliam.Taylor@Oracle.COM 	uint32_t	slid		:16;	/* SMAC 47:32 or SLID */
2603*12965SWilliam.Taylor@Oracle.COM 
2604*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ipoib_status; /* SMAC 31:0 or enet/ipoib/EoIB status */
26059517SBill.Taylor@Sun.COM 
26069517SBill.Taylor@Sun.COM 	uint32_t	byte_cnt;
26079517SBill.Taylor@Sun.COM 
26089517SBill.Taylor@Sun.COM 	uint32_t	wqe_cntr	:16;
26099517SBill.Taylor@Sun.COM 	uint32_t	checksum	:16;
26109517SBill.Taylor@Sun.COM 
26119517SBill.Taylor@Sun.COM 	uint32_t			:8;
26129517SBill.Taylor@Sun.COM 	uint32_t			:16;
26139517SBill.Taylor@Sun.COM 	uint32_t	owner		:1;
26149517SBill.Taylor@Sun.COM 	uint32_t	send_or_recv	:1;
26159517SBill.Taylor@Sun.COM 	uint32_t	inline_scatter	:1;
26169517SBill.Taylor@Sun.COM 	uint32_t	opcode		:5;
26179517SBill.Taylor@Sun.COM };
26189517SBill.Taylor@Sun.COM #define	HERMON_COMPLETION_RECV		0x0
26199517SBill.Taylor@Sun.COM #define	HERMON_COMPLETION_SEND		0x1
26209517SBill.Taylor@Sun.COM 
26219517SBill.Taylor@Sun.COM #define	HERMON_CQE_DEFAULT_VERSION	0x0
26229517SBill.Taylor@Sun.COM 
26239517SBill.Taylor@Sun.COM /*
26249517SBill.Taylor@Sun.COM  * The following macros are used for extracting (and in some cases filling in)
26259517SBill.Taylor@Sun.COM  * information from CQEs
26269517SBill.Taylor@Sun.COM  */
26279517SBill.Taylor@Sun.COM #define	HERMON_CQE_QPNUM_MASK		0x00FFFFFF
26289517SBill.Taylor@Sun.COM #define	HERMON_CQE_QPNUM_SHIFT		0
26299517SBill.Taylor@Sun.COM 
26309517SBill.Taylor@Sun.COM 
26319517SBill.Taylor@Sun.COM #define	HERMON_CQE_DQPN_MASK		0x00FFFFFF
26329517SBill.Taylor@Sun.COM #define	HERMON_CQE_DQPN_SHIFT		0
26339517SBill.Taylor@Sun.COM 
26349517SBill.Taylor@Sun.COM 
26359517SBill.Taylor@Sun.COM #define	HERMON_CQE_SL_SHIFT		4
26369517SBill.Taylor@Sun.COM #define	HERMON_CQE_GRH_MASK		0x80
26379517SBill.Taylor@Sun.COM #define	HERMON_CQE_PATHBITS_MASK	0x7F
26389517SBill.Taylor@Sun.COM #define	HERMON_CQE_SLID_15_8		0xe
26399517SBill.Taylor@Sun.COM #define	HERMON_CQE_SLID_7_0		0xf
26409517SBill.Taylor@Sun.COM #define	HERMON_CQE_OPCODE_MASK		0x1F
26419517SBill.Taylor@Sun.COM #define	HERMON_CQE_SENDRECV_MASK	0x40
26429517SBill.Taylor@Sun.COM #define	HERMON_CQE_SENDRECV_SHIFT	6
26439517SBill.Taylor@Sun.COM #define	HERMON_CQE_OWNER_MASK		0x80
26449517SBill.Taylor@Sun.COM #define	HERMON_CQE_OWNER_SHIFT		7
26459517SBill.Taylor@Sun.COM #define	HERMON_CQE_WQECNTR_15_8		0x18
26469517SBill.Taylor@Sun.COM #define	HERMON_CQE_WQECNTR_7_0		0x19
26479517SBill.Taylor@Sun.COM /* Byte offsets for IPoIB Checksum Offload fields */
26489517SBill.Taylor@Sun.COM #define	HERMON_CQE_CKSUM_15_8		0x1a
26499517SBill.Taylor@Sun.COM #define	HERMON_CQE_CKSUM_7_0		0x1b
26509517SBill.Taylor@Sun.COM #define	HERMON_CQE_IPOK			0x10	/* byte 0x10 in cqe */
26519517SBill.Taylor@Sun.COM #define	HERMON_CQE_IPOK_BIT		0x10	/* bitmask for OK bit */
26529517SBill.Taylor@Sun.COM 
26539517SBill.Taylor@Sun.COM #define	HERMON_CQE_IS_IPOK(cq, cqe)					\
26549517SBill.Taylor@Sun.COM 	(((uint8_t *)(cqe))[HERMON_CQE_IPOK] & HERMON_CQE_IPOK_BIT)
26559517SBill.Taylor@Sun.COM 
26569517SBill.Taylor@Sun.COM #define	HERMON_CQE_CKSUM(cq, cqe)					\
26579517SBill.Taylor@Sun.COM 	((((uint8_t *)(cqe))[HERMON_CQE_CKSUM_15_8] << 8) |		\
26589517SBill.Taylor@Sun.COM 	    (((uint8_t *)(cqe))[HERMON_CQE_CKSUM_7_0]))
26599517SBill.Taylor@Sun.COM 
26609517SBill.Taylor@Sun.COM #define	HERMON_CQE_IPOIB_STATUS(cq, cqe)				\
26619517SBill.Taylor@Sun.COM 	htonl((((uint32_t *)(cqe)))[4])
26629517SBill.Taylor@Sun.COM 
26639517SBill.Taylor@Sun.COM #define	HERMON_CQE_QPNUM_GET(cq, cqe)					\
26649517SBill.Taylor@Sun.COM 	((htonl((((uint32_t *)(cqe)))[0]) & HERMON_CQE_QPNUM_MASK) >>	\
26659517SBill.Taylor@Sun.COM 	    HERMON_CQE_QPNUM_SHIFT)
26669517SBill.Taylor@Sun.COM 
26679517SBill.Taylor@Sun.COM #define	HERMON_CQE_IMM_ETH_PKEY_CRED_GET(cq, cqe)			\
26689517SBill.Taylor@Sun.COM 	htonl(((uint32_t *)(cqe))[1])
26699517SBill.Taylor@Sun.COM 
26709517SBill.Taylor@Sun.COM #define	HERMON_CQE_DQPN_GET(cq, cqe)					\
26719517SBill.Taylor@Sun.COM 	((htonl(((uint32_t *)(cqe))[2]) & HERMON_CQE_DQPN_MASK) >>	\
26729517SBill.Taylor@Sun.COM 	    HERMON_CQE_DQPN_SHIFT)
26739517SBill.Taylor@Sun.COM 
26749517SBill.Taylor@Sun.COM #define	HERMON_CQE_GRH_GET(cq, cqe)					\
26759517SBill.Taylor@Sun.COM 	(((uint8_t *)(cqe))[8] & HERMON_CQE_GRH_MASK)
26769517SBill.Taylor@Sun.COM 
26779517SBill.Taylor@Sun.COM #define	HERMON_CQE_PATHBITS_GET(cq, cqe)				\
26789517SBill.Taylor@Sun.COM 	(((uint8_t *)(cqe))[8] & HERMON_CQE_PATHBITS_MASK)
26799517SBill.Taylor@Sun.COM 
26809517SBill.Taylor@Sun.COM #define	HERMON_CQE_DLID_GET(cq, cqe)					\
26819517SBill.Taylor@Sun.COM 	((((uint8_t *)(cqe))[HERMON_CQE_SLID_15_8] << 8) |		\
26829517SBill.Taylor@Sun.COM 	    (((uint8_t *)(cqe))[HERMON_CQE_SLID_7_0]))
26839517SBill.Taylor@Sun.COM 
26849517SBill.Taylor@Sun.COM #define	HERMON_CQE_SL_GET(cq, cqe)					\
26859517SBill.Taylor@Sun.COM 	((((uint8_t *)(cqe))[12]) >> HERMON_CQE_SL_SHIFT)
26869517SBill.Taylor@Sun.COM 
26879517SBill.Taylor@Sun.COM #define	HERMON_CQE_BYTECNT_GET(cq, cqe)					\
26889517SBill.Taylor@Sun.COM 	htonl(((uint32_t *)(cqe))[5])
26899517SBill.Taylor@Sun.COM 
26909517SBill.Taylor@Sun.COM #define	HERMON_CQE_WQECNTR_GET(cq, cqe)					\
26919517SBill.Taylor@Sun.COM 	((((uint8_t *)(cqe))[HERMON_CQE_WQECNTR_15_8] << 8) |		\
26929517SBill.Taylor@Sun.COM 	    (((uint8_t *)(cqe))[HERMON_CQE_WQECNTR_7_0]))
26939517SBill.Taylor@Sun.COM 
26949517SBill.Taylor@Sun.COM #define	HERMON_CQE_ERROR_SYNDROME_GET(cq, cqe)				\
26959517SBill.Taylor@Sun.COM 	(((uint8_t *)(cqe))[27])
26969517SBill.Taylor@Sun.COM 
2697*12965SWilliam.Taylor@Oracle.COM #define	HERMON_CQE_ERROR_VENDOR_SYNDROME_GET(cq, cqe)			\
2698*12965SWilliam.Taylor@Oracle.COM 	(((uint8_t *)(cqe))[26])
2699*12965SWilliam.Taylor@Oracle.COM 
27009517SBill.Taylor@Sun.COM #define	HERMON_CQE_OPCODE_GET(cq, cqe)					\
27019517SBill.Taylor@Sun.COM 	((((uint8_t *)(cqe))[31]) & HERMON_CQE_OPCODE_MASK)
27029517SBill.Taylor@Sun.COM 
27039517SBill.Taylor@Sun.COM #define	HERMON_CQE_SENDRECV_GET(cq, cqe)				\
27049517SBill.Taylor@Sun.COM 	(((((uint8_t *)(cqe))[31]) & HERMON_CQE_SENDRECV_MASK) >>	\
27059517SBill.Taylor@Sun.COM 	    HERMON_CQE_SENDRECV_SHIFT)
27069517SBill.Taylor@Sun.COM 
2707*12965SWilliam.Taylor@Oracle.COM #define	HERMON_CQE_FEXCH_SEQ_CNT(cq, cqe)				\
2708*12965SWilliam.Taylor@Oracle.COM 	HERMON_CQE_CKSUM(cq, cqe)
2709*12965SWilliam.Taylor@Oracle.COM 
2710*12965SWilliam.Taylor@Oracle.COM #define	HERMON_CQE_FEXCH_TX_BYTES(cq, cqe)				\
2711*12965SWilliam.Taylor@Oracle.COM 	htonl(((uint32_t *)(cqe))[3])
2712*12965SWilliam.Taylor@Oracle.COM 
2713*12965SWilliam.Taylor@Oracle.COM #define	HERMON_CQE_FEXCH_RX_BYTES(cq, cqe)				\
2714*12965SWilliam.Taylor@Oracle.COM 	htonl(((uint32_t *)(cqe))[4])
2715*12965SWilliam.Taylor@Oracle.COM 
2716*12965SWilliam.Taylor@Oracle.COM #define	HERMON_CQE_FEXCH_SEQ_ID(cq, cqe)				\
2717*12965SWilliam.Taylor@Oracle.COM 	(((uint8_t *)(cqe))[8])
2718*12965SWilliam.Taylor@Oracle.COM 
2719*12965SWilliam.Taylor@Oracle.COM #define	HERMON_CQE_FEXCH_DETAIL(cq, cqe)				\
2720*12965SWilliam.Taylor@Oracle.COM 	htonl(((uint32_t *)(cqe))[0])
2721*12965SWilliam.Taylor@Oracle.COM 
2722*12965SWilliam.Taylor@Oracle.COM #define	HERMON_CQE_FEXCH_DIFE(cq, cqe)					\
2723*12965SWilliam.Taylor@Oracle.COM 	((((uint8_t *)(cqe))[0]) & 0x80)
2724*12965SWilliam.Taylor@Oracle.COM 
27259517SBill.Taylor@Sun.COM /* See Comment above for EQE - ownership of CQE is handled the same */
27269517SBill.Taylor@Sun.COM 
2727*12965SWilliam.Taylor@Oracle.COM #define	HERMON_CQE_OWNER_IS_SW(cq, cqe, considx, shift, mask)		\
27289517SBill.Taylor@Sun.COM 	(((((uint8_t *)(cqe))[31] & HERMON_CQE_OWNER_MASK) >>		\
27299517SBill.Taylor@Sun.COM 	    HERMON_CQE_OWNER_SHIFT) == 					\
2730*12965SWilliam.Taylor@Oracle.COM 	    (((considx) & (mask)) >> (shift)))
27319517SBill.Taylor@Sun.COM 
27329517SBill.Taylor@Sun.COM /*
27339517SBill.Taylor@Sun.COM  * Hermon Shared Receive Queue (SRQ) Context Entry Format
27349517SBill.Taylor@Sun.COM  */
27359517SBill.Taylor@Sun.COM 
27369517SBill.Taylor@Sun.COM #ifdef _LITTLE_ENDIAN
27379517SBill.Taylor@Sun.COM struct hermon_hw_srqc_s {
27389517SBill.Taylor@Sun.COM 	uint32_t	xrc_domain		:16;
27399517SBill.Taylor@Sun.COM 	uint32_t				:8;
27409517SBill.Taylor@Sun.COM 	uint32_t	log_rq_stride		:3;
27419517SBill.Taylor@Sun.COM 	uint32_t				:5;
27429517SBill.Taylor@Sun.COM 
27439517SBill.Taylor@Sun.COM 	uint32_t	srqn			:24;
27449517SBill.Taylor@Sun.COM 	uint32_t	log_srq_size		:4;
27459517SBill.Taylor@Sun.COM 	uint32_t	state			:4;
27469517SBill.Taylor@Sun.COM 
27479517SBill.Taylor@Sun.COM 	uint32_t				:32;
27489517SBill.Taylor@Sun.COM 
27499517SBill.Taylor@Sun.COM 	uint32_t	cqn_xrc			:24;
27509517SBill.Taylor@Sun.COM 	uint32_t				:2;
27519517SBill.Taylor@Sun.COM 	uint32_t	page_offs		:6;
27529517SBill.Taylor@Sun.COM 
27539517SBill.Taylor@Sun.COM 	uint32_t				:3;
27549517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addrl		:29;
27559517SBill.Taylor@Sun.COM 
27569517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addrh		:8;
27579517SBill.Taylor@Sun.COM 	uint32_t				:16;
27589517SBill.Taylor@Sun.COM 	uint32_t	log2_pgsz		:6;
27599517SBill.Taylor@Sun.COM 	uint32_t				:2;
27609517SBill.Taylor@Sun.COM 
27619517SBill.Taylor@Sun.COM 	uint32_t	wqe_cnt			:16;
27629517SBill.Taylor@Sun.COM 	uint32_t	lwm			:16;
27639517SBill.Taylor@Sun.COM 
27649517SBill.Taylor@Sun.COM 	uint32_t	pd			:24;
27659517SBill.Taylor@Sun.COM 	uint32_t				:8;
27669517SBill.Taylor@Sun.COM 
27679517SBill.Taylor@Sun.COM 	uint32_t				:32;
27689517SBill.Taylor@Sun.COM 
27699517SBill.Taylor@Sun.COM 	uint32_t	srq_wqe_cntr		:16;
27709517SBill.Taylor@Sun.COM 	uint32_t				:16;
27719517SBill.Taylor@Sun.COM 
27729517SBill.Taylor@Sun.COM 	uint32_t				:2;
27739517SBill.Taylor@Sun.COM 	uint32_t	dbr_addrl		:30;
27749517SBill.Taylor@Sun.COM 
27759517SBill.Taylor@Sun.COM 	uint32_t	dbr_addrh;
27769517SBill.Taylor@Sun.COM 
27779517SBill.Taylor@Sun.COM 	uint32_t	rsrc0[80];	/* to match DEV_CAP size of 0x80 */
27789517SBill.Taylor@Sun.COM 
27799517SBill.Taylor@Sun.COM };
2780*12965SWilliam.Taylor@Oracle.COM #else  /* BIG ENDIAN */
27819517SBill.Taylor@Sun.COM struct hermon_hw_srqc_s {
27829517SBill.Taylor@Sun.COM 	uint32_t	state			:4;
27839517SBill.Taylor@Sun.COM 	uint32_t	log_srq_size		:4;
27849517SBill.Taylor@Sun.COM 	uint32_t	srqn			:24;
27859517SBill.Taylor@Sun.COM 
27869517SBill.Taylor@Sun.COM 	uint32_t				:5;
27879517SBill.Taylor@Sun.COM 	uint32_t	log_rq_stride		:3;
27889517SBill.Taylor@Sun.COM 	uint32_t				:8;
27899517SBill.Taylor@Sun.COM 	uint32_t	xrc_domain		:16;
27909517SBill.Taylor@Sun.COM 
27919517SBill.Taylor@Sun.COM 	uint32_t	page_offs		:6;
27929517SBill.Taylor@Sun.COM 	uint32_t				:2;
27939517SBill.Taylor@Sun.COM 	uint32_t	cqn_xrc			:24;
27949517SBill.Taylor@Sun.COM 
27959517SBill.Taylor@Sun.COM 	uint32_t				:32;
27969517SBill.Taylor@Sun.COM 
27979517SBill.Taylor@Sun.COM 	uint32_t				:2;
27989517SBill.Taylor@Sun.COM 	uint32_t	log2_pgsz		:6;
27999517SBill.Taylor@Sun.COM 	uint32_t				:16;
28009517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addrh		:8;
28019517SBill.Taylor@Sun.COM 
28029517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addrl		:29;
28039517SBill.Taylor@Sun.COM 	uint32_t				:3;
28049517SBill.Taylor@Sun.COM 
28059517SBill.Taylor@Sun.COM 	uint32_t				:8;
28069517SBill.Taylor@Sun.COM 	uint32_t	pd			:24;
28079517SBill.Taylor@Sun.COM 
28089517SBill.Taylor@Sun.COM 	uint32_t	lwm			:16;
28099517SBill.Taylor@Sun.COM 	uint32_t	wqe_cnt			:16;
28109517SBill.Taylor@Sun.COM 
28119517SBill.Taylor@Sun.COM 	uint32_t				:16;
28129517SBill.Taylor@Sun.COM 	uint32_t	srq_wqe_cntr		:16;
28139517SBill.Taylor@Sun.COM 
28149517SBill.Taylor@Sun.COM 	uint32_t				:32;
28159517SBill.Taylor@Sun.COM 
28169517SBill.Taylor@Sun.COM 	uint32_t	dbr_addrh;
28179517SBill.Taylor@Sun.COM 
28189517SBill.Taylor@Sun.COM 	uint32_t	dbr_addrl		:30;
28199517SBill.Taylor@Sun.COM 	uint32_t				:2;
28209517SBill.Taylor@Sun.COM 
28219517SBill.Taylor@Sun.COM 	uint32_t	rsrc0[80];	/* to match DEV_CAP size of 0x80 */
28229517SBill.Taylor@Sun.COM };
28239517SBill.Taylor@Sun.COM #endif
28249517SBill.Taylor@Sun.COM 
28259517SBill.Taylor@Sun.COM /*
28269517SBill.Taylor@Sun.COM  * Hermon MOD_STAT_CFG input mailbox structure
28279517SBill.Taylor@Sun.COM  */
28289517SBill.Taylor@Sun.COM 
28299517SBill.Taylor@Sun.COM 
28309517SBill.Taylor@Sun.COM #ifdef _LITTLE_ENDIAN
28319517SBill.Taylor@Sun.COM struct hermon_hw_mod_stat_cfg_s {
2832*12965SWilliam.Taylor@Oracle.COM 	uint32_t				:16;
2833*12965SWilliam.Taylor@Oracle.COM 	uint32_t	qdr_rx_op		:4;
2834*12965SWilliam.Taylor@Oracle.COM 	uint32_t				:3;
2835*12965SWilliam.Taylor@Oracle.COM 	uint32_t	qdr_rx_opt_m		:1;
2836*12965SWilliam.Taylor@Oracle.COM 	uint32_t	qdr_tx_op		:4;
2837*12965SWilliam.Taylor@Oracle.COM 	uint32_t				:3;
2838*12965SWilliam.Taylor@Oracle.COM 	uint32_t	qdr_tx_opt_m		:1;
2839*12965SWilliam.Taylor@Oracle.COM 
2840*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_pg_sz		:8;
2841*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_pg_sz_m		:1;
2842*12965SWilliam.Taylor@Oracle.COM 	uint32_t				:5;
28439517SBill.Taylor@Sun.COM 	uint32_t	dife			:1;
28449517SBill.Taylor@Sun.COM 	uint32_t	dife_m			:1;
28459517SBill.Taylor@Sun.COM 	uint32_t	rx_options		:4;
28469517SBill.Taylor@Sun.COM 	uint32_t				:3;
28479517SBill.Taylor@Sun.COM 	uint32_t	rx_options_m		:1;
28489517SBill.Taylor@Sun.COM 	uint32_t	tx_options		:4;
28499517SBill.Taylor@Sun.COM 	uint32_t				:3;
28509517SBill.Taylor@Sun.COM 	uint32_t	tx_options_m		:1;
28519517SBill.Taylor@Sun.COM 
28529517SBill.Taylor@Sun.COM 	uint32_t	lid			:16;
28539517SBill.Taylor@Sun.COM 	uint32_t	lid_m			:1;
28549517SBill.Taylor@Sun.COM 	uint32_t				:3;
28559517SBill.Taylor@Sun.COM 	uint32_t	port_en			:1;
28569517SBill.Taylor@Sun.COM 	uint32_t	port_en_m		:1;
28579517SBill.Taylor@Sun.COM 	uint32_t				:10;
28589517SBill.Taylor@Sun.COM 
2859*12965SWilliam.Taylor@Oracle.COM 	uint32_t				:32;
28609517SBill.Taylor@Sun.COM 
28619517SBill.Taylor@Sun.COM 	uint32_t	guid_hi;
28629517SBill.Taylor@Sun.COM 
28639517SBill.Taylor@Sun.COM 	uint32_t				:31;
28649517SBill.Taylor@Sun.COM 	uint32_t	guid_hi_m		:1;
28659517SBill.Taylor@Sun.COM 
28669517SBill.Taylor@Sun.COM 	uint32_t	guid_lo;
2867*12965SWilliam.Taylor@Oracle.COM 
28689517SBill.Taylor@Sun.COM 	uint32_t				:31;
28699517SBill.Taylor@Sun.COM 	uint32_t	guid_lo_m		:1;
28709517SBill.Taylor@Sun.COM 
28719517SBill.Taylor@Sun.COM 	uint32_t	rsvd[4];
28729517SBill.Taylor@Sun.COM 
28739517SBill.Taylor@Sun.COM 	uint32_t	inbuf_ind_en		:3;
28749517SBill.Taylor@Sun.COM 	uint32_t				:1;
28759517SBill.Taylor@Sun.COM 	uint32_t	sd_main			:4;
28769517SBill.Taylor@Sun.COM 	uint32_t				:4;
28779517SBill.Taylor@Sun.COM 	uint32_t	sd_equal		:4;
28789517SBill.Taylor@Sun.COM 	uint32_t				:4;
28799517SBill.Taylor@Sun.COM 	uint32_t	sd_mux_main		:2;
28809517SBill.Taylor@Sun.COM 	uint32_t				:2;
28819517SBill.Taylor@Sun.COM 	uint32_t	mux_eq			:2;
28829517SBill.Taylor@Sun.COM 	uint32_t				:2;
28839517SBill.Taylor@Sun.COM 	uint32_t	sigdet_th		:3;
28849517SBill.Taylor@Sun.COM 	uint32_t				:1;
28859517SBill.Taylor@Sun.COM 
28869517SBill.Taylor@Sun.COM 	uint32_t	ob_preemp_pre		:5;
28879517SBill.Taylor@Sun.COM 	uint32_t				:3;
28889517SBill.Taylor@Sun.COM 	uint32_t	op_preemp_post		:5;
28899517SBill.Taylor@Sun.COM 	uint32_t				:3;
28909517SBill.Taylor@Sun.COM 	uint32_t	ob_preemp_main		:5;
28919517SBill.Taylor@Sun.COM 	uint32_t				:3;
28929517SBill.Taylor@Sun.COM 	uint32_t	ob_preemp		:5;
28939517SBill.Taylor@Sun.COM 	uint32_t				:2;
28949517SBill.Taylor@Sun.COM 	uint32_t	serdes_m		:1;
28959517SBill.Taylor@Sun.COM 
2896*12965SWilliam.Taylor@Oracle.COM 	uint32_t	reserved[22];
2897*12965SWilliam.Taylor@Oracle.COM 
2898*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_lo			:32;
2899*12965SWilliam.Taylor@Oracle.COM 
2900*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_hi			:16;
2901*12965SWilliam.Taylor@Oracle.COM 	uint32_t				:15;
2902*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_m			:1;
29039517SBill.Taylor@Sun.COM };
29049517SBill.Taylor@Sun.COM #else /* BIG ENDIAN */
29059517SBill.Taylor@Sun.COM struct hermon_hw_mod_stat_cfg_s {
29069517SBill.Taylor@Sun.COM 	uint32_t	tx_options_m		:1;
29079517SBill.Taylor@Sun.COM 	uint32_t				:3;
29089517SBill.Taylor@Sun.COM 	uint32_t	tx_options		:4;
29099517SBill.Taylor@Sun.COM 	uint32_t	rx_options_m		:1;
29109517SBill.Taylor@Sun.COM 	uint32_t				:3;
29119517SBill.Taylor@Sun.COM 	uint32_t	rx_options		:4;
29129517SBill.Taylor@Sun.COM 	uint32_t	dife_m			:1;
29139517SBill.Taylor@Sun.COM 	uint32_t	dife			:1;
2914*12965SWilliam.Taylor@Oracle.COM 	uint32_t				:5;
2915*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_pg_sz_m		:1;
2916*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log_pg_sz		:8;
2917*12965SWilliam.Taylor@Oracle.COM 
2918*12965SWilliam.Taylor@Oracle.COM 	uint32_t	qdr_tx_opt_m		:1;
2919*12965SWilliam.Taylor@Oracle.COM 	uint32_t				:3;
2920*12965SWilliam.Taylor@Oracle.COM 	uint32_t	qdr_tx_op		:4;
2921*12965SWilliam.Taylor@Oracle.COM 	uint32_t	qdr_rx_opt_m		:1;
2922*12965SWilliam.Taylor@Oracle.COM 	uint32_t				:3;
2923*12965SWilliam.Taylor@Oracle.COM 	uint32_t	qdr_rx_op		:4;
2924*12965SWilliam.Taylor@Oracle.COM 	uint32_t				:16;
2925*12965SWilliam.Taylor@Oracle.COM 
2926*12965SWilliam.Taylor@Oracle.COM 	uint32_t				:32;
29279517SBill.Taylor@Sun.COM 
29289517SBill.Taylor@Sun.COM 	uint32_t				:10;
29299517SBill.Taylor@Sun.COM 	uint32_t	port_en_m		:1;
29309517SBill.Taylor@Sun.COM 	uint32_t	port_en			:1;
29319517SBill.Taylor@Sun.COM 	uint32_t				:3;
29329517SBill.Taylor@Sun.COM 	uint32_t	lid_m			:1;
29339517SBill.Taylor@Sun.COM 	uint32_t	lid			:16;
29349517SBill.Taylor@Sun.COM 
29359517SBill.Taylor@Sun.COM 	uint32_t	guid_hi_m		:1;
29369517SBill.Taylor@Sun.COM 	uint32_t				:31;
29379517SBill.Taylor@Sun.COM 
29389517SBill.Taylor@Sun.COM 	uint32_t	guid_hi;
29399517SBill.Taylor@Sun.COM 
29409517SBill.Taylor@Sun.COM 	uint32_t	guid_lo_m		:1;
29419517SBill.Taylor@Sun.COM 	uint32_t				:31;
29429517SBill.Taylor@Sun.COM 
29439517SBill.Taylor@Sun.COM 	uint32_t	guid_lo;
29449517SBill.Taylor@Sun.COM 
29459517SBill.Taylor@Sun.COM 	uint32_t	rsvd[4];
29469517SBill.Taylor@Sun.COM 
29479517SBill.Taylor@Sun.COM 	uint32_t	serdes_m		:1;
29489517SBill.Taylor@Sun.COM 	uint32_t				:2;
29499517SBill.Taylor@Sun.COM 	uint32_t	ob_preemp		:5;
29509517SBill.Taylor@Sun.COM 	uint32_t				:3;
29519517SBill.Taylor@Sun.COM 	uint32_t	ob_preemp_main		:5;
29529517SBill.Taylor@Sun.COM 	uint32_t				:3;
29539517SBill.Taylor@Sun.COM 	uint32_t	op_preemp_post		:5;
29549517SBill.Taylor@Sun.COM 	uint32_t				:3;
29559517SBill.Taylor@Sun.COM 	uint32_t	ob_preemp_pre		:5;
29569517SBill.Taylor@Sun.COM 
29579517SBill.Taylor@Sun.COM 	uint32_t				:1;
29589517SBill.Taylor@Sun.COM 	uint32_t	sigdet_th		:3;
29599517SBill.Taylor@Sun.COM 	uint32_t				:2;
29609517SBill.Taylor@Sun.COM 	uint32_t	mux_eq			:2;
29619517SBill.Taylor@Sun.COM 	uint32_t				:2;
29629517SBill.Taylor@Sun.COM 	uint32_t	sd_mux_main		:2;
29639517SBill.Taylor@Sun.COM 	uint32_t				:4;
29649517SBill.Taylor@Sun.COM 	uint32_t	sd_equal		:4;
29659517SBill.Taylor@Sun.COM 	uint32_t				:4;
29669517SBill.Taylor@Sun.COM 	uint32_t	sd_main			:4;
29679517SBill.Taylor@Sun.COM 	uint32_t				:1;
29689517SBill.Taylor@Sun.COM 	uint32_t	inbuf_ind_en		:3;
29699517SBill.Taylor@Sun.COM 
2970*12965SWilliam.Taylor@Oracle.COM 	uint32_t	reserved[22];		/* get to new enet stuff */
2971*12965SWilliam.Taylor@Oracle.COM 
2972*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_m			:1;
2973*12965SWilliam.Taylor@Oracle.COM 	uint32_t				:15;
2974*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_hi			:16;
2975*12965SWilliam.Taylor@Oracle.COM 
2976*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_lo			:32;
29779517SBill.Taylor@Sun.COM };
29789517SBill.Taylor@Sun.COM #endif
29799517SBill.Taylor@Sun.COM 
29809517SBill.Taylor@Sun.COM /*
29819517SBill.Taylor@Sun.COM  * Hermon MOD_STAT_CFG input modifier structure
2982*12965SWilliam.Taylor@Oracle.COM  * NOTE:  this might end up defined ONLY one way,
2983*12965SWilliam.Taylor@Oracle.COM  * if usage is access via macros
29849517SBill.Taylor@Sun.COM  */
29859517SBill.Taylor@Sun.COM struct hermon_hw_msg_in_mod_s {
29869517SBill.Taylor@Sun.COM #ifdef _LITTLE_ENDIAN
29879517SBill.Taylor@Sun.COM 	uint32_t	offset			:8;
29889517SBill.Taylor@Sun.COM 	uint32_t	port_num		:8;
29899517SBill.Taylor@Sun.COM 	uint32_t	lane_num		:4;
29909517SBill.Taylor@Sun.COM 	uint32_t	link_speed		:3;
29919517SBill.Taylor@Sun.COM 	uint32_t	auto_neg		:1;
29929517SBill.Taylor@Sun.COM 	uint32_t				:8;
29939517SBill.Taylor@Sun.COM #else
29949517SBill.Taylor@Sun.COM 	uint32_t				:8;
29959517SBill.Taylor@Sun.COM 	uint32_t	auto_neg		:1;
29969517SBill.Taylor@Sun.COM 	uint32_t	link_speed		:3;
29979517SBill.Taylor@Sun.COM 	uint32_t	lane_num		:4;
29989517SBill.Taylor@Sun.COM 	uint32_t	port_num		:8;
29999517SBill.Taylor@Sun.COM 	uint32_t	offset			:8;
30009517SBill.Taylor@Sun.COM #endif
30019517SBill.Taylor@Sun.COM };
30029517SBill.Taylor@Sun.COM 
30039517SBill.Taylor@Sun.COM 
30049517SBill.Taylor@Sun.COM /*
30059517SBill.Taylor@Sun.COM  * Hermon UD Address Vector (UDAV)
30069517SBill.Taylor@Sun.COM  *    Hermon UDAV are used in conjunction with Unreliable Datagram (UD) send
30079517SBill.Taylor@Sun.COM  *    WQEs. Each UD send message contains an address vector in in the datagram
30089517SBill.Taylor@Sun.COM  *    segment. The verbs consumer must use special verbs to create and modify
30099517SBill.Taylor@Sun.COM  *    address handles, each of which contains a UDAV structure.  When posting
30109517SBill.Taylor@Sun.COM  *    send WQEs to UD QP, the verbs consumer must supply a valid address
30119517SBill.Taylor@Sun.COM  *    handle/UDAV.
30129517SBill.Taylor@Sun.COM  */
30139517SBill.Taylor@Sun.COM 
30149517SBill.Taylor@Sun.COM 
30159517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
30169517SBill.Taylor@Sun.COM struct hermon_hw_udav_s {
30179517SBill.Taylor@Sun.COM 	uint32_t	rlid		:16;
3018*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ml_path		:7;	/* mlid or SMAC idx */
30199517SBill.Taylor@Sun.COM 	uint32_t	grh		:1;
30209517SBill.Taylor@Sun.COM 	uint32_t			:8;
30219517SBill.Taylor@Sun.COM 
30229517SBill.Taylor@Sun.COM 	uint32_t	pd		:24;
30239517SBill.Taylor@Sun.COM 	uint32_t	portnum		:2;
30249517SBill.Taylor@Sun.COM 	uint32_t			:5;
3025*12965SWilliam.Taylor@Oracle.COM 	uint32_t	force_lb	:1;
30269517SBill.Taylor@Sun.COM 
30279517SBill.Taylor@Sun.COM 	uint32_t	flow_label	:20;
30289517SBill.Taylor@Sun.COM 	uint32_t	tclass		:8;
30299517SBill.Taylor@Sun.COM 	uint32_t	sl		:4;
30309517SBill.Taylor@Sun.COM 
30319517SBill.Taylor@Sun.COM 	uint32_t	hop_limit	:8;
30329517SBill.Taylor@Sun.COM 	uint32_t	max_stat_rate	:4;
30339517SBill.Taylor@Sun.COM 	uint32_t			:4;
30349517SBill.Taylor@Sun.COM 	uint32_t	mgid_index	:7;
30359517SBill.Taylor@Sun.COM 	uint32_t			:9;
30369517SBill.Taylor@Sun.COM 
30379517SBill.Taylor@Sun.COM 	uint64_t	rgid_h;
30389517SBill.Taylor@Sun.COM 	uint64_t	rgid_l;
30399517SBill.Taylor@Sun.COM };
30409517SBill.Taylor@Sun.COM #else
30419517SBill.Taylor@Sun.COM struct hermon_hw_udav_s {
30429517SBill.Taylor@Sun.COM 	uint32_t	force_lb	:1;
30439517SBill.Taylor@Sun.COM 	uint32_t			:5;
30449517SBill.Taylor@Sun.COM 	uint32_t	portnum		:2;
30459517SBill.Taylor@Sun.COM 	uint32_t	pd		:24;
30469517SBill.Taylor@Sun.COM 
30479517SBill.Taylor@Sun.COM 	uint32_t			:8;
30489517SBill.Taylor@Sun.COM 	uint32_t	grh		:1;
3049*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ml_path		:7;	/* mlid or SMAC idx */
30509517SBill.Taylor@Sun.COM 	uint32_t	rlid		:16;
30519517SBill.Taylor@Sun.COM 
30529517SBill.Taylor@Sun.COM 	uint32_t			:9;
30539517SBill.Taylor@Sun.COM 	uint32_t	mgid_index	:7;
30549517SBill.Taylor@Sun.COM 	uint32_t			:4;
30559517SBill.Taylor@Sun.COM 	uint32_t	max_stat_rate	:4;
30569517SBill.Taylor@Sun.COM 	uint32_t	hop_limit	:8;
30579517SBill.Taylor@Sun.COM 
30589517SBill.Taylor@Sun.COM 	uint32_t	sl		:4;
30599517SBill.Taylor@Sun.COM 	uint32_t	tclass		:8;
30609517SBill.Taylor@Sun.COM 	uint32_t	flow_label	:20;
30619517SBill.Taylor@Sun.COM 
30629517SBill.Taylor@Sun.COM 	uint64_t	rgid_h;
30639517SBill.Taylor@Sun.COM 	uint64_t	rgid_l;
30649517SBill.Taylor@Sun.COM };
30659517SBill.Taylor@Sun.COM #endif
30669517SBill.Taylor@Sun.COM #define	HERMON_UDAV_MODIFY_MASK0		0xFCFFFFFFFF000000ULL
30679517SBill.Taylor@Sun.COM #define	HERMON_UDAV_MODIFY_MASK1		0xFF80F00000000000ULL
30689517SBill.Taylor@Sun.COM 
3069*12965SWilliam.Taylor@Oracle.COM /* UDAV for enthernet */
3070*12965SWilliam.Taylor@Oracle.COM 
3071*12965SWilliam.Taylor@Oracle.COM #ifdef	_LITTLE_ENDIAN
3072*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_udav_enet_s {
3073*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
3074*12965SWilliam.Taylor@Oracle.COM 	uint32_t	smac_idx	:7;
3075*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:9;
3076*12965SWilliam.Taylor@Oracle.COM 
3077*12965SWilliam.Taylor@Oracle.COM 	uint32_t	pd		:24;
3078*12965SWilliam.Taylor@Oracle.COM 	uint32_t	portnum		:2;
3079*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:3;
3080*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cv		:1;
3081*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
3082*12965SWilliam.Taylor@Oracle.COM 	uint32_t	force_lb	:1;
3083*12965SWilliam.Taylor@Oracle.COM 
3084*12965SWilliam.Taylor@Oracle.COM 	uint32_t	flow_label	:20;
3085*12965SWilliam.Taylor@Oracle.COM 	uint32_t	tclass		:8;
3086*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sl		:4;
3087*12965SWilliam.Taylor@Oracle.COM 
3088*12965SWilliam.Taylor@Oracle.COM 	uint32_t	hop_limit	:8;
3089*12965SWilliam.Taylor@Oracle.COM 	uint32_t	max_stat_rate	:4;
3090*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:4;
3091*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mgid_index	:7;
3092*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:9;
3093*12965SWilliam.Taylor@Oracle.COM 
3094*12965SWilliam.Taylor@Oracle.COM 	uint64_t	rgid_h;
3095*12965SWilliam.Taylor@Oracle.COM 	uint64_t	rgid_l;
3096*12965SWilliam.Taylor@Oracle.COM 
3097*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv[2];
3098*12965SWilliam.Taylor@Oracle.COM 
3099*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dmac_lo;
3100*12965SWilliam.Taylor@Oracle.COM 
3101*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dmac_hi		:16;
3102*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan		:16;
3103*12965SWilliam.Taylor@Oracle.COM };
3104*12965SWilliam.Taylor@Oracle.COM #else
3105*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_udav_enet_s {
3106*12965SWilliam.Taylor@Oracle.COM 	uint32_t	force_lb	:1;
3107*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
3108*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cv		:1;
3109*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:3;
3110*12965SWilliam.Taylor@Oracle.COM 	uint32_t	portnum		:2;
3111*12965SWilliam.Taylor@Oracle.COM 	uint32_t	pd		:24;
3112*12965SWilliam.Taylor@Oracle.COM 
3113*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:9;
3114*12965SWilliam.Taylor@Oracle.COM 	uint32_t	smac_idx	:7;
3115*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
3116*12965SWilliam.Taylor@Oracle.COM 
3117*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:9;
3118*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mgid_index	:7;
3119*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:4;
3120*12965SWilliam.Taylor@Oracle.COM 	uint32_t	max_stat_rate	:4;
3121*12965SWilliam.Taylor@Oracle.COM 	uint32_t	hop_limit	:8;
3122*12965SWilliam.Taylor@Oracle.COM 
3123*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sl		:4;
3124*12965SWilliam.Taylor@Oracle.COM 	uint32_t	tclass		:8;
3125*12965SWilliam.Taylor@Oracle.COM 	uint32_t	flow_label	:20;
3126*12965SWilliam.Taylor@Oracle.COM 
3127*12965SWilliam.Taylor@Oracle.COM 	uint64_t	rgid_h;
3128*12965SWilliam.Taylor@Oracle.COM 	uint64_t	rgid_l;
3129*12965SWilliam.Taylor@Oracle.COM 
3130*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv[2];
3131*12965SWilliam.Taylor@Oracle.COM 
3132*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan		:16;
3133*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dmac_hi		:16;
3134*12965SWilliam.Taylor@Oracle.COM 
3135*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dmac_low;
3136*12965SWilliam.Taylor@Oracle.COM };
3137*12965SWilliam.Taylor@Oracle.COM #endif
31389517SBill.Taylor@Sun.COM 
31399517SBill.Taylor@Sun.COM /*
31409517SBill.Taylor@Sun.COM  * Hermon Queue Pair Context Table (QPC) entries
31419517SBill.Taylor@Sun.COM  *    The QPC table is a virtually-contiguous memory area residing in HCA
31429517SBill.Taylor@Sun.COM  *    ICM.  Each QPC entry is accessed for reads and writes
31439517SBill.Taylor@Sun.COM  *    by the HCA while executing work requests on the associated QP.
31449517SBill.Taylor@Sun.COM  *
31459517SBill.Taylor@Sun.COM  *    The following structure is used in the RST2INIT_QP, INIT2INIT_QP,
31469517SBill.Taylor@Sun.COM  *    INIT2RTR_QP, RTR2RTS_QP, RTS2RTS_QP, SQERR2RTS_QP, TOERR_QP, RTS2SQD_QP,
31479517SBill.Taylor@Sun.COM  *    SQD2RTS_QP, TORST_QP, and QUERY_QP commands.
31489517SBill.Taylor@Sun.COM  *    With the exception of the QUERY_QP command, each of these commands reads
31499517SBill.Taylor@Sun.COM  *    from some portion of the QPC in the input mailbox and modified the QPC
31509517SBill.Taylor@Sun.COM  *    stored in the hardware.  The QUERY_QP command retrieves a snapshot of a
31519517SBill.Taylor@Sun.COM  *    QPC entry. The command stores the snapshot in the output mailbox.  The
31529517SBill.Taylor@Sun.COM  *    QPC state and its values are not affected by the QUERY_QP command.
31539517SBill.Taylor@Sun.COM  *
31549517SBill.Taylor@Sun.COM  *    Below we first define the hermon_hw_addr_path_t or "Hermon Address Path"
31559517SBill.Taylor@Sun.COM  *    structure.  This structure is used to provide address path information
31569517SBill.Taylor@Sun.COM  *    (both primary and secondary) for each QP context.  Note:  Since this
31579517SBill.Taylor@Sun.COM  *    structure is _very_ similar to the hermon_hw_udav_t structure above,
31589517SBill.Taylor@Sun.COM  *    we are able to leverage the similarity with filling in and reading from
31599517SBill.Taylor@Sun.COM  *    the two types of structures.  See hermon_get_addr_path() and
31609517SBill.Taylor@Sun.COM  *    hermon_set_addr_path() in hermon_misc.c for more details.
31619517SBill.Taylor@Sun.COM  */
31629517SBill.Taylor@Sun.COM #if (DATAMODEL_NATIVE == DATAMODEL_LP64)
31639517SBill.Taylor@Sun.COM #pragma pack(4)
31649517SBill.Taylor@Sun.COM #endif
31659517SBill.Taylor@Sun.COM 
31669517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
31679517SBill.Taylor@Sun.COM struct hermon_hw_addr_path_s {
31689517SBill.Taylor@Sun.COM 	uint32_t	rlid		:16;
3169*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mlid		:7;	/* mlid or SMAC idx */
3170*12965SWilliam.Taylor@Oracle.COM 	uint32_t	grh		:1;
3171*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cntr_idx	:8;
3172*12965SWilliam.Taylor@Oracle.COM 
3173*12965SWilliam.Taylor@Oracle.COM 	uint32_t	pkey_indx	:7;
3174*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:22;
3175*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;	/* but may be used for enet */
3176*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cv		:1;
3177*12965SWilliam.Taylor@Oracle.COM 	uint32_t	force_lb	:1;
3178*12965SWilliam.Taylor@Oracle.COM 
3179*12965SWilliam.Taylor@Oracle.COM 	uint32_t	flow_label	:20;
3180*12965SWilliam.Taylor@Oracle.COM 	uint32_t	tclass		:8;
3181*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_s_in	:1;
3182*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_s_out	:1;
3183*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_r_in	:1;
3184*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_r_out 	:1; 	/* sniff-rcv-egress */
3185*12965SWilliam.Taylor@Oracle.COM 
3186*12965SWilliam.Taylor@Oracle.COM 	uint32_t	hop_limit	:8;
3187*12965SWilliam.Taylor@Oracle.COM 	uint32_t	max_stat_rate	:4;
3188*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:4;
3189*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mgid_index	:7;
3190*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
3191*12965SWilliam.Taylor@Oracle.COM 	uint32_t	link_type	:3;
3192*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ack_timeout	:5;
3193*12965SWilliam.Taylor@Oracle.COM 
3194*12965SWilliam.Taylor@Oracle.COM 	uint64_t	rgid_h;
3195*12965SWilliam.Taylor@Oracle.COM 	uint64_t	rgid_l;
3196*12965SWilliam.Taylor@Oracle.COM 
3197*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dmac_hi		:16;
3198*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
3199*12965SWilliam.Taylor@Oracle.COM 
3200*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;	/* but may be used for enet */
3201*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sp		:1;
3202*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
3203*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fvl		:1;
3204*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fsip		:1;
3205*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fsm		:1;
3206*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
3207*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_idx	:7;
3208*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
3209*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sched_q		:8;
3210*12965SWilliam.Taylor@Oracle.COM 
3211*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dmac_lo		:32;
3212*12965SWilliam.Taylor@Oracle.COM };
3213*12965SWilliam.Taylor@Oracle.COM #else
3214*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_addr_path_s {
3215*12965SWilliam.Taylor@Oracle.COM 	uint32_t	force_lb	:1;
3216*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cv		:1;
3217*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;	/* but may be used for enet */
3218*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:22;
3219*12965SWilliam.Taylor@Oracle.COM 	uint32_t	pkey_indx	:7;
3220*12965SWilliam.Taylor@Oracle.COM 
3221*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cntr_idx	:8;
3222*12965SWilliam.Taylor@Oracle.COM 	uint32_t	grh		:1;
3223*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mlid		:7;	/* mlid or SMAC idx */
3224*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rlid		:16;
3225*12965SWilliam.Taylor@Oracle.COM 
3226*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ack_timeout	:5;
3227*12965SWilliam.Taylor@Oracle.COM 	uint32_t	link_type	:3;
3228*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
3229*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mgid_index	:7;
3230*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:4;
3231*12965SWilliam.Taylor@Oracle.COM 	uint32_t	max_stat_rate	:4;
3232*12965SWilliam.Taylor@Oracle.COM 	uint32_t	hop_limit	:8;
3233*12965SWilliam.Taylor@Oracle.COM 
3234*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_r_out	:1;	/* sniff-rcv-egress */
3235*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_r_in	:1;
3236*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_s_out	:1;
3237*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_s_in	:1;
3238*12965SWilliam.Taylor@Oracle.COM 	uint32_t	tclass		:8;
3239*12965SWilliam.Taylor@Oracle.COM 	uint32_t	flow_label	:20;
3240*12965SWilliam.Taylor@Oracle.COM 
3241*12965SWilliam.Taylor@Oracle.COM 	uint64_t	rgid_h;
3242*12965SWilliam.Taylor@Oracle.COM 	uint64_t	rgid_l;
3243*12965SWilliam.Taylor@Oracle.COM 
3244*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sched_q		:8;
3245*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
3246*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_idx	:7;
3247*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
3248*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fsm		:1;
3249*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fsip		:1;
3250*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fvl		:1;
3251*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
3252*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sp		:1;
3253*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;	/* but may be used for enet */
3254*12965SWilliam.Taylor@Oracle.COM 
3255*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
3256*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dmac_hi		:16;
3257*12965SWilliam.Taylor@Oracle.COM 
3258*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dmac_lo		:32;
3259*12965SWilliam.Taylor@Oracle.COM };
3260*12965SWilliam.Taylor@Oracle.COM #endif	/* LITTLE ENDIAN */
3261*12965SWilliam.Taylor@Oracle.COM 
3262*12965SWilliam.Taylor@Oracle.COM /* The addr path includes RSS fields for RSS QPs */
3263*12965SWilliam.Taylor@Oracle.COM #ifdef	_LITTLE_ENDIAN
3264*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_rss_s {
3265*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rlid		:16;
32669517SBill.Taylor@Sun.COM 	uint32_t	mlid		:7;
32679517SBill.Taylor@Sun.COM 	uint32_t	grh		:1;
32689517SBill.Taylor@Sun.COM 	uint32_t	cntr_idx	:8;
32699517SBill.Taylor@Sun.COM 
32709517SBill.Taylor@Sun.COM 	uint32_t	pkey_indx	:7;
32719517SBill.Taylor@Sun.COM 	uint32_t			:22;
3272*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;	/* but may be used for enet */
3273*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cv		:1;
32749517SBill.Taylor@Sun.COM 	uint32_t	force_lb	:1;
32759517SBill.Taylor@Sun.COM 
32769517SBill.Taylor@Sun.COM 	uint32_t	flow_label	:20;
32779517SBill.Taylor@Sun.COM 	uint32_t	tclass		:8;
3278*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_s_in	:1;
3279*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_s_out	:1;
3280*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_r_in	:1;
3281*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_r_out 	:1; 	/* sniff-rcv-egress */
32829517SBill.Taylor@Sun.COM 
32839517SBill.Taylor@Sun.COM 	uint32_t	hop_limit	:8;
32849517SBill.Taylor@Sun.COM 	uint32_t	max_stat_rate	:4;
32859517SBill.Taylor@Sun.COM 	uint32_t			:4;
32869517SBill.Taylor@Sun.COM 	uint32_t	mgid_index	:7;
3287*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
3288*12965SWilliam.Taylor@Oracle.COM 	uint32_t	link_type	:3;
32899517SBill.Taylor@Sun.COM 	uint32_t	ack_timeout	:5;
32909517SBill.Taylor@Sun.COM 
32919517SBill.Taylor@Sun.COM 	uint64_t	rgid_h;
32929517SBill.Taylor@Sun.COM 	uint64_t	rgid_l;
32939517SBill.Taylor@Sun.COM 
3294*12965SWilliam.Taylor@Oracle.COM 	uint32_t	base_qpn	:24;
3295*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log2_tbl_sz	:4;
3296*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:4;
3297*12965SWilliam.Taylor@Oracle.COM 
3298*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;	/* but may be used for enet */
3299*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sp		:1;
3300*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
3301*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fvl		:1;
33029517SBill.Taylor@Sun.COM 	uint32_t	fsip		:1;
3303*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fsm		:1;
3304*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
3305*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_idx	:7;
33069517SBill.Taylor@Sun.COM 	uint32_t			:1;
33079517SBill.Taylor@Sun.COM 	uint32_t	sched_q		:8;
33089517SBill.Taylor@Sun.COM 
3309*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
3310*12965SWilliam.Taylor@Oracle.COM 	uint32_t	tcp_ipv6	:1;
3311*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ipv6		:1;
3312*12965SWilliam.Taylor@Oracle.COM 	uint32_t	tcp_ipv4	:1;
3313*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ipv4		:1;
3314*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
3315*12965SWilliam.Taylor@Oracle.COM 	uint32_t	hash_fn		:2;
3316*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:22;
3317*12965SWilliam.Taylor@Oracle.COM 
3318*12965SWilliam.Taylor@Oracle.COM 	uint32_t	default_qpn	:24;
3319*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
3320*12965SWilliam.Taylor@Oracle.COM 
3321*12965SWilliam.Taylor@Oracle.COM 	uint8_t		rss_key[40];
33229517SBill.Taylor@Sun.COM };
3323*12965SWilliam.Taylor@Oracle.COM #else  /* BIG ENDIAN */
3324*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_rss_s {
33259517SBill.Taylor@Sun.COM 	uint32_t	force_lb	:1;
3326*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cv		:1;
3327*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;	/* but may be used for enet */
33289517SBill.Taylor@Sun.COM 	uint32_t			:22;
33299517SBill.Taylor@Sun.COM 	uint32_t	pkey_indx	:7;
33309517SBill.Taylor@Sun.COM 
33319517SBill.Taylor@Sun.COM 	uint32_t	cntr_idx	:8;
33329517SBill.Taylor@Sun.COM 	uint32_t	grh		:1;
33339517SBill.Taylor@Sun.COM 	uint32_t	mlid		:7;
33349517SBill.Taylor@Sun.COM 	uint32_t	rlid		:16;
33359517SBill.Taylor@Sun.COM 
33369517SBill.Taylor@Sun.COM 	uint32_t	ack_timeout	:5;
3337*12965SWilliam.Taylor@Oracle.COM 	uint32_t	link_type	:3;
3338*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
33399517SBill.Taylor@Sun.COM 	uint32_t	mgid_index	:7;
33409517SBill.Taylor@Sun.COM 	uint32_t			:4;
33419517SBill.Taylor@Sun.COM 	uint32_t	max_stat_rate	:4;
33429517SBill.Taylor@Sun.COM 	uint32_t	hop_limit	:8;
33439517SBill.Taylor@Sun.COM 
3344*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_r_out	:1;	/* sniff-rcv-egress */
3345*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_r_in	:1;
3346*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_s_out	:1;
3347*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sniff_s_in	:1;
33489517SBill.Taylor@Sun.COM 	uint32_t	tclass		:8;
33499517SBill.Taylor@Sun.COM 	uint32_t	flow_label	:20;
33509517SBill.Taylor@Sun.COM 
33519517SBill.Taylor@Sun.COM 	uint64_t	rgid_h;
33529517SBill.Taylor@Sun.COM 	uint64_t	rgid_l;
33539517SBill.Taylor@Sun.COM 
33549517SBill.Taylor@Sun.COM 	uint32_t	sched_q		:8;
33559517SBill.Taylor@Sun.COM 	uint32_t			:1;
3356*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_idx	:7;
3357*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
3358*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fsm		:1;
33599517SBill.Taylor@Sun.COM 	uint32_t	fsip		:1;
3360*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fvl		:1;
3361*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
3362*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sp		:1;
3363*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;	/* but may be used for enet */
3364*12965SWilliam.Taylor@Oracle.COM 
3365*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:4;
3366*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log2_tbl_sz	:4;
3367*12965SWilliam.Taylor@Oracle.COM 	uint32_t	base_qpn	:24;
3368*12965SWilliam.Taylor@Oracle.COM 
3369*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
3370*12965SWilliam.Taylor@Oracle.COM 	uint32_t	default_qpn	:24;
3371*12965SWilliam.Taylor@Oracle.COM 
3372*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:22;
3373*12965SWilliam.Taylor@Oracle.COM 	uint32_t	hash_fn		:2;
3374*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
3375*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ipv4		:1;
3376*12965SWilliam.Taylor@Oracle.COM 	uint32_t	tcp_ipv4	:1;
3377*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ipv6		:1;
3378*12965SWilliam.Taylor@Oracle.COM 	uint32_t	tcp_ipv6	:1;
3379*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
3380*12965SWilliam.Taylor@Oracle.COM 
3381*12965SWilliam.Taylor@Oracle.COM 	uint8_t		rss_key[40];
33829517SBill.Taylor@Sun.COM };
33839517SBill.Taylor@Sun.COM #endif	/* LITTLE ENDIAN */
33849517SBill.Taylor@Sun.COM 
33859517SBill.Taylor@Sun.COM #if (DATAMODEL_NATIVE == DATAMODEL_LP64)
33869517SBill.Taylor@Sun.COM #pragma pack()
33879517SBill.Taylor@Sun.COM #endif
33889517SBill.Taylor@Sun.COM 
33899517SBill.Taylor@Sun.COM #if (DATAMODEL_NATIVE == DATAMODEL_LP64)
33909517SBill.Taylor@Sun.COM #pragma pack(4)
33919517SBill.Taylor@Sun.COM #endif
33929517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
33939517SBill.Taylor@Sun.COM struct hermon_hw_qpc_s {
33949517SBill.Taylor@Sun.COM 	uint32_t	pd		:24;
33959517SBill.Taylor@Sun.COM 	uint32_t			:8;
33969517SBill.Taylor@Sun.COM 
33979517SBill.Taylor@Sun.COM 	uint32_t			:11;
33989517SBill.Taylor@Sun.COM 	uint32_t	pm_state	:2;
33999517SBill.Taylor@Sun.COM 	uint32_t	rss		:1;
34009517SBill.Taylor@Sun.COM 	uint32_t			:2;
34019517SBill.Taylor@Sun.COM 	uint32_t	serv_type	:8;
34029517SBill.Taylor@Sun.COM 	uint32_t			:4;
34039517SBill.Taylor@Sun.COM 	uint32_t	state		:4;
34049517SBill.Taylor@Sun.COM 
34059517SBill.Taylor@Sun.COM 	uint32_t	usr_page	:24;
34069517SBill.Taylor@Sun.COM 	uint32_t			:8;
34079517SBill.Taylor@Sun.COM 
34089517SBill.Taylor@Sun.COM 	uint32_t			:4;
34099517SBill.Taylor@Sun.COM 	uint32_t	rlky		:1;
34109517SBill.Taylor@Sun.COM 	uint32_t			:3;
34119517SBill.Taylor@Sun.COM 	uint32_t	log_sq_stride	:3;
34129517SBill.Taylor@Sun.COM 	uint32_t	log_sq_size	:4;
34139517SBill.Taylor@Sun.COM 	uint32_t	sq_no_prefetch	:1;
34149517SBill.Taylor@Sun.COM 	uint32_t	log_rq_stride	:3;
34159517SBill.Taylor@Sun.COM 	uint32_t	log_rq_size	:4;
34169517SBill.Taylor@Sun.COM 	uint32_t			:1;
34179517SBill.Taylor@Sun.COM 	uint32_t	msg_max		:5;
34189517SBill.Taylor@Sun.COM 	uint32_t	mtu		:3;
34199517SBill.Taylor@Sun.COM 
34209517SBill.Taylor@Sun.COM 	uint32_t	rem_qpn		:24;
34219517SBill.Taylor@Sun.COM 	uint32_t			:8;
34229517SBill.Taylor@Sun.COM 
34239517SBill.Taylor@Sun.COM 	uint32_t	loc_qpn		:24;
34249517SBill.Taylor@Sun.COM 	uint32_t			:8;
34259517SBill.Taylor@Sun.COM 
34269517SBill.Taylor@Sun.COM 	hermon_hw_addr_path_t	pri_addr_path;
34279517SBill.Taylor@Sun.COM 
34289517SBill.Taylor@Sun.COM 	hermon_hw_addr_path_t	alt_addr_path;
34299517SBill.Taylor@Sun.COM 
34309517SBill.Taylor@Sun.COM 	uint32_t			:32;
34319517SBill.Taylor@Sun.COM 
34329517SBill.Taylor@Sun.COM 	uint32_t			:5;
34339517SBill.Taylor@Sun.COM 	uint32_t	cur_retry_cnt	:3;
34349517SBill.Taylor@Sun.COM 	uint32_t	cur_rnr_retry	:3;
34359517SBill.Taylor@Sun.COM 	uint32_t	fre		:1;
34369517SBill.Taylor@Sun.COM 	uint32_t			:1;
34379517SBill.Taylor@Sun.COM 	uint32_t	rnr_retry	:3;
34389517SBill.Taylor@Sun.COM 	uint32_t	retry_cnt	:3;
34399517SBill.Taylor@Sun.COM 	uint32_t			:2;
34409517SBill.Taylor@Sun.COM 	uint32_t	sra_max		:3;
34419517SBill.Taylor@Sun.COM 	uint32_t			:4;
34429517SBill.Taylor@Sun.COM 	uint32_t	ack_req_freq	:4;
34439517SBill.Taylor@Sun.COM 
34449517SBill.Taylor@Sun.COM 	uint32_t	cqn_snd		:24;
34459517SBill.Taylor@Sun.COM 	uint32_t			:8;
34469517SBill.Taylor@Sun.COM 
34479517SBill.Taylor@Sun.COM 	uint32_t	next_snd_psn	:24;
34489517SBill.Taylor@Sun.COM 	uint32_t			:8;
34499517SBill.Taylor@Sun.COM 
34509517SBill.Taylor@Sun.COM 	uint32_t			:32;
34519517SBill.Taylor@Sun.COM 
34529517SBill.Taylor@Sun.COM 	uint32_t			:32;
34539517SBill.Taylor@Sun.COM 
34549517SBill.Taylor@Sun.COM 	uint32_t	ssn		:24;
34559517SBill.Taylor@Sun.COM 	uint32_t			:8;
34569517SBill.Taylor@Sun.COM 
34579517SBill.Taylor@Sun.COM 	uint32_t	last_acked_psn	:24;
34589517SBill.Taylor@Sun.COM 	uint32_t			:8;
34599517SBill.Taylor@Sun.COM 
34609517SBill.Taylor@Sun.COM 	uint32_t	next_rcv_psn	:24;
34619517SBill.Taylor@Sun.COM 	uint32_t	min_rnr_nak	:5;
34629517SBill.Taylor@Sun.COM 	uint32_t			:3;
34639517SBill.Taylor@Sun.COM 
34649517SBill.Taylor@Sun.COM 	uint32_t			:4;
34659517SBill.Taylor@Sun.COM 	uint32_t	ric		:1;
34669517SBill.Taylor@Sun.COM 	uint32_t			:1;
34679517SBill.Taylor@Sun.COM 	uint32_t	page_offs	:6;
34689517SBill.Taylor@Sun.COM 	uint32_t			:1;
34699517SBill.Taylor@Sun.COM 	uint32_t	rae		:1;
34709517SBill.Taylor@Sun.COM 	uint32_t	rwe		:1;
34719517SBill.Taylor@Sun.COM 	uint32_t	rre		:1;
34729517SBill.Taylor@Sun.COM 	uint32_t			:5;
34739517SBill.Taylor@Sun.COM 	uint32_t	rra_max		:3;
34749517SBill.Taylor@Sun.COM 	uint32_t			:8;
34759517SBill.Taylor@Sun.COM 
34769517SBill.Taylor@Sun.COM 	uint32_t	cqn_rcv		:24;
34779517SBill.Taylor@Sun.COM 	uint32_t			:8;
34789517SBill.Taylor@Sun.COM 
3479*12965SWilliam.Taylor@Oracle.COM 	uint32_t	xrcd		:16;
34809517SBill.Taylor@Sun.COM 	uint32_t			:16;
34819517SBill.Taylor@Sun.COM 
34829517SBill.Taylor@Sun.COM 	uint32_t			:2;
34839517SBill.Taylor@Sun.COM 	uint32_t	dbr_addrl	:30;
34849517SBill.Taylor@Sun.COM 
34859517SBill.Taylor@Sun.COM 	uint32_t	dbr_addrh	:32;
34869517SBill.Taylor@Sun.COM 
34879517SBill.Taylor@Sun.COM 	uint32_t	srq_number	:24;
34889517SBill.Taylor@Sun.COM 	uint32_t	srq_en		:1;
34899517SBill.Taylor@Sun.COM 	uint32_t			:7;
34909517SBill.Taylor@Sun.COM 
34919517SBill.Taylor@Sun.COM 	uint32_t	qkey;
34929517SBill.Taylor@Sun.COM 
34939517SBill.Taylor@Sun.COM 	uint32_t	sq_wqe_counter	:16;
34949517SBill.Taylor@Sun.COM 	uint32_t	rq_wqe_counter	:16;
34959517SBill.Taylor@Sun.COM 
34969517SBill.Taylor@Sun.COM 	uint32_t	rmsn		:24;
34979517SBill.Taylor@Sun.COM 	uint32_t			:8;
34989517SBill.Taylor@Sun.COM 
34999517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[2];
35009517SBill.Taylor@Sun.COM 
35019517SBill.Taylor@Sun.COM 	/* new w/ hermon */
35029517SBill.Taylor@Sun.COM 
35039517SBill.Taylor@Sun.COM 	uint32_t	base_mkey	:24;	/* bits 32-8, low 7 m/b 0 */
35049517SBill.Taylor@Sun.COM 	uint32_t	num_rmc_peers	:8;
35059517SBill.Taylor@Sun.COM 
35069517SBill.Taylor@Sun.COM 	uint32_t	rmc_parent_qpn	:24;
35079517SBill.Taylor@Sun.COM 	uint32_t	header_sep	:1;
3508*12965SWilliam.Taylor@Oracle.COM 	uint32_t	inline_scatter  :1; 	/* m/b 0 for srq */
35099517SBill.Taylor@Sun.COM 	uint32_t			:1;
35109517SBill.Taylor@Sun.COM 	uint32_t	rmc_enable	:2;
35119517SBill.Taylor@Sun.COM 	uint32_t			:2;	/* may use one bit for enet */
35129517SBill.Taylor@Sun.COM 	uint32_t	mkey_remap	:1;
35139517SBill.Taylor@Sun.COM 
35149517SBill.Taylor@Sun.COM 	uint32_t			:3;
35159517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addrl	:29;
35169517SBill.Taylor@Sun.COM 
35179517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addrh	:8;
35189517SBill.Taylor@Sun.COM 	uint32_t			:16;
35199517SBill.Taylor@Sun.COM 	uint32_t	log2_pgsz	:6;
35209517SBill.Taylor@Sun.COM 	uint32_t			:2;
35219517SBill.Taylor@Sun.COM 
3522*12965SWilliam.Taylor@Oracle.COM 	uint32_t	exch_base	:16;
3523*12965SWilliam.Taylor@Oracle.COM 	uint32_t	exch_size	:4;
3524*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:12;
3525*12965SWilliam.Taylor@Oracle.COM 
3526*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vft_vf_id	:12;
3527*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vft_prior	:3;
3528*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
3529*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ve		:1;
3530*12965SWilliam.Taylor@Oracle.COM 
3531*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3532*12965SWilliam.Taylor@Oracle.COM 
3533*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
3534*12965SWilliam.Taylor@Oracle.COM 	uint32_t	my_fc_id_idx	:8;
3535*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vft_hop_cnt	:8;
3536*12965SWilliam.Taylor@Oracle.COM 
3537*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd[8];
35389517SBill.Taylor@Sun.COM };
35399517SBill.Taylor@Sun.COM #else /* BIG ENDIAN */
35409517SBill.Taylor@Sun.COM struct hermon_hw_qpc_s {
35419517SBill.Taylor@Sun.COM 	uint32_t	state		:4;
35429517SBill.Taylor@Sun.COM 	uint32_t			:4;
35439517SBill.Taylor@Sun.COM 	uint32_t	serv_type	:8;
35449517SBill.Taylor@Sun.COM 	uint32_t			:2;
35459517SBill.Taylor@Sun.COM 	uint32_t	rss		:1;
35469517SBill.Taylor@Sun.COM 	uint32_t	pm_state	:2;
35479517SBill.Taylor@Sun.COM 	uint32_t			:11;
35489517SBill.Taylor@Sun.COM 
35499517SBill.Taylor@Sun.COM 	uint32_t			:8;
35509517SBill.Taylor@Sun.COM 	uint32_t	pd		:24;
35519517SBill.Taylor@Sun.COM 
35529517SBill.Taylor@Sun.COM 	uint32_t	mtu		:3;
35539517SBill.Taylor@Sun.COM 	uint32_t	msg_max		:5;
35549517SBill.Taylor@Sun.COM 	uint32_t			:1;
35559517SBill.Taylor@Sun.COM 	uint32_t	log_rq_size	:4;
35569517SBill.Taylor@Sun.COM 	uint32_t	log_rq_stride	:3;
35579517SBill.Taylor@Sun.COM 	uint32_t	sq_no_prefetch	:1;
35589517SBill.Taylor@Sun.COM 	uint32_t	log_sq_size	:4;
35599517SBill.Taylor@Sun.COM 	uint32_t	log_sq_stride	:3;
35609517SBill.Taylor@Sun.COM 	uint32_t			:3;
35619517SBill.Taylor@Sun.COM 	uint32_t	rlky		:1;
35629517SBill.Taylor@Sun.COM 	uint32_t			:4;
35639517SBill.Taylor@Sun.COM 
35649517SBill.Taylor@Sun.COM 	uint32_t			:8;
35659517SBill.Taylor@Sun.COM 	uint32_t	usr_page	:24;
35669517SBill.Taylor@Sun.COM 
35679517SBill.Taylor@Sun.COM 	uint32_t			:8;
35689517SBill.Taylor@Sun.COM 	uint32_t	loc_qpn		:24;
35699517SBill.Taylor@Sun.COM 
35709517SBill.Taylor@Sun.COM 	uint32_t			:8;
35719517SBill.Taylor@Sun.COM 	uint32_t	rem_qpn		:24;
35729517SBill.Taylor@Sun.COM 
35739517SBill.Taylor@Sun.COM 	hermon_hw_addr_path_t	pri_addr_path;
35749517SBill.Taylor@Sun.COM 
35759517SBill.Taylor@Sun.COM 	hermon_hw_addr_path_t	alt_addr_path;
35769517SBill.Taylor@Sun.COM 
35779517SBill.Taylor@Sun.COM 	uint32_t	ack_req_freq	:4;
35789517SBill.Taylor@Sun.COM 	uint32_t			:4;
35799517SBill.Taylor@Sun.COM 	uint32_t	sra_max		:3;
35809517SBill.Taylor@Sun.COM 	uint32_t			:2;
35819517SBill.Taylor@Sun.COM 	uint32_t	retry_cnt	:3;
35829517SBill.Taylor@Sun.COM 	uint32_t	rnr_retry	:3;
35839517SBill.Taylor@Sun.COM 	uint32_t			:1;
35849517SBill.Taylor@Sun.COM 	uint32_t	fre		:1;
35859517SBill.Taylor@Sun.COM 	uint32_t	cur_rnr_retry	:3;
35869517SBill.Taylor@Sun.COM 	uint32_t	cur_retry_cnt	:3;
35879517SBill.Taylor@Sun.COM 	uint32_t			:5;
35889517SBill.Taylor@Sun.COM 
35899517SBill.Taylor@Sun.COM 	uint32_t			:32;
35909517SBill.Taylor@Sun.COM 
35919517SBill.Taylor@Sun.COM 	uint32_t			:8;
35929517SBill.Taylor@Sun.COM 	uint32_t	next_snd_psn	:24;
35939517SBill.Taylor@Sun.COM 
35949517SBill.Taylor@Sun.COM 	uint32_t			:8;
35959517SBill.Taylor@Sun.COM 	uint32_t	cqn_snd		:24;
35969517SBill.Taylor@Sun.COM 
35979517SBill.Taylor@Sun.COM 	uint32_t			:32;
35989517SBill.Taylor@Sun.COM 
35999517SBill.Taylor@Sun.COM 	uint32_t			:32;
36009517SBill.Taylor@Sun.COM 
36019517SBill.Taylor@Sun.COM 	uint32_t			:8;
36029517SBill.Taylor@Sun.COM 	uint32_t	last_acked_psn	:24;
36039517SBill.Taylor@Sun.COM 
36049517SBill.Taylor@Sun.COM 	uint32_t			:8;
36059517SBill.Taylor@Sun.COM 	uint32_t	ssn		:24;
36069517SBill.Taylor@Sun.COM 
36079517SBill.Taylor@Sun.COM 	uint32_t			:8;
36089517SBill.Taylor@Sun.COM 	uint32_t	rra_max		:3;
36099517SBill.Taylor@Sun.COM 	uint32_t			:5;
36109517SBill.Taylor@Sun.COM 	uint32_t	rre		:1;
36119517SBill.Taylor@Sun.COM 	uint32_t	rwe		:1;
36129517SBill.Taylor@Sun.COM 	uint32_t	rae		:1;
36139517SBill.Taylor@Sun.COM 	uint32_t			:1;
36149517SBill.Taylor@Sun.COM 	uint32_t	page_offs	:6;
36159517SBill.Taylor@Sun.COM 	uint32_t			:1;
36169517SBill.Taylor@Sun.COM 	uint32_t	ric		:1;
36179517SBill.Taylor@Sun.COM 	uint32_t			:4;
36189517SBill.Taylor@Sun.COM 
36199517SBill.Taylor@Sun.COM 	uint32_t			:3;
36209517SBill.Taylor@Sun.COM 	uint32_t	min_rnr_nak	:5;
36219517SBill.Taylor@Sun.COM 	uint32_t	next_rcv_psn	:24;
36229517SBill.Taylor@Sun.COM 
36239517SBill.Taylor@Sun.COM 	uint32_t			:16;
3624*12965SWilliam.Taylor@Oracle.COM 	uint32_t	xrcd		:16;
36259517SBill.Taylor@Sun.COM 
36269517SBill.Taylor@Sun.COM 	uint32_t			:8;
36279517SBill.Taylor@Sun.COM 	uint32_t	cqn_rcv		:24;
36289517SBill.Taylor@Sun.COM 
36299517SBill.Taylor@Sun.COM 	uint32_t	dbr_addrh	:32;
36309517SBill.Taylor@Sun.COM 
36319517SBill.Taylor@Sun.COM 	uint32_t	dbr_addrl	:30;
36329517SBill.Taylor@Sun.COM 	uint32_t			:2;
36339517SBill.Taylor@Sun.COM 
36349517SBill.Taylor@Sun.COM 	uint32_t	qkey;
36359517SBill.Taylor@Sun.COM 
36369517SBill.Taylor@Sun.COM 	uint32_t			:7;
36379517SBill.Taylor@Sun.COM 	uint32_t	srq_en		:1;
36389517SBill.Taylor@Sun.COM 	uint32_t	srq_number	:24;
36399517SBill.Taylor@Sun.COM 
36409517SBill.Taylor@Sun.COM 	uint32_t			:8;
36419517SBill.Taylor@Sun.COM 	uint32_t	rmsn		:24;
36429517SBill.Taylor@Sun.COM 
36439517SBill.Taylor@Sun.COM 	uint32_t	rq_wqe_counter	:16;
36449517SBill.Taylor@Sun.COM 	uint32_t	sq_wqe_counter	:16;
36459517SBill.Taylor@Sun.COM 
36469517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[2];
36479517SBill.Taylor@Sun.COM 
36489517SBill.Taylor@Sun.COM 	/* new w/ hermon */
36499517SBill.Taylor@Sun.COM 
36509517SBill.Taylor@Sun.COM 	uint32_t	mkey_remap	:1;
36519517SBill.Taylor@Sun.COM 	uint32_t			:2;	/* may use one bit for enet */
36529517SBill.Taylor@Sun.COM 	uint32_t	rmc_enable	:2;
36539517SBill.Taylor@Sun.COM 	uint32_t			:1;
3654*12965SWilliam.Taylor@Oracle.COM 	uint32_t	inline_scatter  :1; 	/* m/b 0 for srq */
36559517SBill.Taylor@Sun.COM 	uint32_t	header_sep	:1;
36569517SBill.Taylor@Sun.COM 	uint32_t	rmc_parent_qpn	:24;
36579517SBill.Taylor@Sun.COM 
36589517SBill.Taylor@Sun.COM 	uint32_t	num_rmc_peers	:8;
36599517SBill.Taylor@Sun.COM 	uint32_t	base_mkey	:24;	/* bits 32-8, low 7 m/b 0 */
36609517SBill.Taylor@Sun.COM 
36619517SBill.Taylor@Sun.COM 	uint32_t			:2;
36629517SBill.Taylor@Sun.COM 	uint32_t	log2_pgsz	:6;
36639517SBill.Taylor@Sun.COM 	uint32_t			:16;
36649517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addrh	:8;
36659517SBill.Taylor@Sun.COM 
36669517SBill.Taylor@Sun.COM 	uint32_t	mtt_base_addrl	:29;
36679517SBill.Taylor@Sun.COM 	uint32_t			:3;
36689517SBill.Taylor@Sun.COM 
3669*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ve		:1;
3670*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
3671*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vft_prior	:3;
3672*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vft_vf_id	:12;
3673*12965SWilliam.Taylor@Oracle.COM 
3674*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:12;
3675*12965SWilliam.Taylor@Oracle.COM 	uint32_t	exch_size	:4;
3676*12965SWilliam.Taylor@Oracle.COM 	uint32_t	exch_base	:16;
3677*12965SWilliam.Taylor@Oracle.COM 
3678*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vft_hop_cnt	:8;
3679*12965SWilliam.Taylor@Oracle.COM 	uint32_t	my_fc_id_idx	:8;
3680*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
3681*12965SWilliam.Taylor@Oracle.COM 
3682*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3683*12965SWilliam.Taylor@Oracle.COM 
3684*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsvd[8];
36859517SBill.Taylor@Sun.COM };
36869517SBill.Taylor@Sun.COM #endif	/* LITTLE ENDIAN */
36879517SBill.Taylor@Sun.COM 
36889517SBill.Taylor@Sun.COM #if (DATAMODEL_NATIVE == DATAMODEL_LP64)
36899517SBill.Taylor@Sun.COM #pragma pack()
36909517SBill.Taylor@Sun.COM #endif
36919517SBill.Taylor@Sun.COM 
36929517SBill.Taylor@Sun.COM #define	HERMON_QP_RESET			0x0
36939517SBill.Taylor@Sun.COM #define	HERMON_QP_INIT			0x1
36949517SBill.Taylor@Sun.COM #define	HERMON_QP_RTR			0x2
36959517SBill.Taylor@Sun.COM #define	HERMON_QP_RTS			0x3
36969517SBill.Taylor@Sun.COM #define	HERMON_QP_SQERR			0x4
36979517SBill.Taylor@Sun.COM #define	HERMON_QP_SQD			0x5
36989517SBill.Taylor@Sun.COM #define	HERMON_QP_ERR			0x6
36999517SBill.Taylor@Sun.COM #define	HERMON_QP_SQDRAINING		0x7
37009517SBill.Taylor@Sun.COM 
37019517SBill.Taylor@Sun.COM #define	HERMON_QP_RC			0x0
37029517SBill.Taylor@Sun.COM #define	HERMON_QP_UC			0x1
37039517SBill.Taylor@Sun.COM #define	HERMON_QP_UD			0x3
3704*12965SWilliam.Taylor@Oracle.COM #define	HERMON_QP_FCMND			0x4
3705*12965SWilliam.Taylor@Oracle.COM #define	HERMON_QP_FEXCH			0x5
3706*12965SWilliam.Taylor@Oracle.COM #define	HERMON_QP_XRC			0x6
37079517SBill.Taylor@Sun.COM #define	HERMON_QP_MLX			0x7
3708*12965SWilliam.Taylor@Oracle.COM #define	HERMON_QP_RFCI			0x9
37099517SBill.Taylor@Sun.COM 
37109517SBill.Taylor@Sun.COM #define	HERMON_QP_PMSTATE_MIGRATED	0x3
37119517SBill.Taylor@Sun.COM #define	HERMON_QP_PMSTATE_ARMED		0x0
37129517SBill.Taylor@Sun.COM #define	HERMON_QP_PMSTATE_REARM		0x1
37139517SBill.Taylor@Sun.COM 
37149517SBill.Taylor@Sun.COM #define	HERMON_QP_DESC_EVT_DISABLED	0x0
37159517SBill.Taylor@Sun.COM #define	HERMON_QP_DESC_EVT_ENABLED	0x1
37169517SBill.Taylor@Sun.COM 
37179517SBill.Taylor@Sun.COM #define	HERMON_QP_FLIGHT_LIM_UNLIMITED	0xF
37189517SBill.Taylor@Sun.COM 
37199517SBill.Taylor@Sun.COM #define	HERMON_QP_SQ_ALL_SIGNALED	0x1
37209517SBill.Taylor@Sun.COM #define	HERMON_QP_SQ_WR_SIGNALED		0x0
37219517SBill.Taylor@Sun.COM #define	HERMON_QP_RQ_ALL_SIGNALED	0x1
37229517SBill.Taylor@Sun.COM #define	HERMON_QP_RQ_WR_SIGNALED		0x0
37239517SBill.Taylor@Sun.COM 
37249517SBill.Taylor@Sun.COM #define	HERMON_QP_SRQ_ENABLED	0x1
37259517SBill.Taylor@Sun.COM #define	HERMON_QP_SRQ_DISABLED	0x0
37269517SBill.Taylor@Sun.COM 
37279517SBill.Taylor@Sun.COM #define	HERMON_QP_WQE_BASE_SHIFT		0x6
37289517SBill.Taylor@Sun.COM 
37299517SBill.Taylor@Sun.COM /*
37309517SBill.Taylor@Sun.COM  * Hermon Multicast Group Member (MCG)
37319517SBill.Taylor@Sun.COM  *    Hermon MCG are organized in a virtually-contiguous memory table (the
37329517SBill.Taylor@Sun.COM  *    Multicast Group Table) in the ICM.  This table is
37339517SBill.Taylor@Sun.COM  *    actually comprised of two consecutive tables: the Multicast Group Hash
37349517SBill.Taylor@Sun.COM  *    Table (MGHT) and the Additional Multicast Group Members Table (AMGM).
37359517SBill.Taylor@Sun.COM  *    Each such entry contains an MGID and a list of QPs that are attached to
37369517SBill.Taylor@Sun.COM  *    the multicast group.  Each such entry may also include an index to an
37379517SBill.Taylor@Sun.COM  *    Additional Multicast Group Member Table (AMGM) entry.  The AMGMs are
37389517SBill.Taylor@Sun.COM  *    used to form a linked list of MCG entries that all map to the same hash
37399517SBill.Taylor@Sun.COM  *    value.  The MCG entry size is configured through the INIT_HCA command.
37409517SBill.Taylor@Sun.COM  *    Note:  An MCG actually consists of a single hermon_hw_mcg_t and some
37419517SBill.Taylor@Sun.COM  *    number of hermon_hw_mcg_qp_list_t (such that the combined structure is a
37429517SBill.Taylor@Sun.COM  *    power-of-2).
37439517SBill.Taylor@Sun.COM  *
37449517SBill.Taylor@Sun.COM  *    The following structures are used in the READ_MGM and WRITE_MGM commands.
37459517SBill.Taylor@Sun.COM  *    The READ_MGM command reads an MCG entry from the multicast table and
37469517SBill.Taylor@Sun.COM  *    returns it in the output mailbox.  Note: This operation does not affect
37479517SBill.Taylor@Sun.COM  *    the MCG entry state or values.
37489517SBill.Taylor@Sun.COM  *    The WRITE_MGM command retrieves an MCG entry from the input mailbox and
37499517SBill.Taylor@Sun.COM  *    stores it in the multicast group table at the index specified in the
37509517SBill.Taylor@Sun.COM  *    command.  Once the command has finished execution, the multicast group
37519517SBill.Taylor@Sun.COM  *    table is updated.  The old entry contents are lost.
37529517SBill.Taylor@Sun.COM  */
37539517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
37549517SBill.Taylor@Sun.COM struct hermon_hw_mcg_s {
37559517SBill.Taylor@Sun.COM 	uint32_t	member_cnt	:24;
3756*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:6;
3757*12965SWilliam.Taylor@Oracle.COM 	uint32_t	protocol	:2;
37589517SBill.Taylor@Sun.COM 
37599517SBill.Taylor@Sun.COM 	uint32_t			:6;
37609517SBill.Taylor@Sun.COM 	uint32_t	next_gid_indx	:26;
37619517SBill.Taylor@Sun.COM 
37629517SBill.Taylor@Sun.COM 	uint32_t			:32;
37639517SBill.Taylor@Sun.COM 	uint32_t			:32;
37649517SBill.Taylor@Sun.COM 
37659517SBill.Taylor@Sun.COM 	uint64_t	mgid_h;
37669517SBill.Taylor@Sun.COM 	uint64_t	mgid_l;
37679517SBill.Taylor@Sun.COM };
37689517SBill.Taylor@Sun.COM #else
37699517SBill.Taylor@Sun.COM struct hermon_hw_mcg_s {
37709517SBill.Taylor@Sun.COM 	uint32_t	next_gid_indx	:26;
37719517SBill.Taylor@Sun.COM 	uint32_t			:6;
37729517SBill.Taylor@Sun.COM 
3773*12965SWilliam.Taylor@Oracle.COM 	uint32_t	protocol	:2;
3774*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:6;
37759517SBill.Taylor@Sun.COM 	uint32_t	member_cnt	:24;
37769517SBill.Taylor@Sun.COM 
37779517SBill.Taylor@Sun.COM 	uint32_t			:32;
37789517SBill.Taylor@Sun.COM 	uint32_t			:32;
37799517SBill.Taylor@Sun.COM 
37809517SBill.Taylor@Sun.COM 	uint64_t	mgid_h;
37819517SBill.Taylor@Sun.COM 	uint64_t	mgid_l;
37829517SBill.Taylor@Sun.COM };
37839517SBill.Taylor@Sun.COM #endif
37849517SBill.Taylor@Sun.COM 
3785*12965SWilliam.Taylor@Oracle.COM #ifdef	_LITTLE_ENDIAN
3786*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_mcg_en_s {
3787*12965SWilliam.Taylor@Oracle.COM 	uint32_t	member_cnt	:24;
3788*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:6;
3789*12965SWilliam.Taylor@Oracle.COM 	uint32_t	protocol	:2;
3790*12965SWilliam.Taylor@Oracle.COM 
3791*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:6;
3792*12965SWilliam.Taylor@Oracle.COM 	uint32_t	next_gid_indx	:26;
3793*12965SWilliam.Taylor@Oracle.COM 
3794*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3795*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3796*12965SWilliam.Taylor@Oracle.COM 
3797*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_present	:1;
3798*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:31;
3799*12965SWilliam.Taylor@Oracle.COM 
3800*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3801*12965SWilliam.Taylor@Oracle.COM 
3802*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_lo		:32;
3803*12965SWilliam.Taylor@Oracle.COM 
3804*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_hi		:16;
3805*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_id		:12;
3806*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_cfi	:1;
3807*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_prior	:3;
3808*12965SWilliam.Taylor@Oracle.COM 
3809*12965SWilliam.Taylor@Oracle.COM };
3810*12965SWilliam.Taylor@Oracle.COM #else
3811*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_mcg_en_s {
3812*12965SWilliam.Taylor@Oracle.COM 	uint32_t	next_gid_indx	:26;
3813*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:6;
3814*12965SWilliam.Taylor@Oracle.COM 
3815*12965SWilliam.Taylor@Oracle.COM 	uint32_t	protocol	:2;
3816*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:6;
3817*12965SWilliam.Taylor@Oracle.COM 	uint32_t	member_cnt	:24;
3818*12965SWilliam.Taylor@Oracle.COM 
3819*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3820*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3821*12965SWilliam.Taylor@Oracle.COM 
3822*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3823*12965SWilliam.Taylor@Oracle.COM 
3824*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:31;
3825*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_present	:1;
3826*12965SWilliam.Taylor@Oracle.COM 
3827*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_prior	:3;
3828*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_cfi	:1;
3829*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan_id		:12;
3830*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_hi		:16;
3831*12965SWilliam.Taylor@Oracle.COM 
3832*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_lo		:32;
3833*12965SWilliam.Taylor@Oracle.COM 
3834*12965SWilliam.Taylor@Oracle.COM };
3835*12965SWilliam.Taylor@Oracle.COM #endif
3836*12965SWilliam.Taylor@Oracle.COM 
38379517SBill.Taylor@Sun.COM 
38389517SBill.Taylor@Sun.COM /* Multicast Group Member - QP List entries */
38399517SBill.Taylor@Sun.COM #ifdef	_LITTLE_ENDIAN
38409517SBill.Taylor@Sun.COM struct hermon_hw_mcg_qp_list_s {
38419517SBill.Taylor@Sun.COM 	uint32_t	qpn		:24;
38429517SBill.Taylor@Sun.COM 	uint32_t			:6;
38439517SBill.Taylor@Sun.COM 	uint32_t	blk_lb		:1;
38449517SBill.Taylor@Sun.COM 	uint32_t			:1;
38459517SBill.Taylor@Sun.COM };
38469517SBill.Taylor@Sun.COM #else
38479517SBill.Taylor@Sun.COM struct hermon_hw_mcg_qp_list_s {
38489517SBill.Taylor@Sun.COM 	uint32_t			:1;
38499517SBill.Taylor@Sun.COM 	uint32_t	blk_lb		:1;
38509517SBill.Taylor@Sun.COM 	uint32_t			:6;
38519517SBill.Taylor@Sun.COM 	uint32_t	qpn		:24;
38529517SBill.Taylor@Sun.COM };
38539517SBill.Taylor@Sun.COM #endif
38549517SBill.Taylor@Sun.COM 
38559517SBill.Taylor@Sun.COM #define	HERMON_MCG_QPN_BLOCK_LB		0x40000000
38569517SBill.Taylor@Sun.COM 
38579517SBill.Taylor@Sun.COM /*
3858*12965SWilliam.Taylor@Oracle.COM  * ETHERNET ONLY Commands
3859*12965SWilliam.Taylor@Oracle.COM  * The follow are new commands, used only for an Ethernet Port
3860*12965SWilliam.Taylor@Oracle.COM  */
3861*12965SWilliam.Taylor@Oracle.COM 
3862*12965SWilliam.Taylor@Oracle.COM #ifdef _LITTLE_ENDIAN
3863*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_mcast_fltr_s {
3864*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_lo;
3865*12965SWilliam.Taylor@Oracle.COM 
3866*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_hi		:16;
3867*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:15;
3868*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sfs		:1;
3869*12965SWilliam.Taylor@Oracle.COM };
3870*12965SWilliam.Taylor@Oracle.COM #else	/* BIG ENDIAN */
3871*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_set_mcast_fltr_s {
3872*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sfs		:1;
3873*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:15;
3874*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_hi		:16;
3875*12965SWilliam.Taylor@Oracle.COM 
3876*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mac_lo;
3877*12965SWilliam.Taylor@Oracle.COM };
3878*12965SWilliam.Taylor@Oracle.COM #endif
3879*12965SWilliam.Taylor@Oracle.COM 
3880*12965SWilliam.Taylor@Oracle.COM /* opmod for set_mcast_fltr */
3881*12965SWilliam.Taylor@Oracle.COM #define	HERMON_SET_MCAST_FLTR_CONF	0x0
3882*12965SWilliam.Taylor@Oracle.COM #define	HERMON_SET_MCAST_FLTR_DIS	0x1
3883*12965SWilliam.Taylor@Oracle.COM #define	HERMON_SET_MCAST_FLTR_EN	0x2
3884*12965SWilliam.Taylor@Oracle.COM 
3885*12965SWilliam.Taylor@Oracle.COM 
3886*12965SWilliam.Taylor@Oracle.COM /*
3887*12965SWilliam.Taylor@Oracle.COM  * FC Command structures
3888*12965SWilliam.Taylor@Oracle.COM  */
3889*12965SWilliam.Taylor@Oracle.COM 
3890*12965SWilliam.Taylor@Oracle.COM 
3891*12965SWilliam.Taylor@Oracle.COM 
3892*12965SWilliam.Taylor@Oracle.COM #ifdef _LITTLE_ENDIAN
3893*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_config_fc_basic_s {
3894*12965SWilliam.Taylor@Oracle.COM 	uint32_t	n_p		:2;
3895*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:6;
3896*12965SWilliam.Taylor@Oracle.COM 	uint32_t	n_v		:3;
3897*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
3898*12965SWilliam.Taylor@Oracle.COM 	uint32_t	n_m		:4;
3899*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:12;
3900*12965SWilliam.Taylor@Oracle.COM 
3901*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
3902*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fexch_base_hi	:8;
3903*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
3904*12965SWilliam.Taylor@Oracle.COM 
3905*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rfci_base	:24;
3906*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log2_num_rfci	:3;
3907*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
3908*12965SWilliam.Taylor@Oracle.COM 
3909*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fx_base_mpt_lo	:8;
3910*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:17;
3911*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fx_base_mpt_hi	:7;
3912*12965SWilliam.Taylor@Oracle.COM 
3913*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fcoe_prom_qpn	:24;
3914*12965SWilliam.Taylor@Oracle.COM 	uint32_t	uint32_t	:8;
3915*12965SWilliam.Taylor@Oracle.COM 
3916*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3917*12965SWilliam.Taylor@Oracle.COM 
3918*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv[58];
3919*12965SWilliam.Taylor@Oracle.COM };
3920*12965SWilliam.Taylor@Oracle.COM #else
3921*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_config_fc_basic_s {
3922*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
3923*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fexch_base_hi	:8;
3924*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
3925*12965SWilliam.Taylor@Oracle.COM 
3926*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:12;
3927*12965SWilliam.Taylor@Oracle.COM 	uint32_t	n_m		:4;
3928*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
3929*12965SWilliam.Taylor@Oracle.COM 	uint32_t	n_v		:3;
3930*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:6;
3931*12965SWilliam.Taylor@Oracle.COM 	uint32_t	n_p		:2;
3932*12965SWilliam.Taylor@Oracle.COM 
3933*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fx_base_mpt_hi	:7;
3934*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:17;
3935*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fx_base_mpt_lo	:8;
3936*12965SWilliam.Taylor@Oracle.COM 
3937*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
3938*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log2_num_rfci	:3;
3939*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rfci_base	:24;
3940*12965SWilliam.Taylor@Oracle.COM 
3941*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3942*12965SWilliam.Taylor@Oracle.COM 
3943*12965SWilliam.Taylor@Oracle.COM 	uint32_t	uint32_t	:8;
3944*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fcoe_prom_qpn	:24;
3945*12965SWilliam.Taylor@Oracle.COM 
3946*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv[58];
3947*12965SWilliam.Taylor@Oracle.COM };
3948*12965SWilliam.Taylor@Oracle.COM #endif
3949*12965SWilliam.Taylor@Oracle.COM 
3950*12965SWilliam.Taylor@Oracle.COM #define	HERMON_HW_FC_PORT_ENABLE	0x0
3951*12965SWilliam.Taylor@Oracle.COM #define	HERMON_HW_FC_PORT_DISABLE	0x1
3952*12965SWilliam.Taylor@Oracle.COM #define	HERMON_HW_FC_CONF_BASIC		0x0000
3953*12965SWilliam.Taylor@Oracle.COM #define	HERMON_HW_FC_CONF_NPORT		0x0100
3954*12965SWilliam.Taylor@Oracle.COM 
3955*12965SWilliam.Taylor@Oracle.COM #ifdef _LITTLE_ENDIAN
3956*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_query_fc_s {
3957*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3958*12965SWilliam.Taylor@Oracle.COM 
3959*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log2_max_rfci	:3;
3960*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
3961*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log2_max_fexch	:5;
3962*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:3;
3963*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log2_max_nports	:3;
3964*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:13;
3965*12965SWilliam.Taylor@Oracle.COM 
3966*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv[62];
3967*12965SWilliam.Taylor@Oracle.COM };
3968*12965SWilliam.Taylor@Oracle.COM #else
3969*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_query_fc_s {
3970*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:13;
3971*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log2_max_nports	:3;
3972*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:3;
3973*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log2_max_fexch	:5;
3974*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
3975*12965SWilliam.Taylor@Oracle.COM 	uint32_t	log2_max_rfci	:3;
3976*12965SWilliam.Taylor@Oracle.COM 
3977*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3978*12965SWilliam.Taylor@Oracle.COM 
3979*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv[62];
3980*12965SWilliam.Taylor@Oracle.COM };
3981*12965SWilliam.Taylor@Oracle.COM #endif
3982*12965SWilliam.Taylor@Oracle.COM 
3983*12965SWilliam.Taylor@Oracle.COM 
3984*12965SWilliam.Taylor@Oracle.COM 
3985*12965SWilliam.Taylor@Oracle.COM 
3986*12965SWilliam.Taylor@Oracle.COM /* ARM_RQ - limit water mark for srq & rq */
3987*12965SWilliam.Taylor@Oracle.COM #ifdef _LITTLE_ENDIAN
3988*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_arm_req_s {
3989*12965SWilliam.Taylor@Oracle.COM 	uint32_t	lwm		:16;
3990*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
3991*12965SWilliam.Taylor@Oracle.COM 
3992*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3993*12965SWilliam.Taylor@Oracle.COM };
3994*12965SWilliam.Taylor@Oracle.COM #else
3995*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_arm_req_s {
3996*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
3997*12965SWilliam.Taylor@Oracle.COM 
3998*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
3999*12965SWilliam.Taylor@Oracle.COM 	uint32_t	lwm		:16;
4000*12965SWilliam.Taylor@Oracle.COM };
4001*12965SWilliam.Taylor@Oracle.COM #endif
4002*12965SWilliam.Taylor@Oracle.COM 
4003*12965SWilliam.Taylor@Oracle.COM /*
40049517SBill.Taylor@Sun.COM  * Structure for getting the peformance counters from the HCA
40059517SBill.Taylor@Sun.COM  */
40069517SBill.Taylor@Sun.COM 
40079517SBill.Taylor@Sun.COM #ifdef _LITTLE_ENDIAN
40089517SBill.Taylor@Sun.COM struct hermon_hw_sm_perfcntr_s {
40099517SBill.Taylor@Sun.COM 	uint32_t	linkdown	:8;
40109517SBill.Taylor@Sun.COM 	uint32_t	linkerrrec	:8;
40119517SBill.Taylor@Sun.COM 	uint32_t	symerr		:16;
40129517SBill.Taylor@Sun.COM 
40139517SBill.Taylor@Sun.COM 	uint32_t	cntrsel		:16;
40149517SBill.Taylor@Sun.COM 	uint32_t	portsel		:8;
40159517SBill.Taylor@Sun.COM 	uint32_t			:8;
40169517SBill.Taylor@Sun.COM 
40179517SBill.Taylor@Sun.COM 	uint32_t	portxmdiscard	:16;
40189517SBill.Taylor@Sun.COM 	uint32_t	portrcvswrelay	:16;
40199517SBill.Taylor@Sun.COM 
40209517SBill.Taylor@Sun.COM 	uint32_t	portrcvrem	:16;
40219517SBill.Taylor@Sun.COM 	uint32_t	portrcv		:16;
40229517SBill.Taylor@Sun.COM 
40239517SBill.Taylor@Sun.COM 	uint32_t	vl15drop	:16;
40249517SBill.Taylor@Sun.COM 	uint32_t			:16;
40259517SBill.Taylor@Sun.COM 
40269517SBill.Taylor@Sun.COM 	uint32_t	xsbuffovrun	:4;
40279517SBill.Taylor@Sun.COM 	uint32_t	locallinkint	:4;
40289517SBill.Taylor@Sun.COM 	uint32_t			:8;
40299517SBill.Taylor@Sun.COM 	uint32_t	portrcconstr	:8;
40309517SBill.Taylor@Sun.COM 	uint32_t	portxmconstr	:8;
40319517SBill.Taylor@Sun.COM 
40329517SBill.Taylor@Sun.COM 	uint32_t	portrcdata;
40339517SBill.Taylor@Sun.COM 
40349517SBill.Taylor@Sun.COM 	uint32_t	portxmdata;
40359517SBill.Taylor@Sun.COM 
40369517SBill.Taylor@Sun.COM 	uint32_t	portrcpkts;
40379517SBill.Taylor@Sun.COM 
40389517SBill.Taylor@Sun.COM 	uint32_t	portxmpkts;
40399517SBill.Taylor@Sun.COM 
40409517SBill.Taylor@Sun.COM 	uint32_t	reserved;
40419517SBill.Taylor@Sun.COM 
40429517SBill.Taylor@Sun.COM 	uint32_t	portxmwait;
40439517SBill.Taylor@Sun.COM };
40449517SBill.Taylor@Sun.COM #else	/* BIG ENDIAN */
40459517SBill.Taylor@Sun.COM struct hermon_hw_sm_perfcntr_s {
40469517SBill.Taylor@Sun.COM 	uint32_t			:8;
40479517SBill.Taylor@Sun.COM 	uint32_t	portsel		:8;
40489517SBill.Taylor@Sun.COM 	uint32_t	cntrsel		:16;
40499517SBill.Taylor@Sun.COM 
40509517SBill.Taylor@Sun.COM 	uint32_t	symerr		:16;
40519517SBill.Taylor@Sun.COM 	uint32_t	linkerrrec	:8;
40529517SBill.Taylor@Sun.COM 	uint32_t	linkdown	:8;
40539517SBill.Taylor@Sun.COM 
40549517SBill.Taylor@Sun.COM 	uint32_t	portrcv		:16;
40559517SBill.Taylor@Sun.COM 	uint32_t	portrcvrem	:16;
40569517SBill.Taylor@Sun.COM 
40579517SBill.Taylor@Sun.COM 	uint32_t	portrcvswrelay	:16;
40589517SBill.Taylor@Sun.COM 	uint32_t	portxmdiscard	:16;
40599517SBill.Taylor@Sun.COM 
40609517SBill.Taylor@Sun.COM 	uint32_t	portxmconstr	:8;
40619517SBill.Taylor@Sun.COM 	uint32_t	portrcconstr	:8;
40629517SBill.Taylor@Sun.COM 	uint32_t			:8;
40639517SBill.Taylor@Sun.COM 	uint32_t	locallinkint	:4;
40649517SBill.Taylor@Sun.COM 	uint32_t	xsbuffovrun	:4;
40659517SBill.Taylor@Sun.COM 
40669517SBill.Taylor@Sun.COM 	uint32_t			:16;
40679517SBill.Taylor@Sun.COM 	uint32_t	vl15drop	:16;
40689517SBill.Taylor@Sun.COM 
40699517SBill.Taylor@Sun.COM 	uint32_t	portxmdata;
40709517SBill.Taylor@Sun.COM 
40719517SBill.Taylor@Sun.COM 	uint32_t	portrcdata;
40729517SBill.Taylor@Sun.COM 
40739517SBill.Taylor@Sun.COM 	uint32_t	portxmpkts;
40749517SBill.Taylor@Sun.COM 
40759517SBill.Taylor@Sun.COM 	uint32_t	portrcpkts;
40769517SBill.Taylor@Sun.COM 
40779517SBill.Taylor@Sun.COM 	uint32_t	portxmwait;
40789517SBill.Taylor@Sun.COM 
40799517SBill.Taylor@Sun.COM 	uint32_t	reserved;
40809517SBill.Taylor@Sun.COM };
40819517SBill.Taylor@Sun.COM #endif
40829517SBill.Taylor@Sun.COM 
408311190SRamaswamy.Tummala@Sun.COM /*
408411190SRamaswamy.Tummala@Sun.COM  * Structure for getting the extended peformance counters from the HCA
408511190SRamaswamy.Tummala@Sun.COM  */
408611190SRamaswamy.Tummala@Sun.COM 
408711190SRamaswamy.Tummala@Sun.COM #ifdef _LITTLE_ENDIAN
408811190SRamaswamy.Tummala@Sun.COM struct hermon_hw_sm_extperfcntr_s {
408911190SRamaswamy.Tummala@Sun.COM 	uint32_t	rsvd;
409011190SRamaswamy.Tummala@Sun.COM 	uint32_t	cntrsel		:16;
409111190SRamaswamy.Tummala@Sun.COM 	uint32_t	portsel		:8;
409211190SRamaswamy.Tummala@Sun.COM 	uint32_t			:8;
409311190SRamaswamy.Tummala@Sun.COM 
409411190SRamaswamy.Tummala@Sun.COM 	uint64_t	portxmdata;
409511190SRamaswamy.Tummala@Sun.COM 
409611190SRamaswamy.Tummala@Sun.COM 	uint64_t	portrcdata;
409711190SRamaswamy.Tummala@Sun.COM 
409811190SRamaswamy.Tummala@Sun.COM 	uint64_t	portxmpkts;
409911190SRamaswamy.Tummala@Sun.COM 
410011190SRamaswamy.Tummala@Sun.COM 	uint64_t	portrcpkts;
410111190SRamaswamy.Tummala@Sun.COM 
410211190SRamaswamy.Tummala@Sun.COM 	uint64_t	portunicastxmpkts;
410311190SRamaswamy.Tummala@Sun.COM 
410411190SRamaswamy.Tummala@Sun.COM 	uint64_t	portunicastrcpkts;
410511190SRamaswamy.Tummala@Sun.COM 
410611190SRamaswamy.Tummala@Sun.COM 	uint64_t	portmulticastxmpkts;
410711190SRamaswamy.Tummala@Sun.COM 
410811190SRamaswamy.Tummala@Sun.COM 	uint64_t	portmulticastrcpkts;
410911190SRamaswamy.Tummala@Sun.COM };
411011190SRamaswamy.Tummala@Sun.COM #else	/* BIG ENDIAN */
411111190SRamaswamy.Tummala@Sun.COM struct hermon_hw_sm_extperfcntr_s {
411211190SRamaswamy.Tummala@Sun.COM 	uint32_t			:8;
411311190SRamaswamy.Tummala@Sun.COM 	uint32_t	portsel		:8;
411411190SRamaswamy.Tummala@Sun.COM 	uint32_t	cntrsel		:16;
411511190SRamaswamy.Tummala@Sun.COM 	uint32_t	rsvd;
411611190SRamaswamy.Tummala@Sun.COM 
411711190SRamaswamy.Tummala@Sun.COM 	uint64_t	portxmdata;
411811190SRamaswamy.Tummala@Sun.COM 
411911190SRamaswamy.Tummala@Sun.COM 	uint64_t	portrcdata;
412011190SRamaswamy.Tummala@Sun.COM 
412111190SRamaswamy.Tummala@Sun.COM 	uint64_t	portxmpkts;
412211190SRamaswamy.Tummala@Sun.COM 
412311190SRamaswamy.Tummala@Sun.COM 	uint64_t	portrcpkts;
412411190SRamaswamy.Tummala@Sun.COM 
412511190SRamaswamy.Tummala@Sun.COM 	uint64_t	portunicastxmpkts;
412611190SRamaswamy.Tummala@Sun.COM 
412711190SRamaswamy.Tummala@Sun.COM 	uint64_t	portunicastrcpkts;
412811190SRamaswamy.Tummala@Sun.COM 
412911190SRamaswamy.Tummala@Sun.COM 	uint64_t	portmulticastxmpkts;
413011190SRamaswamy.Tummala@Sun.COM 
413111190SRamaswamy.Tummala@Sun.COM 	uint64_t	portmulticastrcpkts;
413211190SRamaswamy.Tummala@Sun.COM };
413311190SRamaswamy.Tummala@Sun.COM #endif
413411190SRamaswamy.Tummala@Sun.COM 
41359517SBill.Taylor@Sun.COM 
41369517SBill.Taylor@Sun.COM /*
41379517SBill.Taylor@Sun.COM  * Hermon User Access Region (UAR)
41389517SBill.Taylor@Sun.COM  *
41399517SBill.Taylor@Sun.COM  *	JBDB :  writeup on the UAR for memfree
41409517SBill.Taylor@Sun.COM  *
41419517SBill.Taylor@Sun.COM  *	JBDB :  writeup on the structures
41429517SBill.Taylor@Sun.COM  *		UAR page
41439517SBill.Taylor@Sun.COM  *		DB register
41449517SBill.Taylor@Sun.COM  *		DB record
41459517SBill.Taylor@Sun.COM  *		UCE
41469517SBill.Taylor@Sun.COM  *
41479517SBill.Taylor@Sun.COM  * [es] and change it even further for hermon
41489517SBill.Taylor@Sun.COM  * the whole UAR and doorbell record (dbr) approach is changed again
41499517SBill.Taylor@Sun.COM  * from arbel, and needs commenting
41509517SBill.Taylor@Sun.COM  *
41519517SBill.Taylor@Sun.COM  * --  Tavor comment
41529517SBill.Taylor@Sun.COM  *
41539517SBill.Taylor@Sun.COM  *
41549517SBill.Taylor@Sun.COM  *    Tavor doorbells are each rung by writing to the doorbell registers that
41559517SBill.Taylor@Sun.COM  *    form a User Access Region (UAR).  A doorbell is a write-only hardware
41569517SBill.Taylor@Sun.COM  *    register which enables passing information from software to hardware
41579517SBill.Taylor@Sun.COM  *    with minimum software latency. A write operation from the host software
41589517SBill.Taylor@Sun.COM  *    to these doorbell registers passes information about the HCA resources
41599517SBill.Taylor@Sun.COM  *    and initiates processing of the doorbell data.  There are 6 types of
41609517SBill.Taylor@Sun.COM  *    doorbells in Tavor.
41619517SBill.Taylor@Sun.COM  *
41629517SBill.Taylor@Sun.COM  *    "Send Doorbell" for synchronizing the attachment of a WQE (or a chain
41639517SBill.Taylor@Sun.COM  *	of WQEs) to the send queue.
41649517SBill.Taylor@Sun.COM  *    "RD Send Doorbell" (Same as above, except for RD QPs) is not supported.
41659517SBill.Taylor@Sun.COM  *    "Receive Doorbell" for synchronizing the attachment of a WQE (or a chain
41669517SBill.Taylor@Sun.COM  *	of WQEs) to the receive queue.
41679517SBill.Taylor@Sun.COM  *    "CQ Doorbell" for updating the CQ consumer index and requesting
41689517SBill.Taylor@Sun.COM  * 	completion notifications.
41699517SBill.Taylor@Sun.COM  *    "EQ Doorbell" for updating the EQ consumer index, arming interrupt
41709517SBill.Taylor@Sun.COM  *	triggering, and disarming CQ notification requests.
41719517SBill.Taylor@Sun.COM  *    "InfiniBlast" (which would have enabled access to the "InfiniBlast
41729517SBill.Taylor@Sun.COM  *	buffer") is not supported.
41739517SBill.Taylor@Sun.COM  *
41749517SBill.Taylor@Sun.COM  *    Note: The tavor_hw_uar_t below is the container for all of the various
41759517SBill.Taylor@Sun.COM  *    doorbell types.  Below we first define several structures which make up
41769517SBill.Taylor@Sun.COM  *    the contents of those doorbell types.
41779517SBill.Taylor@Sun.COM  *
41789517SBill.Taylor@Sun.COM  *    Note also: The following structures are not #define'd with both little-
41799517SBill.Taylor@Sun.COM  *    endian and big-endian definitions.  This is because each doorbell type
41809517SBill.Taylor@Sun.COM  *    is not directly accessed except through a single ddi_put64() operation
41819517SBill.Taylor@Sun.COM  *    (see tavor_qp_send_doorbell, tavor_qp_recv_doorbell, tavor_cq_doorbell,
41829517SBill.Taylor@Sun.COM  *    or tavor_eq_doorbell)
41839517SBill.Taylor@Sun.COM  */
41849517SBill.Taylor@Sun.COM 
41859517SBill.Taylor@Sun.COM /*
41869517SBill.Taylor@Sun.COM  * Send doorbell register structure
41879517SBill.Taylor@Sun.COM  */
41889517SBill.Taylor@Sun.COM typedef struct hermon_hw_send_db_reg_s {
41899517SBill.Taylor@Sun.COM 	uint32_t			:32;
41909517SBill.Taylor@Sun.COM 
41919517SBill.Taylor@Sun.COM 	uint32_t	snd_q_num	:24;
41929517SBill.Taylor@Sun.COM 	uint32_t			:8;
41939517SBill.Taylor@Sun.COM } hermon_hw_send_db_reg_t;
41949517SBill.Taylor@Sun.COM 
41959517SBill.Taylor@Sun.COM #define	HERMON_QPSNDDB_QPN_SHIFT		0x8
41969517SBill.Taylor@Sun.COM 
41979517SBill.Taylor@Sun.COM /* Max descriptors per Hermon doorbell */
41989517SBill.Taylor@Sun.COM #define	HERMON_QP_MAXDESC_PER_DB		256
41999517SBill.Taylor@Sun.COM 
42009517SBill.Taylor@Sun.COM /*
42019517SBill.Taylor@Sun.COM  * CQ doorbell register structure
42029517SBill.Taylor@Sun.COM  */
42039517SBill.Taylor@Sun.COM typedef struct hermon_hw_cq_db_reg_s {
42049517SBill.Taylor@Sun.COM 	uint32_t			:2;
42059517SBill.Taylor@Sun.COM 	uint32_t	cmd_sn		:2;
42069517SBill.Taylor@Sun.COM 	uint32_t			:2;
42079517SBill.Taylor@Sun.COM 	uint32_t	cmd		:2;
42089517SBill.Taylor@Sun.COM 	uint32_t	cqn		:24;
42099517SBill.Taylor@Sun.COM 
42109517SBill.Taylor@Sun.COM 	uint32_t			:8;
42119517SBill.Taylor@Sun.COM 	/* consumer cntr of last polled completion */
42129517SBill.Taylor@Sun.COM 	uint32_t	cq_ci		:24;
42139517SBill.Taylor@Sun.COM } hermon_hw_cq_db_reg_t;
42149517SBill.Taylor@Sun.COM 
42159517SBill.Taylor@Sun.COM #define	HERMON_CQDB_CMD_SHIFT		0x18	/* dec 24 */
42169517SBill.Taylor@Sun.COM #define	HERMON_CQDB_CMDSN_SHIFT		0x1C	/* dec 28 */
42179517SBill.Taylor@Sun.COM 
42189517SBill.Taylor@Sun.COM 
42199517SBill.Taylor@Sun.COM #define	HERMON_CQDB_NOTIFY_CQ		0x02
42209517SBill.Taylor@Sun.COM #define	HERMON_CQDB_NOTIFY_CQ_SOLICIT	0x01
42219517SBill.Taylor@Sun.COM 
42229517SBill.Taylor@Sun.COM /* Default value for use in NOTIFY_CQ doorbell */
42239517SBill.Taylor@Sun.COM #define	HERMON_CQDB_DEFAULT_PARAM	0xFFFFFFFF
42249517SBill.Taylor@Sun.COM 
42259517SBill.Taylor@Sun.COM typedef struct hermon_hw_guest_eq_ci_s {	/* guest op eq consumer index */
42269517SBill.Taylor@Sun.COM 	uint32_t	armed		:1;
42279517SBill.Taylor@Sun.COM 	uint32_t			:7;
42289517SBill.Taylor@Sun.COM 	uint32_t	guestos_ci	:24;
42299517SBill.Taylor@Sun.COM 
42309517SBill.Taylor@Sun.COM 	uint32_t			:32;
42319517SBill.Taylor@Sun.COM } hermon_hw_guest_eq_ci_t;
42329517SBill.Taylor@Sun.COM 
42339517SBill.Taylor@Sun.COM 
42349517SBill.Taylor@Sun.COM 
42359517SBill.Taylor@Sun.COM /*
42369517SBill.Taylor@Sun.COM  * UAR page structure, containing all doorbell registers
42379517SBill.Taylor@Sun.COM  */
42389517SBill.Taylor@Sun.COM struct hermon_hw_uar_s {
42399517SBill.Taylor@Sun.COM 	uint32_t		rsrv0[4];
42409517SBill.Taylor@Sun.COM 
42419517SBill.Taylor@Sun.COM 	hermon_hw_send_db_reg_t	send;
42429517SBill.Taylor@Sun.COM 
42439517SBill.Taylor@Sun.COM 	uint32_t		rsrv1[2];
42449517SBill.Taylor@Sun.COM 
42459517SBill.Taylor@Sun.COM 	hermon_hw_cq_db_reg_t	cq;
42469517SBill.Taylor@Sun.COM 
42479517SBill.Taylor@Sun.COM 	uint32_t		rsrv2[502];	/* next is at offset 0x800 */
42489517SBill.Taylor@Sun.COM 
42499517SBill.Taylor@Sun.COM 	hermon_hw_guest_eq_ci_t	g_eq0;
42509517SBill.Taylor@Sun.COM 	hermon_hw_guest_eq_ci_t	g_eq1;
42519517SBill.Taylor@Sun.COM 	hermon_hw_guest_eq_ci_t	g_eq2;
42529517SBill.Taylor@Sun.COM 	hermon_hw_guest_eq_ci_t	g_eq3;
42539517SBill.Taylor@Sun.COM 
42549517SBill.Taylor@Sun.COM 	uint32_t		rsrv3[504];	/* end of page */
42559517SBill.Taylor@Sun.COM };
42569517SBill.Taylor@Sun.COM 
42579517SBill.Taylor@Sun.COM /*
42589517SBill.Taylor@Sun.COM  * QP (RQ, SRQ) doorbell record-specific data
42599517SBill.Taylor@Sun.COM  *	Note that this structure is NOT in ICM, but just kept in host memory
42609517SBill.Taylor@Sun.COM  *	and managed independently of PRM or other constraints.  Also, though
42619517SBill.Taylor@Sun.COM  *	the qp/srq doorbell need to be only 4 bytes, it is 8 bytes in memory for
42629517SBill.Taylor@Sun.COM  *	ease of management.  Hermon defines its usage in the QP chapter.
42639517SBill.Taylor@Sun.COM  */
42649517SBill.Taylor@Sun.COM typedef struct hermon_hw_qp_db_s {
42659517SBill.Taylor@Sun.COM 	uint32_t			:16;
42669517SBill.Taylor@Sun.COM 	uint32_t	rcv_wqe_cntr	:16;	/* wqe_counter */
42679517SBill.Taylor@Sun.COM 
42689517SBill.Taylor@Sun.COM 	uint32_t			:32;
42699517SBill.Taylor@Sun.COM } hermon_hw_qp_db_t;
42709517SBill.Taylor@Sun.COM 
42719517SBill.Taylor@Sun.COM /*
42729517SBill.Taylor@Sun.COM  * CQ (ARM and SET_CI) doorbell record-specific data
42739517SBill.Taylor@Sun.COM  *	See comment above re: QP doorbell.  This dbr is 8 bytes long, and its
42749517SBill.Taylor@Sun.COM  *	usage is defined in PRM chapter on Completion Queues
42759517SBill.Taylor@Sun.COM  */
42769517SBill.Taylor@Sun.COM typedef struct hermon_hw_cq_arm_db_s {
42779517SBill.Taylor@Sun.COM 	uint32_t			:8;
42789517SBill.Taylor@Sun.COM 	uint32_t	update_ci	:24;
42799517SBill.Taylor@Sun.COM 
42809517SBill.Taylor@Sun.COM 	uint32_t			:2;
42819517SBill.Taylor@Sun.COM 	/* sequence number of the doorbell ring % 4 */
42829517SBill.Taylor@Sun.COM 	uint32_t	cmd_sn		:2;
42839517SBill.Taylor@Sun.COM 	uint32_t			:1;
42849517SBill.Taylor@Sun.COM 	uint32_t	cmd		:3;	/* command */
42859517SBill.Taylor@Sun.COM 	uint32_t	cq_ci		:24;
42869517SBill.Taylor@Sun.COM } hermon_hw_cq_db_t;
42879517SBill.Taylor@Sun.COM 
42889517SBill.Taylor@Sun.COM #define	HERMON_CQ_DB_CMD_SOLICTED	0x01
42899517SBill.Taylor@Sun.COM #define	HERMON_CQ_DB_CMD_NEXT		0x02
42909517SBill.Taylor@Sun.COM 
42919517SBill.Taylor@Sun.COM 
42929517SBill.Taylor@Sun.COM /*
42939517SBill.Taylor@Sun.COM  * Hermon Blue Flame (BF)
42949517SBill.Taylor@Sun.COM  *	Hermon has the ability to do a low-latency write of successive WQEs
42959517SBill.Taylor@Sun.COM  * 	for the HCA.  This utilizes part of the memory area behind the
42969517SBill.Taylor@Sun.COM  *	same BAR as the UAR page (see above) - half the area is devoted to
42979517SBill.Taylor@Sun.COM  *	UAR pages, the other half to BlueFlame (though in fairness, the return
42989517SBill.Taylor@Sun.COM  * 	information from QUERY_DEV_CAP should be consulted _in case_ they ever
42999517SBill.Taylor@Sun.COM  *	decide to change it.
43009517SBill.Taylor@Sun.COM  *
43019517SBill.Taylor@Sun.COM  *	We define the structures to access them below.
43029517SBill.Taylor@Sun.COM  */
43039517SBill.Taylor@Sun.COM 
43049517SBill.Taylor@Sun.COM 
43059517SBill.Taylor@Sun.COM /*
43069517SBill.Taylor@Sun.COM  * Hermon Send Work Queue Element (WQE)
43079517SBill.Taylor@Sun.COM  *    A Hermon Send WQE is built of the following segments, each of which is a
43089517SBill.Taylor@Sun.COM  *    multiple of 16 bytes.  Note: Each individual WQE may contain only a
43099517SBill.Taylor@Sun.COM  *    subset of these segments described below (according to the operation type
43109517SBill.Taylor@Sun.COM  *    and transport type of the QP).
43119517SBill.Taylor@Sun.COM  *
43129517SBill.Taylor@Sun.COM  *    The first 16 bytes of ever WQE are formed from the "Ctrl" segment.
43139517SBill.Taylor@Sun.COM  *    This segment contains the address of the next WQE to be executed and the
43149517SBill.Taylor@Sun.COM  *    information required in order to allocate the resources to execute the
43159517SBill.Taylor@Sun.COM  *    next WQE.  The "Ctrl" part of this segment contains the control
43169517SBill.Taylor@Sun.COM  *    information required to execute the WQE, including the opcode and other
43179517SBill.Taylor@Sun.COM  *    control information.
43189517SBill.Taylor@Sun.COM  *    The "Datagram" segment contains address information required in order to
43199517SBill.Taylor@Sun.COM  *    form a UD message.
43209517SBill.Taylor@Sun.COM  *    The "Bind" segment contains the parameters required for a Bind Memory
43219517SBill.Taylor@Sun.COM  *    Window operation.
43229517SBill.Taylor@Sun.COM  *    The "Remote Address" segment is present only in RDMA or Atomic WQEs and
43239517SBill.Taylor@Sun.COM  *    specifies remote virtual addresses and RKey, respectively.  Length of
43249517SBill.Taylor@Sun.COM  *    the remote access is calculated from the scatter/gather list (for
43259517SBill.Taylor@Sun.COM  *    RDMA-write/RDMA-read) or set to eight (for Atomic).
43269517SBill.Taylor@Sun.COM  *    The "Atomic" segment is present only in Atomic WQEs and specifies
43279517SBill.Taylor@Sun.COM  *    Swap/Add and Compare data.
43289517SBill.Taylor@Sun.COM  *
43299517SBill.Taylor@Sun.COM  *    Note: The following structures are not #define'd with both little-endian
43309517SBill.Taylor@Sun.COM  *    and big-endian definitions.  This is because their individual fields are
43319517SBill.Taylor@Sun.COM  *    not directly accessed except through macros defined below.
43329517SBill.Taylor@Sun.COM  */
43339517SBill.Taylor@Sun.COM 
43349517SBill.Taylor@Sun.COM 
43359517SBill.Taylor@Sun.COM struct hermon_hw_snd_wqe_ctrl_s {
43369517SBill.Taylor@Sun.COM 	uint32_t	owner		:1;
4337*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
4338*12965SWilliam.Taylor@Oracle.COM 	uint32_t	nec		:1;
4339*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:5;
4340*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fceof		:8;
4341*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:9;
4342*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rr		:1;
4343*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
43449517SBill.Taylor@Sun.COM 	uint32_t	opcode		:5;
4345*12965SWilliam.Taylor@Oracle.COM 
4346*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan		:16;
4347*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
4348*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cv		:1;
4349*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
43509517SBill.Taylor@Sun.COM 	uint32_t	fence		:1;
4351*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ds		:6;	/* WQE size in octowords */
4352*12965SWilliam.Taylor@Oracle.COM 
4353*12965SWilliam.Taylor@Oracle.COM 	/*
4354*12965SWilliam.Taylor@Oracle.COM 	 * XRC remote buffer if impl
4355*12965SWilliam.Taylor@Oracle.COM 	 * XRC 23:0, or DMAC 47:32& 8 bits of pad
4356*12965SWilliam.Taylor@Oracle.COM 	 */
4357*12965SWilliam.Taylor@Oracle.COM 	uint32_t	xrc_rem_buf	:24;
43589517SBill.Taylor@Sun.COM 	uint32_t	so		:1;
4359*12965SWilliam.Taylor@Oracle.COM 	uint32_t	fcrc		:1;	/* fc crc calc */
43609517SBill.Taylor@Sun.COM 	uint32_t	tcp_udp		:1;	/* Checksumming */
43619517SBill.Taylor@Sun.COM 	uint32_t	ip		:1;	/* Checksumming */
43629517SBill.Taylor@Sun.COM 	uint32_t	cq_gen		:2;	/* 00=no cqe, 11= gen cqe */
4363*12965SWilliam.Taylor@Oracle.COM 	/* s-bit set means solicit bit in last packet */
43649517SBill.Taylor@Sun.COM 	uint32_t	s		:1;
43659517SBill.Taylor@Sun.COM 	uint32_t	force_lb	:1;
43669517SBill.Taylor@Sun.COM 
4367*12965SWilliam.Taylor@Oracle.COM 	/*
4368*12965SWilliam.Taylor@Oracle.COM 	 * immediate OR invalidation key OR DMAC 31:0 depending
4369*12965SWilliam.Taylor@Oracle.COM 	 */
43709517SBill.Taylor@Sun.COM 	uint32_t	immediate	:32;
43719517SBill.Taylor@Sun.COM };
43729517SBill.Taylor@Sun.COM 
43739517SBill.Taylor@Sun.COM struct hermon_hw_srq_wqe_next_s {
43749517SBill.Taylor@Sun.COM 	uint32_t			:16;
43759517SBill.Taylor@Sun.COM 	uint32_t	next_wqe_idx	:16;
43769517SBill.Taylor@Sun.COM 
43779517SBill.Taylor@Sun.COM 	uint32_t	rsvd[3];
43789517SBill.Taylor@Sun.COM };
43799517SBill.Taylor@Sun.COM 
43809517SBill.Taylor@Sun.COM 
4381*12965SWilliam.Taylor@Oracle.COM struct hermonw_hw_fcp3_ctrl_s {
4382*12965SWilliam.Taylor@Oracle.COM 	uint32_t	owner		:1;
4383*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
4384*12965SWilliam.Taylor@Oracle.COM 	uint32_t	nec		:1;
4385*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:24;
4386*12965SWilliam.Taylor@Oracle.COM 	uint32_t	opcode		:5;
4387*12965SWilliam.Taylor@Oracle.COM 
4388*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:24;
4389*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sit		:1;
4390*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
4391*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ds		:6;
4392*12965SWilliam.Taylor@Oracle.COM 
4393*12965SWilliam.Taylor@Oracle.COM 	uint32_t	seq_id		:8;
4394*12965SWilliam.Taylor@Oracle.COM 	uint32_t	info		:4;
4395*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:3;
4396*12965SWilliam.Taylor@Oracle.COM 	uint32_t	ls		:1;
4397*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
4398*12965SWilliam.Taylor@Oracle.COM 	uint32_t	so		:1;
4399*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:3;
4400*12965SWilliam.Taylor@Oracle.COM 	uint32_t	cq_gen		:2;
4401*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
4402*12965SWilliam.Taylor@Oracle.COM 
4403*12965SWilliam.Taylor@Oracle.COM 	uint32_t	param		:32;
4404*12965SWilliam.Taylor@Oracle.COM };
4405*12965SWilliam.Taylor@Oracle.COM 
4406*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_fcp3_init_s {
4407*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
4408*12965SWilliam.Taylor@Oracle.COM 	uint32_t	pe		:1;
4409*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:23;
4410*12965SWilliam.Taylor@Oracle.COM 
4411*12965SWilliam.Taylor@Oracle.COM 	uint32_t	csctl_prior	:8;
4412*12965SWilliam.Taylor@Oracle.COM 	uint32_t	seqid_tx	:8;
4413*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:6;
4414*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mtu		:10;
4415*12965SWilliam.Taylor@Oracle.COM 
4416*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rem_id		:24;
4417*12965SWilliam.Taylor@Oracle.COM 	uint32_t	abort		:2;
4418*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
4419*12965SWilliam.Taylor@Oracle.COM 	uint32_t	op		:2;
4420*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
4421*12965SWilliam.Taylor@Oracle.COM 	uint32_t	org		:1;
4422*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:1;
4423*12965SWilliam.Taylor@Oracle.COM 
4424*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rem_exch	:16;
4425*12965SWilliam.Taylor@Oracle.COM 	uint32_t	loc_exch_idx	:16;
4426*12965SWilliam.Taylor@Oracle.COM };
4427*12965SWilliam.Taylor@Oracle.COM 
4428*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_fcmd_o_enet_s {
4429*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:4;
4430*12965SWilliam.Taylor@Oracle.COM 	uint32_t	stat_rate	:4;
4431*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:24;
4432*12965SWilliam.Taylor@Oracle.COM 
4433*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
4434*12965SWilliam.Taylor@Oracle.COM 
4435*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:16;
4436*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dmac_hi		:16;
4437*12965SWilliam.Taylor@Oracle.COM 
4438*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dmac_lo		:32;
4439*12965SWilliam.Taylor@Oracle.COM };
4440*12965SWilliam.Taylor@Oracle.COM 
4441*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_fcmd_o_ib_s {
4442*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:32;
4443*12965SWilliam.Taylor@Oracle.COM 
4444*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
4445*12965SWilliam.Taylor@Oracle.COM 	uint32_t	grh		:1;
4446*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:7;
4447*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rlid		:16;
4448*12965SWilliam.Taylor@Oracle.COM 
4449*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:20;
4450*12965SWilliam.Taylor@Oracle.COM 	uint32_t	stat_rate	:4;
4451*12965SWilliam.Taylor@Oracle.COM 	uint32_t	hop_limit	:8;
4452*12965SWilliam.Taylor@Oracle.COM 
4453*12965SWilliam.Taylor@Oracle.COM 	uint32_t	sl		:4;
4454*12965SWilliam.Taylor@Oracle.COM 	uint32_t	tclass		:8;
4455*12965SWilliam.Taylor@Oracle.COM 	uint32_t	flow_label	:20;
4456*12965SWilliam.Taylor@Oracle.COM 
4457*12965SWilliam.Taylor@Oracle.COM 	uint64_t	rgid_hi;
4458*12965SWilliam.Taylor@Oracle.COM 
4459*12965SWilliam.Taylor@Oracle.COM 	uint64_t	rgid_lo;
4460*12965SWilliam.Taylor@Oracle.COM 
4461*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:8;
4462*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rqp		:24;
4463*12965SWilliam.Taylor@Oracle.COM 
4464*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv[3];
4465*12965SWilliam.Taylor@Oracle.COM };
4466*12965SWilliam.Taylor@Oracle.COM 
4467*12965SWilliam.Taylor@Oracle.COM 
4468*12965SWilliam.Taylor@Oracle.COM 
4469*12965SWilliam.Taylor@Oracle.COM 
4470*12965SWilliam.Taylor@Oracle.COM 
44719517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_FENCE_MASK	0x40
44729517SBill.Taylor@Sun.COM 
44739517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_NOP	0x00
44749517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_SND_INV 0x01
44759517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_RDMAW	0x8
44769517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_RDMAWI	0x9
44779517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_SEND	0xA
44789517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_SENDI	0xB
4479*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_SEND_NOPCODE_INIT_AND_SEND 0xD
44809517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_LSO	0xE
44819517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_RDMAR	0x10
44829517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_ATMCS	0x11
44839517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_ATMFA	0x12
44849517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_ATMCSE 0x14
44859517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_ATMFAE 0x15
44869517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_BIND	0x18
44879517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_FRWR	0x19
44889517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_LCL_INV 0x1B
44899517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_NOPCODE_CONFIG 0x1F		/* for ccq only */
44909517SBill.Taylor@Sun.COM 
4491*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_FCP_OPCODE_INIT_AND_SEND 0xD
4492*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_FCP_OPCODE_INIT_FEXCH  0xC
4493*12965SWilliam.Taylor@Oracle.COM 
44949517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_SIGNALED_MASK	0x0000000C00000000ull
44959517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_SOLICIT_MASK	0x0000000200000000ull
44969517SBill.Taylor@Sun.COM #define	HERMON_WQE_SEND_IMMEDIATE_MASK	0x0000000100000000ull
44979517SBill.Taylor@Sun.COM 
44989517SBill.Taylor@Sun.COM struct hermon_hw_snd_wqe_ud_s {
44999517SBill.Taylor@Sun.COM 	struct hermon_hw_udav_s		ud_addr_v;
45009517SBill.Taylor@Sun.COM 
45019517SBill.Taylor@Sun.COM 	uint32_t			:8;
45029517SBill.Taylor@Sun.COM 	uint32_t	dest_qp		:24;
4503*12965SWilliam.Taylor@Oracle.COM 
45049517SBill.Taylor@Sun.COM 	uint32_t	qkey		:32;
4505*12965SWilliam.Taylor@Oracle.COM 
4506*12965SWilliam.Taylor@Oracle.COM 	uint32_t	vlan		:16;
4507*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dmac_hi		:16;
4508*12965SWilliam.Taylor@Oracle.COM 
4509*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dmac_lo		:32;
45109517SBill.Taylor@Sun.COM };
45119517SBill.Taylor@Sun.COM #define	HERMON_WQE_SENDHDR_UD_AV_MASK	0xFFFFFFFFFFFFFFE0ull
45129517SBill.Taylor@Sun.COM #define	HERMON_WQE_SENDHDR_UD_DQPN_MASK	0xFFFFFF
45139517SBill.Taylor@Sun.COM 
45149517SBill.Taylor@Sun.COM struct hermon_hw_snd_wqe_bind_s {
45159517SBill.Taylor@Sun.COM 	uint32_t	ae		:1;
45169517SBill.Taylor@Sun.COM 	uint32_t	rw		:1;
45179517SBill.Taylor@Sun.COM 	uint32_t	rr		:1;
45189517SBill.Taylor@Sun.COM 	uint32_t			:3;
45199517SBill.Taylor@Sun.COM 	uint32_t	l_64		:1;
45209517SBill.Taylor@Sun.COM 	uint32_t			:25;
45219517SBill.Taylor@Sun.COM 
45229517SBill.Taylor@Sun.COM 	uint32_t	win_t		:1;
45239517SBill.Taylor@Sun.COM 	uint32_t	z_base		:1;
45249517SBill.Taylor@Sun.COM 	uint32_t			:30;
45259517SBill.Taylor@Sun.COM 
45269517SBill.Taylor@Sun.COM 	uint32_t	new_rkey;
45279517SBill.Taylor@Sun.COM 	uint32_t	reg_lkey;
45289517SBill.Taylor@Sun.COM 	uint64_t	addr;
45299517SBill.Taylor@Sun.COM 	uint64_t	len;
45309517SBill.Taylor@Sun.COM };
45319517SBill.Taylor@Sun.COM #define	HERMON_WQE_SENDHDR_BIND_ATOM	0x8000000000000000ull
45329517SBill.Taylor@Sun.COM #define	HERMON_WQE_SENDHDR_BIND_WR	0x4000000000000000ull
45339517SBill.Taylor@Sun.COM #define	HERMON_WQE_SENDHDR_BIND_RD	0x2000000000000000ull
45349517SBill.Taylor@Sun.COM 
4535*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_snd_wqe_lso_s {
4536*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mss		:16;
4537*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:6;
4538*12965SWilliam.Taylor@Oracle.COM 	uint32_t	hdr_size	:10;
4539*12965SWilliam.Taylor@Oracle.COM };
4540*12965SWilliam.Taylor@Oracle.COM 
45419517SBill.Taylor@Sun.COM struct hermon_hw_snd_wqe_remaddr_s {
45429517SBill.Taylor@Sun.COM 	uint64_t	vaddr;
45439517SBill.Taylor@Sun.COM 	uint32_t	rkey;
45449517SBill.Taylor@Sun.COM 	uint32_t			:32;
45459517SBill.Taylor@Sun.COM };
45469517SBill.Taylor@Sun.COM 
45479517SBill.Taylor@Sun.COM struct hermon_hw_snd_wqe_atomic_s {
45489517SBill.Taylor@Sun.COM 	uint64_t	swap_add;
45499517SBill.Taylor@Sun.COM 	uint64_t	compare;
45509517SBill.Taylor@Sun.COM };
45519517SBill.Taylor@Sun.COM 
45529517SBill.Taylor@Sun.COM struct hermon_hw_snd_wqe_atomic_ext_s {
45539517SBill.Taylor@Sun.COM 	uint64_t	swap_add;
45549517SBill.Taylor@Sun.COM 	uint64_t	compare;
45559517SBill.Taylor@Sun.COM 	uint64_t	swapmask;
45569517SBill.Taylor@Sun.COM 	uint64_t	cmpmask;
45579517SBill.Taylor@Sun.COM };
45589517SBill.Taylor@Sun.COM 
45599517SBill.Taylor@Sun.COM struct hermon_hw_snd_wqe_local_inv_s {
45609517SBill.Taylor@Sun.COM 	uint32_t			:6;
45619517SBill.Taylor@Sun.COM 	uint32_t	atc_shoot	:1;
45629517SBill.Taylor@Sun.COM 	uint32_t			:25;
45639517SBill.Taylor@Sun.COM 
45649517SBill.Taylor@Sun.COM 	uint32_t			:32;
45659517SBill.Taylor@Sun.COM 
45669517SBill.Taylor@Sun.COM 	uint32_t	mkey;
45679517SBill.Taylor@Sun.COM 
4568*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv0;
4569*12965SWilliam.Taylor@Oracle.COM 
4570*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv1;
45719517SBill.Taylor@Sun.COM 	uint32_t			:25;
45729517SBill.Taylor@Sun.COM 	uint32_t	guest_id	:7;	/* for atc shootdown */
45739517SBill.Taylor@Sun.COM 
45749517SBill.Taylor@Sun.COM 	uint32_t	p_addrh;
45759517SBill.Taylor@Sun.COM 	uint32_t	p_addrl		:23;
45769517SBill.Taylor@Sun.COM 	uint32_t			:9;
45779517SBill.Taylor@Sun.COM };
45789517SBill.Taylor@Sun.COM 
4579*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_snd_rem_addr_s {
4580*12965SWilliam.Taylor@Oracle.COM 	uint64_t	rem_vaddr;
4581*12965SWilliam.Taylor@Oracle.COM 
4582*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rkey;
4583*12965SWilliam.Taylor@Oracle.COM 	uint32_t	rsrv;
4584*12965SWilliam.Taylor@Oracle.COM };
4585*12965SWilliam.Taylor@Oracle.COM 
4586*12965SWilliam.Taylor@Oracle.COM 
45879517SBill.Taylor@Sun.COM struct hermon_hw_snd_wqe_frwr_s {
45889517SBill.Taylor@Sun.COM 	uint32_t	rem_atomic	:1;
45899517SBill.Taylor@Sun.COM 	uint32_t	rem_write	:1;
45909517SBill.Taylor@Sun.COM 	uint32_t	rem_read	:1;
45919517SBill.Taylor@Sun.COM 	uint32_t	loc_write	:1;
45929517SBill.Taylor@Sun.COM 	uint32_t	loc_read	:1;
45939517SBill.Taylor@Sun.COM 	uint32_t	fbo_en		:1;
45949517SBill.Taylor@Sun.COM 	uint32_t	len_64		:1;
4595*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:2;
4596*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dif		:1;	/* FCoIB */
45979517SBill.Taylor@Sun.COM 	uint32_t	bind_en		:1;
45989517SBill.Taylor@Sun.COM 	uint32_t	blk_pg_mode	:1;
45999517SBill.Taylor@Sun.COM 	uint32_t	mtt_rep		:4;
46009517SBill.Taylor@Sun.COM 	uint32_t			:16;
46019517SBill.Taylor@Sun.COM 
46029517SBill.Taylor@Sun.COM 	uint32_t	mkey;		/* swapped w/ addrh relative to arbel */
46039517SBill.Taylor@Sun.COM 
4604*12965SWilliam.Taylor@Oracle.COM 	uint64_t	pbl_addr;
46059517SBill.Taylor@Sun.COM 
46069517SBill.Taylor@Sun.COM 	uint64_t	start_addr;
46079517SBill.Taylor@Sun.COM 
46089517SBill.Taylor@Sun.COM 	uint64_t	reg_len;	/* w/ len_64 allows 65 bits of length */
46099517SBill.Taylor@Sun.COM 
46109517SBill.Taylor@Sun.COM 	uint32_t			:11;
46119517SBill.Taylor@Sun.COM 	uint32_t	fbo		:21;
46129517SBill.Taylor@Sun.COM 
46139517SBill.Taylor@Sun.COM 	uint32_t			:11;
46149517SBill.Taylor@Sun.COM 	uint32_t	pge_blk_sz	:21;
46159517SBill.Taylor@Sun.COM 
46169517SBill.Taylor@Sun.COM 	uint32_t	rsrv0[2];
46179517SBill.Taylor@Sun.COM };
46189517SBill.Taylor@Sun.COM 
4619*12965SWilliam.Taylor@Oracle.COM struct hermon_hw_snd_wqe_frwr_ext_s {
4620*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dif_in_mem	:1;
4621*12965SWilliam.Taylor@Oracle.COM 	uint32_t	dif_on_wire	:1;
4622*12965SWilliam.Taylor@Oracle.COM 	uint32_t	valid_ref	:1;
4623*12965SWilliam.Taylor@Oracle.COM 	uint32_t	valid_crc	:1;
4624*12965SWilliam.Taylor@Oracle.COM 	uint32_t	repl_ref_tag	:1;
4625*12965SWilliam.Taylor@Oracle.COM 	uint32_t	repl_app_tag	:1;
4626*12965SWilliam.Taylor@Oracle.COM 	uint32_t			:10;
4627*12965SWilliam.Taylor@Oracle.COM 	uint32_t	app_mask	:16;
4628*12965SWilliam.Taylor@Oracle.COM 
4629*12965SWilliam.Taylor@Oracle.COM 	uint32_t	wire_app_tag	:16;
4630*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mem_app_tag	:16;
4631*12965SWilliam.Taylor@Oracle.COM 
4632*12965SWilliam.Taylor@Oracle.COM 	uint32_t	wire_ref_tag_base;
4633*12965SWilliam.Taylor@Oracle.COM 
4634*12965SWilliam.Taylor@Oracle.COM 	uint32_t	mem_ref_tag_base;
4635*12965SWilliam.Taylor@Oracle.COM };
4636*12965SWilliam.Taylor@Oracle.COM 
4637*12965SWilliam.Taylor@Oracle.COM 
46389517SBill.Taylor@Sun.COM 
46399517SBill.Taylor@Sun.COM /*
46409517SBill.Taylor@Sun.COM  * Hermon "MLX transport" Work Queue Element (WQE)
46419517SBill.Taylor@Sun.COM  *    The format of the MLX WQE is similar to that of the Send WQE (above)
46429517SBill.Taylor@Sun.COM  *    with the following exceptions.  MLX WQEs are used for sending MADs on
46439517SBill.Taylor@Sun.COM  *    special QPs 0 and 1.  Everything following the "Next/Ctrl" header
46449517SBill.Taylor@Sun.COM  *    (defined below) consists of scatter-gather list entries.  The contents
46459517SBill.Taylor@Sun.COM  *    of these SGLs (also defined below) will be put on the wire exactly as
46469517SBill.Taylor@Sun.COM  *    they appear in the buffers.  In addition, the VCRC and the ICRC of each
46479517SBill.Taylor@Sun.COM  *    sent packet can be modified by changing values in the following header
46489517SBill.Taylor@Sun.COM  *    or in the payload of the packet itself.
46499517SBill.Taylor@Sun.COM  */
46509517SBill.Taylor@Sun.COM 
46519517SBill.Taylor@Sun.COM 
46529517SBill.Taylor@Sun.COM struct hermon_hw_mlx_wqe_nextctrl_s {
46539517SBill.Taylor@Sun.COM 	uint32_t	owner		:1;
46549517SBill.Taylor@Sun.COM 	uint32_t			:23;
46559517SBill.Taylor@Sun.COM 	uint32_t			:3;
46569517SBill.Taylor@Sun.COM 	uint32_t	opcode		:5;	/* is 0x0A (send) for MLX */
46579517SBill.Taylor@Sun.COM 
46589517SBill.Taylor@Sun.COM 	uint32_t			:26;
46599517SBill.Taylor@Sun.COM 	uint32_t	ds		:6;	/* WQE size in octowords */
46609517SBill.Taylor@Sun.COM 
46619517SBill.Taylor@Sun.COM 	uint32_t			:14;
46629517SBill.Taylor@Sun.COM 	uint32_t	vl15		:1;
46639517SBill.Taylor@Sun.COM 	uint32_t	slr		:1;
46649517SBill.Taylor@Sun.COM 	uint32_t	max_srate	:4;
46659517SBill.Taylor@Sun.COM 	uint32_t	sl		:4;
46669517SBill.Taylor@Sun.COM 	uint32_t			:3;	/* FCoIB usage */
46679517SBill.Taylor@Sun.COM 	uint32_t	icrc		:1;	/* 1==don't replace icrc fld */
46689517SBill.Taylor@Sun.COM 	uint32_t	cq_gen		:2;	/* 00= no cqe, 11==cqe */
46699517SBill.Taylor@Sun.COM 	uint32_t			:1;
46709517SBill.Taylor@Sun.COM 	uint32_t	force_lb	:1;
46719517SBill.Taylor@Sun.COM 
46729517SBill.Taylor@Sun.COM 	uint32_t	rlid		:16;
46739517SBill.Taylor@Sun.COM 	uint32_t			:16;
46749517SBill.Taylor@Sun.COM };
46759517SBill.Taylor@Sun.COM 
46769517SBill.Taylor@Sun.COM 
46779517SBill.Taylor@Sun.COM #define	HERMON_WQE_MLXHDR_VL15_MASK	0x0002000000000000ull
46789517SBill.Taylor@Sun.COM #define	HERMON_WQE_MLXHDR_SLR_MASK	0x0001000000000000ull
46799517SBill.Taylor@Sun.COM #define	HERMON_WQE_MLXHDR_SRATE_SHIFT	44
46809517SBill.Taylor@Sun.COM #define	HERMON_WQE_MLXHDR_SL_SHIFT	40
46819517SBill.Taylor@Sun.COM #define	HERMON_WQE_MLXHDR_SIGNALED_MASK	0x0000000800000000ull
46829517SBill.Taylor@Sun.COM #define	HERMON_WQE_MLXHDR_RLID_SHIFT	16
46839517SBill.Taylor@Sun.COM 
46849517SBill.Taylor@Sun.COM 
46859517SBill.Taylor@Sun.COM /*
46869517SBill.Taylor@Sun.COM  * Hermon Receive Work Queue Element (WQE)
46879517SBill.Taylor@Sun.COM  *    Unlike the Send WQE, the Receive WQE is built ONLY of 16-byte segments. A
46889517SBill.Taylor@Sun.COM  *    "Next/Ctrl" segment is no longer needed, because of the fixed
46899517SBill.Taylor@Sun.COM  *	receive queue stride (RQ.STRIDE).  It contains just
46909517SBill.Taylor@Sun.COM  *    some number of scatter list entries for the incoming message.
46919517SBill.Taylor@Sun.COM  *
46929517SBill.Taylor@Sun.COM  *    The format of the scatter-gather list entries is shown below.  For
46939517SBill.Taylor@Sun.COM  *    Receive WQEs the "inline_data" field must be cleared (i.e. data segments
46949517SBill.Taylor@Sun.COM  *    cannot contain inline data).
46959517SBill.Taylor@Sun.COM  */
46969517SBill.Taylor@Sun.COM 
46979517SBill.Taylor@Sun.COM 
46989517SBill.Taylor@Sun.COM struct hermon_hw_wqe_sgl_s {
46999517SBill.Taylor@Sun.COM 	uint32_t	inline_data	:1;
47009517SBill.Taylor@Sun.COM 	uint32_t	byte_cnt	:31;
47019517SBill.Taylor@Sun.COM 
47029517SBill.Taylor@Sun.COM 	uint32_t	lkey;
47039517SBill.Taylor@Sun.COM 
47049517SBill.Taylor@Sun.COM 	uint64_t	addr;
47059517SBill.Taylor@Sun.COM };
47069517SBill.Taylor@Sun.COM #define	HERMON_WQE_SGL_BYTE_CNT_MASK	0x7FFFFFFF
47079517SBill.Taylor@Sun.COM #define	HERMON_WQE_SGL_INLINE_MASK	0x80000000
47089517SBill.Taylor@Sun.COM 
47099517SBill.Taylor@Sun.COM /*
47109517SBill.Taylor@Sun.COM  * The following defines are used when building descriptors for special QP
47119517SBill.Taylor@Sun.COM  * work requests (i.e. MLX transport WQEs).  Note: Because Hermon MLX transport
47129517SBill.Taylor@Sun.COM  * requires the driver to build actual IB packet headers, we use these defines
47139517SBill.Taylor@Sun.COM  * for the most common fields in those headers.
47149517SBill.Taylor@Sun.COM  */
47159517SBill.Taylor@Sun.COM 
47169517SBill.Taylor@Sun.COM 
47179517SBill.Taylor@Sun.COM #define	HERMON_MLX_VL15_LVER		0xF0000000
47189517SBill.Taylor@Sun.COM #define	HERMON_MLX_VL0_LVER		0x00000000
47199517SBill.Taylor@Sun.COM #define	HERMON_MLX_IPVER_TC_FLOW	0x60000000
47209517SBill.Taylor@Sun.COM #define	HERMON_MLX_TC_SHIFT		20
47219517SBill.Taylor@Sun.COM #define	HERMON_MLX_DEF_PKEY		0xFFFF
47229517SBill.Taylor@Sun.COM #define	HERMON_MLX_GSI_QKEY		0x80010000
47239517SBill.Taylor@Sun.COM #define	HERMON_MLX_UDSEND_OPCODE	0x64000000
47249517SBill.Taylor@Sun.COM #define	HERMON_MLX_DQPN_MASK		0xFFFFFF
47259517SBill.Taylor@Sun.COM 
47269517SBill.Taylor@Sun.COM /*
47279517SBill.Taylor@Sun.COM  * The following macros are used for building each of the individual
47289517SBill.Taylor@Sun.COM  * segments that can make up a Hermon WQE.  Note: We try not to use the
47299517SBill.Taylor@Sun.COM  * structures (with their associated bitfields) here, instead opting to
47309517SBill.Taylor@Sun.COM  * build and put 64-bit or 32-bit chunks to the WQEs as appropriate,
47319517SBill.Taylor@Sun.COM  * primarily because using the bitfields appears to force more read-modify-
47329517SBill.Taylor@Sun.COM  * write operations.
47339517SBill.Taylor@Sun.COM  *
47349517SBill.Taylor@Sun.COM  *    HERMON_WQE_BUILD_UD		- Builds Unreliable Datagram Segment
47359517SBill.Taylor@Sun.COM  *
47369517SBill.Taylor@Sun.COM  *    HERMON_WQE_BUILD_REMADDR		- Builds Remote Address Segment using
47379517SBill.Taylor@Sun.COM  *					    RDMA info from the work request
47389517SBill.Taylor@Sun.COM  *    HERMON_WQE_BUILD_RC_ATOMIC_REMADDR	- Builds Remote Address Segment
47399517SBill.Taylor@Sun.COM  *					    for RC Atomic work requests
47409517SBill.Taylor@Sun.COM  *    HERMON_WQE_BUILD_ATOMIC		- Builds Atomic Segment using atomic
47419517SBill.Taylor@Sun.COM  *					    info from the work request
47429517SBill.Taylor@Sun.COM  *    HERMON_WQE_BUILD_BIND		- Builds the Bind Memory Window
47439517SBill.Taylor@Sun.COM  *					    Segment using bind info from the
47449517SBill.Taylor@Sun.COM  *					    work request
47459517SBill.Taylor@Sun.COM  *    HERMON_WQE_BUILD_DATA_SEG		- Builds the individual Data Segments
47469517SBill.Taylor@Sun.COM  *					    for Send, Receive, and MLX WQEs
47479517SBill.Taylor@Sun.COM  *    HERMON_WQE_BUILD_INLINE		- Builds an "inline" Data Segment
47489517SBill.Taylor@Sun.COM  *					    (primarily for MLX transport)
47499517SBill.Taylor@Sun.COM  *    HERMON_WQE_BUILD_INLINE_ICRC	- Also builds an "inline" Data Segment
47509517SBill.Taylor@Sun.COM  *					    (but used primarily in the ICRC
47519517SBill.Taylor@Sun.COM  *					    portion of MLX transport WQEs)
47529517SBill.Taylor@Sun.COM  *    HERMON_WQE_LINKNEXT		- Links the current WQE to the
47539517SBill.Taylor@Sun.COM  *					    previous one
47549517SBill.Taylor@Sun.COM  *    HERMON_WQE_LINKFIRST		- Links the first WQE on the current
47559517SBill.Taylor@Sun.COM  *					    chain to the previous WQE
47569517SBill.Taylor@Sun.COM  *    HERMON_WQE_BUILD_MLX_LRH		- Builds the inline LRH header for
47579517SBill.Taylor@Sun.COM  *					    MLX transport MADs
47589517SBill.Taylor@Sun.COM  *    HERMON_WQE_BUILD_MLX_GRH		- Builds the inline GRH header for
47599517SBill.Taylor@Sun.COM  *					    MLX transport MADs
47609517SBill.Taylor@Sun.COM  *    HERMON_WQE_BUILD_MLX_BTH		- Builds the inline BTH header for
47619517SBill.Taylor@Sun.COM  *					    MLX transport MADs
47629517SBill.Taylor@Sun.COM  *    HERMON_WQE_BUILD_MLX_DETH		- Builds the inline DETH header for
47639517SBill.Taylor@Sun.COM  *					    MLX transport MADs
47649517SBill.Taylor@Sun.COM  */
47659517SBill.Taylor@Sun.COM #define	HERMON_WQE_BUILD_UD(qp, ud, ah, dest)				\
47669517SBill.Taylor@Sun.COM {									\
47679517SBill.Taylor@Sun.COM 	uint64_t		*tmp;					\
47689517SBill.Taylor@Sun.COM 	uint64_t		*udav;					\
47699517SBill.Taylor@Sun.COM 									\
47709517SBill.Taylor@Sun.COM 	tmp	= (uint64_t *)(ud);					\
47719517SBill.Taylor@Sun.COM 	udav	= (uint64_t *)(ah)->ah_udav;				\
47729517SBill.Taylor@Sun.COM 	tmp[0]	= ntohll(udav[0]);					\
47739517SBill.Taylor@Sun.COM 	tmp[1]	= ntohll(udav[1]);					\
47749517SBill.Taylor@Sun.COM 	tmp[2]	= ntohll(udav[2]);					\
47759517SBill.Taylor@Sun.COM 	tmp[3]	= ntohll(udav[3]);					\
47769517SBill.Taylor@Sun.COM 	tmp[4]	= ntohll((((uint64_t)((dest)->ud_dst_qpn &		\
47779517SBill.Taylor@Sun.COM 	    HERMON_WQE_SENDHDR_UD_DQPN_MASK) << 32) |			\
47789517SBill.Taylor@Sun.COM 	    (dest)->ud_qkey));						\
47799517SBill.Taylor@Sun.COM 	tmp[5] = 0;							\
47809517SBill.Taylor@Sun.COM }
47819517SBill.Taylor@Sun.COM 
47829517SBill.Taylor@Sun.COM #define	HERMON_WQE_BUILD_LSO(qp, ds, mss, hdr_sz)			\
47839517SBill.Taylor@Sun.COM 	*(uint32_t *)(ds) = htonl(((mss) << 16) | hdr_sz);
47849517SBill.Taylor@Sun.COM 
47859517SBill.Taylor@Sun.COM #define	HERMON_WQE_BUILD_REMADDR(qp, ra, wr_rdma)			\
47869517SBill.Taylor@Sun.COM {									\
47879517SBill.Taylor@Sun.COM 	uint64_t		*tmp;					\
47889517SBill.Taylor@Sun.COM 									\
47899517SBill.Taylor@Sun.COM 	tmp	= (uint64_t *)(ra);					\
47909517SBill.Taylor@Sun.COM 	tmp[0] = htonll((wr_rdma)->rdma_raddr);				\
47919517SBill.Taylor@Sun.COM 	tmp[1] = htonll((uint64_t)(wr_rdma)->rdma_rkey << 32);		\
47929517SBill.Taylor@Sun.COM }
47939517SBill.Taylor@Sun.COM 
4794*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_BUILD_RC_ATOMIC_REMADDR(qp, rc, wr)			\
47959517SBill.Taylor@Sun.COM {									\
47969517SBill.Taylor@Sun.COM 	uint64_t		*tmp;					\
47979517SBill.Taylor@Sun.COM 									\
47989517SBill.Taylor@Sun.COM 	tmp	= (uint64_t *)(rc);					\
47999517SBill.Taylor@Sun.COM 	tmp[0] = htonll((wr)->wr.rc.rcwr.atomic->atom_raddr);		\
48009517SBill.Taylor@Sun.COM 	tmp[1] = htonll((uint64_t)(wr)->wr.rc.rcwr.atomic->atom_rkey << 32); \
48019517SBill.Taylor@Sun.COM }
48029517SBill.Taylor@Sun.COM 
4803*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_BUILD_ATOMIC(qp, at, wr_atom)			\
48049517SBill.Taylor@Sun.COM {									\
48059517SBill.Taylor@Sun.COM 	uint64_t		*tmp;					\
48069517SBill.Taylor@Sun.COM 									\
48079517SBill.Taylor@Sun.COM 	tmp	= (uint64_t *)(at);					\
48089517SBill.Taylor@Sun.COM 	tmp[0] = htonll((wr_atom)->atom_arg2);				\
48099517SBill.Taylor@Sun.COM 	tmp[1] = htonll((wr_atom)->atom_arg1);				\
48109517SBill.Taylor@Sun.COM }
48119517SBill.Taylor@Sun.COM 
4812*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_BUILD_BIND(qp, bn, wr_bind)				\
48139517SBill.Taylor@Sun.COM {									\
48149517SBill.Taylor@Sun.COM 	uint64_t		*tmp;					\
48159517SBill.Taylor@Sun.COM 	uint64_t		bn0_tmp;				\
48169517SBill.Taylor@Sun.COM 	ibt_bind_flags_t	bind_flags;				\
48179517SBill.Taylor@Sun.COM 									\
48189517SBill.Taylor@Sun.COM 	tmp	   = (uint64_t *)(bn);					\
48199517SBill.Taylor@Sun.COM 	bind_flags = (wr_bind)->bind_flags;				\
48209517SBill.Taylor@Sun.COM 	bn0_tmp	   = (bind_flags & IBT_WR_BIND_ATOMIC) ?		\
48219517SBill.Taylor@Sun.COM 	    HERMON_WQE_SENDHDR_BIND_ATOM : 0;				\
48229517SBill.Taylor@Sun.COM 	bn0_tmp	  |= (bind_flags & IBT_WR_BIND_WRITE) ?			\
48239517SBill.Taylor@Sun.COM 	    HERMON_WQE_SENDHDR_BIND_WR : 0;				\
48249517SBill.Taylor@Sun.COM 	bn0_tmp	  |= (bind_flags & IBT_WR_BIND_READ) ?			\
48259517SBill.Taylor@Sun.COM 	    HERMON_WQE_SENDHDR_BIND_RD : 0;				\
48269517SBill.Taylor@Sun.COM 	tmp[0] = htonll(bn0_tmp);					\
48279517SBill.Taylor@Sun.COM 	tmp[1] = htonll(((uint64_t)(wr_bind)->bind_rkey_out << 32) |	\
48289517SBill.Taylor@Sun.COM 	    (wr_bind)->bind_lkey);					\
48299517SBill.Taylor@Sun.COM 	tmp[2] = htonll((wr_bind)->bind_va);				\
48309517SBill.Taylor@Sun.COM 	tmp[3] = htonll((wr_bind)->bind_len);				\
48319517SBill.Taylor@Sun.COM }
48329517SBill.Taylor@Sun.COM 
4833*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_BUILD_FRWR(qp, frwr_arg, pmr_arg)			\
4834*12965SWilliam.Taylor@Oracle.COM {									\
4835*12965SWilliam.Taylor@Oracle.COM 	ibt_mr_flags_t		flags;					\
4836*12965SWilliam.Taylor@Oracle.COM 	ibt_lkey_t		lkey;					\
4837*12965SWilliam.Taylor@Oracle.COM 	ibt_wr_reg_pmr_t	*pmr = (pmr_arg);			\
4838*12965SWilliam.Taylor@Oracle.COM 	uint64_t		*frwr64 = (uint64_t *)(frwr_arg);	\
4839*12965SWilliam.Taylor@Oracle.COM 									\
4840*12965SWilliam.Taylor@Oracle.COM 	flags = pmr->pmr_flags;						\
4841*12965SWilliam.Taylor@Oracle.COM 	((uint32_t *)frwr64)[0] = htonl(0x08000000 |			\
4842*12965SWilliam.Taylor@Oracle.COM 	    ((flags & IBT_MR_ENABLE_REMOTE_ATOMIC) ? 0x80000000 : 0) |	\
4843*12965SWilliam.Taylor@Oracle.COM 	    ((flags & IBT_MR_ENABLE_REMOTE_WRITE) ? 0x40000000 : 0) |	\
4844*12965SWilliam.Taylor@Oracle.COM 	    ((flags & IBT_MR_ENABLE_REMOTE_READ) ? 0x20000000 : 0) |	\
4845*12965SWilliam.Taylor@Oracle.COM 	    ((flags & IBT_MR_ENABLE_LOCAL_WRITE) ? 0x10000000 : 0) |	\
4846*12965SWilliam.Taylor@Oracle.COM 	    ((flags & IBT_MR_ENABLE_WINDOW_BIND) ? 0x00200000 : 0));	\
4847*12965SWilliam.Taylor@Oracle.COM 	lkey = (pmr->pmr_lkey & ~0xff) | pmr->pmr_key;			\
4848*12965SWilliam.Taylor@Oracle.COM 	pmr->pmr_rkey = pmr->pmr_lkey = lkey;				\
4849*12965SWilliam.Taylor@Oracle.COM 	((uint32_t *)frwr64)[1] = htonl(lkey);				\
4850*12965SWilliam.Taylor@Oracle.COM 	frwr64[1] = htonll(pmr->pmr_addr_list->p_laddr);		\
4851*12965SWilliam.Taylor@Oracle.COM 	frwr64[2] = htonll(pmr->pmr_iova);				\
4852*12965SWilliam.Taylor@Oracle.COM 	frwr64[3] = htonll(pmr->pmr_len);				\
4853*12965SWilliam.Taylor@Oracle.COM 	((uint32_t *)frwr64)[8] = htonl(pmr->pmr_offset);		\
4854*12965SWilliam.Taylor@Oracle.COM 	((uint32_t *)frwr64)[9] = htonl(pmr->pmr_buf_sz);		\
4855*12965SWilliam.Taylor@Oracle.COM 	frwr64[5] = 0;							\
4856*12965SWilliam.Taylor@Oracle.COM }
4857*12965SWilliam.Taylor@Oracle.COM 
4858*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_BUILD_LI(qp, li_arg, wr_li)				\
4859*12965SWilliam.Taylor@Oracle.COM {									\
4860*12965SWilliam.Taylor@Oracle.COM 	uint64_t		*li64 = (uint64_t *)(void *)(li_arg);	\
4861*12965SWilliam.Taylor@Oracle.COM 									\
4862*12965SWilliam.Taylor@Oracle.COM 	li64[0] = 0;							\
4863*12965SWilliam.Taylor@Oracle.COM 	((uint32_t *)li64)[2] = htonl((wr_li)->li_rkey);		\
4864*12965SWilliam.Taylor@Oracle.COM 	((uint32_t *)li64)[3] = 0;					\
4865*12965SWilliam.Taylor@Oracle.COM 	li64[2] = 0;							\
4866*12965SWilliam.Taylor@Oracle.COM 	li64[3] = 0;							\
4867*12965SWilliam.Taylor@Oracle.COM }
4868*12965SWilliam.Taylor@Oracle.COM 
4869*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_BUILD_FCP3_INIT(ds, fctl, cs_pri, seq_id, mtu,	\
4870*12965SWilliam.Taylor@Oracle.COM 		dest_id, op, rem_exch, local_exch_idx)			\
4871*12965SWilliam.Taylor@Oracle.COM {									\
4872*12965SWilliam.Taylor@Oracle.COM 	uint32_t		*fc_init;				\
4873*12965SWilliam.Taylor@Oracle.COM 									\
4874*12965SWilliam.Taylor@Oracle.COM 	fc_init = (uint32_t *)ds;					\
4875*12965SWilliam.Taylor@Oracle.COM 	fc_init[1] = htonl((cs_pri) << 24 | (seq_id) << 16 | (mtu));	\
4876*12965SWilliam.Taylor@Oracle.COM 	fc_init[2] = htonl((dest_id) << 8 |				\
4877*12965SWilliam.Taylor@Oracle.COM 	    IBT_FCTL_GET_ABORT_FIELD(fctl) << 6 | (op) << 3 | 0x2);	\
4878*12965SWilliam.Taylor@Oracle.COM 	fc_init[3] = htonl((rem_exch) << 16 | (local_exch_idx));	\
4879*12965SWilliam.Taylor@Oracle.COM 	membar_producer(); /* fc_init[0] is where the stamping is */	\
4880*12965SWilliam.Taylor@Oracle.COM 	fc_init[0] = htonl(((fctl) & IBT_FCTL_PRIO) << 6);		\
4881*12965SWilliam.Taylor@Oracle.COM }
4882*12965SWilliam.Taylor@Oracle.COM 
4883*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_BUILD_DATA_SEG_RECV(ds, sgl)				\
48849517SBill.Taylor@Sun.COM {									\
48859517SBill.Taylor@Sun.COM 	uint64_t		*tmp;					\
48869517SBill.Taylor@Sun.COM 									\
48879517SBill.Taylor@Sun.COM 	tmp	= (uint64_t *)(ds);					\
4888*12965SWilliam.Taylor@Oracle.COM 	tmp[0] = htonll((((uint64_t)((sgl)->ds_len &			\
48899517SBill.Taylor@Sun.COM 	    HERMON_WQE_SGL_BYTE_CNT_MASK) << 32) | (sgl)->ds_key));	\
4890*12965SWilliam.Taylor@Oracle.COM 	tmp[1] = htonll((sgl)->ds_va);					\
48919517SBill.Taylor@Sun.COM }
4892*12965SWilliam.Taylor@Oracle.COM 
4893*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_BUILD_DATA_SEG_SEND(ds, sgl)				\
48949517SBill.Taylor@Sun.COM {									\
48959517SBill.Taylor@Sun.COM 	((uint64_t *)(ds))[1] = htonll((sgl)->ds_va);			\
48969517SBill.Taylor@Sun.COM 	((uint32_t *)(ds))[1] = htonl((sgl)->ds_key);			\
48979517SBill.Taylor@Sun.COM 	membar_producer();						\
48989517SBill.Taylor@Sun.COM 	((uint32_t *)(ds))[0] =						\
48999517SBill.Taylor@Sun.COM 	    htonl((sgl)->ds_len & HERMON_WQE_SGL_BYTE_CNT_MASK);	\
49009517SBill.Taylor@Sun.COM }
49019517SBill.Taylor@Sun.COM 
49029517SBill.Taylor@Sun.COM #define	HERMON_WQE_BUILD_INLINE(qp, ds, sz)				\
49039517SBill.Taylor@Sun.COM 	*(uint32_t *)(ds) = htonl(HERMON_WQE_SGL_INLINE_MASK | (sz))
49049517SBill.Taylor@Sun.COM 
4905*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_BUILD_INLINE_ICRC(qp, ds, sz, icrc)			\
49069517SBill.Taylor@Sun.COM {									\
49079517SBill.Taylor@Sun.COM 	uint32_t		*tmp;					\
49089517SBill.Taylor@Sun.COM 									\
49099517SBill.Taylor@Sun.COM 	tmp = (uint32_t *)(ds);						\
4910*12965SWilliam.Taylor@Oracle.COM 	tmp[1] = htonl(icrc);						\
4911*12965SWilliam.Taylor@Oracle.COM 	membar_producer();						\
49129517SBill.Taylor@Sun.COM 	tmp[0] = htonl(HERMON_WQE_SGL_INLINE_MASK | (sz));		\
49139517SBill.Taylor@Sun.COM }
49149517SBill.Taylor@Sun.COM 
49159517SBill.Taylor@Sun.COM #define	HERMON_WQE_SET_CTRL_SEGMENT(desc, desc_sz, fence,	 	\
4916*12965SWilliam.Taylor@Oracle.COM 		imm, sol, sig, cksum, qp, strong, fccrc)		\
49179517SBill.Taylor@Sun.COM {									\
49189517SBill.Taylor@Sun.COM 	uint32_t		*tmp;					\
49199517SBill.Taylor@Sun.COM 	uint32_t		cntr_tmp;				\
49209517SBill.Taylor@Sun.COM 									\
49219517SBill.Taylor@Sun.COM 	/* do not set the first dword (owner/opcode) here */		\
49229517SBill.Taylor@Sun.COM 	tmp = (uint32_t *)desc;						\
49239517SBill.Taylor@Sun.COM 	cntr_tmp = (fence << 6) | desc_sz;				\
49249517SBill.Taylor@Sun.COM 	tmp[1] = ntohl(cntr_tmp); 					\
4925*12965SWilliam.Taylor@Oracle.COM 	cntr_tmp = strong | fccrc | sol | sig | cksum;			\
49269517SBill.Taylor@Sun.COM 	tmp[2] = ntohl(cntr_tmp); 					\
49279517SBill.Taylor@Sun.COM 	tmp[3] = ntohl(imm);						\
49289517SBill.Taylor@Sun.COM }
49299517SBill.Taylor@Sun.COM 
49309517SBill.Taylor@Sun.COM #define	HERMON_WQE_SET_MLX_CTRL_SEGMENT(desc, desc_sz, sig, maxstat, 	\
49319517SBill.Taylor@Sun.COM 		lid, qp, sl)						\
49329517SBill.Taylor@Sun.COM {									\
49339517SBill.Taylor@Sun.COM 	uint32_t		*tmp;					\
49349517SBill.Taylor@Sun.COM 	uint32_t		cntr_tmp;				\
49359517SBill.Taylor@Sun.COM 									\
49369517SBill.Taylor@Sun.COM 	tmp = (uint32_t *)desc;						\
49379517SBill.Taylor@Sun.COM 	cntr_tmp = htonl(tmp[0]);					\
49389517SBill.Taylor@Sun.COM 	cntr_tmp &= 0x80000000;						\
49399517SBill.Taylor@Sun.COM 	cntr_tmp |= HERMON_WQE_SEND_NOPCODE_SEND;			\
49409517SBill.Taylor@Sun.COM 	tmp[0] = ntohl(cntr_tmp);					\
49419517SBill.Taylor@Sun.COM 	tmp[1] = ntohl(desc_sz);					\
4942*12965SWilliam.Taylor@Oracle.COM 	cntr_tmp = (((maxstat << 4) | (sl & 0xff)) << 8) | sig;		\
49439517SBill.Taylor@Sun.COM 	if (qp->qp_is_special == HERMON_QP_SMI)				\
49449517SBill.Taylor@Sun.COM 		cntr_tmp |= (0x02 << 16);				\
49459517SBill.Taylor@Sun.COM 	if (lid == IB_LID_PERMISSIVE)					\
49469517SBill.Taylor@Sun.COM 		cntr_tmp |= (0x01 << 16);				\
49479517SBill.Taylor@Sun.COM 	tmp[2] = ntohl(cntr_tmp);					\
49489517SBill.Taylor@Sun.COM 	tmp[3] = ntohl((lid) << 16);					\
49499517SBill.Taylor@Sun.COM }
49509517SBill.Taylor@Sun.COM 
49519517SBill.Taylor@Sun.COM #define	HERMON_WQE_BUILD_MLX_LRH(lrh, qp, udav, pktlen)	\
49529517SBill.Taylor@Sun.COM {									\
49539517SBill.Taylor@Sun.COM 	uint32_t		*tmp;					\
49549517SBill.Taylor@Sun.COM 	uint32_t		lrh_tmp;				\
49559517SBill.Taylor@Sun.COM 									\
49569517SBill.Taylor@Sun.COM 	tmp	 = (uint32_t *)(void *)(lrh);				\
49579517SBill.Taylor@Sun.COM 									\
49589517SBill.Taylor@Sun.COM 	if ((qp)->qp_is_special == HERMON_QP_SMI) {			\
49599517SBill.Taylor@Sun.COM 		lrh_tmp = HERMON_MLX_VL15_LVER;				\
49609517SBill.Taylor@Sun.COM 	} else {							\
49619517SBill.Taylor@Sun.COM 		lrh_tmp = HERMON_MLX_VL0_LVER | ((udav)->sl << 20);	\
49629517SBill.Taylor@Sun.COM 	}								\
49639517SBill.Taylor@Sun.COM 	if ((udav)->grh) {						\
49649517SBill.Taylor@Sun.COM 		lrh_tmp |= (IB_LRH_NEXT_HDR_GRH << 16);			\
49659517SBill.Taylor@Sun.COM 	} else {							\
49669517SBill.Taylor@Sun.COM 		lrh_tmp |= (IB_LRH_NEXT_HDR_BTH << 16);			\
49679517SBill.Taylor@Sun.COM 	}								\
49689517SBill.Taylor@Sun.COM 	lrh_tmp |= (udav)->rlid;					\
49699517SBill.Taylor@Sun.COM 	tmp[0] = htonl(lrh_tmp);					\
49709517SBill.Taylor@Sun.COM 									\
49719517SBill.Taylor@Sun.COM 	lrh_tmp	 = (pktlen) << 16;					\
49729517SBill.Taylor@Sun.COM 	if ((udav)->rlid == IB_LID_PERMISSIVE) {			\
49739517SBill.Taylor@Sun.COM 		lrh_tmp |= IB_LID_PERMISSIVE;				\
49749517SBill.Taylor@Sun.COM 	} else {							\
49759517SBill.Taylor@Sun.COM 		lrh_tmp |= (udav)->ml_path;				\
49769517SBill.Taylor@Sun.COM 	}								\
49779517SBill.Taylor@Sun.COM 	tmp[1] = htonl(lrh_tmp);					\
49789517SBill.Taylor@Sun.COM }
49799517SBill.Taylor@Sun.COM 
49809517SBill.Taylor@Sun.COM /*
49819517SBill.Taylor@Sun.COM  * Note: The GRH payload length, calculated below, is the overall packet
49829517SBill.Taylor@Sun.COM  * length (in bytes) minus LRH header and GRH headers.
49839517SBill.Taylor@Sun.COM  *
49849517SBill.Taylor@Sun.COM  * Also note: Filling in the GIDs in the way we do below is helpful because
49859517SBill.Taylor@Sun.COM  * it avoids potential alignment restrictions and/or conflicts.
49869517SBill.Taylor@Sun.COM  */
4987*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_BUILD_MLX_GRH(state, grh, qp, udav, pktlen)		\
49889517SBill.Taylor@Sun.COM {									\
49899517SBill.Taylor@Sun.COM 	uint32_t		*tmp;					\
49909517SBill.Taylor@Sun.COM 	uint32_t		grh_tmp;				\
49919517SBill.Taylor@Sun.COM 	ib_gid_t		sgid;					\
49929517SBill.Taylor@Sun.COM 									\
49939517SBill.Taylor@Sun.COM 	tmp	 = (uint32_t *)(grh);					\
49949517SBill.Taylor@Sun.COM 									\
49959517SBill.Taylor@Sun.COM 	grh_tmp	 = HERMON_MLX_IPVER_TC_FLOW;				\
49969517SBill.Taylor@Sun.COM 	grh_tmp |= (udav)->tclass << HERMON_MLX_TC_SHIFT;		\
49979517SBill.Taylor@Sun.COM 	grh_tmp |= (udav)->flow_label;					\
49989517SBill.Taylor@Sun.COM 	tmp[0] = htonl(grh_tmp);					\
49999517SBill.Taylor@Sun.COM 									\
50009517SBill.Taylor@Sun.COM 	grh_tmp	 = (((pktlen) << 2) - (sizeof (ib_lrh_hdr_t) +		\
50019517SBill.Taylor@Sun.COM 	    sizeof (ib_grh_t))) << 16;					\
50029517SBill.Taylor@Sun.COM 	grh_tmp |= (IB_GRH_NEXT_HDR_BTH << 8);				\
50039517SBill.Taylor@Sun.COM 	grh_tmp |= (udav)->hop_limit;					\
50049517SBill.Taylor@Sun.COM 	tmp[1] = htonl(grh_tmp);					\
50059517SBill.Taylor@Sun.COM 									\
50069517SBill.Taylor@Sun.COM 	sgid.gid_prefix = (state)->hs_sn_prefix[(qp)->qp_portnum];	\
50079517SBill.Taylor@Sun.COM 	sgid.gid_guid = (state)->hs_guid[(qp)->qp_portnum]		\
50089517SBill.Taylor@Sun.COM 	    [(udav)->mgid_index];					\
50099517SBill.Taylor@Sun.COM 	bcopy(&sgid, &tmp[2], sizeof (ib_gid_t));			\
50109517SBill.Taylor@Sun.COM 	bcopy(&(udav)->rgid_h, &tmp[6], sizeof (ib_gid_t));		\
50119517SBill.Taylor@Sun.COM }
50129517SBill.Taylor@Sun.COM 
5013*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_BUILD_MLX_BTH(state, bth, qp, wr)			\
50149517SBill.Taylor@Sun.COM {									\
50159517SBill.Taylor@Sun.COM 	uint32_t		*tmp;					\
50169517SBill.Taylor@Sun.COM 	uint32_t		bth_tmp;				\
50179517SBill.Taylor@Sun.COM 									\
50189517SBill.Taylor@Sun.COM 	tmp	 = (uint32_t *)(bth);					\
50199517SBill.Taylor@Sun.COM 									\
50209517SBill.Taylor@Sun.COM 	bth_tmp	 = HERMON_MLX_UDSEND_OPCODE;				\
50219517SBill.Taylor@Sun.COM 	if ((wr)->wr_flags & IBT_WR_SEND_SOLICIT) {			\
50229517SBill.Taylor@Sun.COM 		bth_tmp |= (IB_BTH_SOLICITED_EVENT_MASK << 16);		\
50239517SBill.Taylor@Sun.COM 	}								\
50249517SBill.Taylor@Sun.COM 	if (qp->qp_is_special == HERMON_QP_SMI) {			\
50259517SBill.Taylor@Sun.COM 		bth_tmp |= HERMON_MLX_DEF_PKEY;				\
50269517SBill.Taylor@Sun.COM 	} else {							\
50279517SBill.Taylor@Sun.COM 		bth_tmp |= (state)->hs_pkey[(qp)->qp_portnum]		\
50289517SBill.Taylor@Sun.COM 		    [(qp)->qp_pkeyindx];				\
50299517SBill.Taylor@Sun.COM 	}								\
50309517SBill.Taylor@Sun.COM 	tmp[0] = htonl(bth_tmp);					\
50319517SBill.Taylor@Sun.COM 	tmp[1] = htonl((wr)->wr.ud.udwr_dest->ud_dst_qpn &		\
50329517SBill.Taylor@Sun.COM 	    HERMON_MLX_DQPN_MASK);					\
50339517SBill.Taylor@Sun.COM 	tmp[2] = 0x0;							\
50349517SBill.Taylor@Sun.COM }
50359517SBill.Taylor@Sun.COM 
5036*12965SWilliam.Taylor@Oracle.COM #define	HERMON_WQE_BUILD_MLX_DETH(deth, qp)				\
50379517SBill.Taylor@Sun.COM {									\
50389517SBill.Taylor@Sun.COM 	uint32_t		*tmp;					\
50399517SBill.Taylor@Sun.COM 									\
50409517SBill.Taylor@Sun.COM 	tmp	 = (uint32_t *)(deth);					\
50419517SBill.Taylor@Sun.COM 									\
50429517SBill.Taylor@Sun.COM 	if ((qp)->qp_is_special == HERMON_QP_SMI) {			\
50439517SBill.Taylor@Sun.COM 		tmp[0] = 0x0;						\
50449517SBill.Taylor@Sun.COM 		tmp[1] = 0x0;						\
50459517SBill.Taylor@Sun.COM 	} else {							\
50469517SBill.Taylor@Sun.COM 		tmp[0] = htonl(HERMON_MLX_GSI_QKEY);			\
50479517SBill.Taylor@Sun.COM 		tmp[1] = htonl(0x1);					\
50489517SBill.Taylor@Sun.COM 	}								\
50499517SBill.Taylor@Sun.COM }
50509517SBill.Taylor@Sun.COM 
50519517SBill.Taylor@Sun.COM 
50529517SBill.Taylor@Sun.COM /*
50539517SBill.Taylor@Sun.COM  * Flash interface:
50549517SBill.Taylor@Sun.COM  *    Below we have PCI config space space offsets for flash interface
50559517SBill.Taylor@Sun.COM  *    access, offsets within Hermon CR space for accessing flash-specific
50569517SBill.Taylor@Sun.COM  *    information or settings, masks used for flash settings, and
50579517SBill.Taylor@Sun.COM  *    timeout values for flash operations.
50589517SBill.Taylor@Sun.COM  */
50599517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_CFG_HWREV			8
50609517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_CFG_ADDR			88
50619517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_CFG_DATA			92
50629517SBill.Taylor@Sun.COM 
50639517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_RESET_AMD			0xF0
50649517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_RESET_INTEL		0xFF
50659517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_CPUMODE			0xF0150
50669517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_ADDR			0xF01A4
50679517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_DATA			0xF01A8
50689517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_GPIO_SEMA		0xF03FC
50699517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_WRCONF_SEMA		0xF0380
50709517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_GPIO_DATA			0xF0040
50719517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_GPIO_MOD1			0xF004C
50729517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_GPIO_MOD0			0xF0050
50739517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_GPIO_DATACLEAR		0xF00D4
50749517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_GPIO_DATASET		0xF00DC
50759517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_GPIO_LOCK		0xF0048
50769517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_GPIO_UNLOCK_VAL		0xD42F
50779517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_GPIO_PIN_ENABLE		0x1E000000
50789517SBill.Taylor@Sun.COM 
50799517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_CPU_MASK			0xC0000000
50809517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_CPU_SHIFT		30
50819517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_ADDR_MASK		0x0007FFFC
50829517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_CMD_MASK			0xE0000000
50839517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_BANK_MASK		0xFFF80000
50849517SBill.Taylor@Sun.COM 
50859517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_BUSY			0x40000000
50869517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_WIP			0x01000000
50879517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_READ_OP		0x00000001
50889517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_USE_INSTR		0x00000040
50899517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_NO_ADDR		0x00000020
50909517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_NO_DATA		0x00000010
50919517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_TRANS_SZ_4B		0x00000200
50929517SBill.Taylor@Sun.COM 
50939517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_SECTOR_ERASE		0xD8
50949517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_READ		0x03
50959517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_PAGE_PROGRAM		0x02
50969517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_READ_STATUS_REG	0x05
50979517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_WRITE_ENABLE		0x06
50989517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_READ_ESIGNATURE	0xAB
50999517SBill.Taylor@Sun.COM 
51009517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_GW			0xF0400
51019517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_ADDR			0xF0404
51029517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_DATA			0xF0410
51039517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_DATA4		0xF0414
51049517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_DATA8		0xF0418
51059517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_DATA12		0xF041C
51069517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_ADDR_MASK		0x00FFFFFF
51079517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_INSTR_PHASE_OFF	0x04
51089517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_ADDR_PHASE_OFF	0x08
51099517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_DATA_PHASE_OFF	0x10
51109517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_ENABLE_OFF		0x2000
51119517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_CS_OFF		0x800
51129517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_INSTR_OFF		0x10000
51139517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_INSTR_SHIFT		0x10
51149517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_SPI_BOOT_ADDR_REG	0xF0000
51159517SBill.Taylor@Sun.COM 
51169517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_TIMEOUT_WRITE		300
51179517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_TIMEOUT_ERASE		1000000
51189517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_TIMEOUT_GPIO_SEMA	1000
51199517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_TIMEOUT_CONFIG		50
51209517SBill.Taylor@Sun.COM 
51219517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_ICS_ERASE		0x20
51229517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_ICS_ERROR		0x3E
51239517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_ICS_WRITE		0x40
51249517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_ICS_STATUS		0x70
51259517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_ICS_READY		0x80
51269517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_ICS_CONFIRM		0xD0
51279517SBill.Taylor@Sun.COM #define	HERMON_HW_FLASH_ICS_READ			0xFF
51289517SBill.Taylor@Sun.COM 
51299517SBill.Taylor@Sun.COM #ifdef __cplusplus
51309517SBill.Taylor@Sun.COM }
51319517SBill.Taylor@Sun.COM #endif
51329517SBill.Taylor@Sun.COM 
51339517SBill.Taylor@Sun.COM #endif	/* _SYS_IB_ADAPTERS_HERMON_HW_H */
5134