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