9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * CDDL HEADER START
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The contents of this file are subject to the terms of the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Common Development and Distribution License (the "License").
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * You may not use this file except in compliance with the License.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * or http://www.opensolaris.org/os/licensing.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * See the License for the specific language governing permissions
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * and limitations under the License.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * When distributing Covered Code, include this CDDL HEADER in each
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * If applicable, add the following below this CDDL HEADER, with the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * fields enclosed by brackets "[]" replaced with your own identifying
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * information: Portions Copyright [yyyy] [name of copyright owner]
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * CDDL HEADER END
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Use is subject to license terms.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifndef _SYS_IB_ADAPTERS_TAVOR_HW_H
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define _SYS_IB_ADAPTERS_TAVOR_HW_H
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tavor_hw.h
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Contains all the structure definitions and #defines for all Tavor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * hardware resources and registers (as defined by the Tavor register
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * specification). Wherever possible, the names in the Tavor spec
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * have been preserved in the structure and field names below.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#include <sys/types.h>
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#include <sys/conf.h>
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#include <sys/ddi.h>
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#include <sys/sunddi.h>
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef __cplusplus
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorextern "C" {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Offsets into the CMD BAR (BAR 0) for many of the more interesting hardware
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * registers. These registers include the HCR (more below), the Event Cause
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Register (ECR) and its related clear register, the Interrupt Clear register
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * (CLR_INT), and the software reset register (SW_RESET).
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CMD_HCR_OFFSET 0x80680
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CMD_ECR_OFFSET 0x80700
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CMD_CLR_ECR_OFFSET 0x80708
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CMD_CLR_INT_OFFSET 0xF00D8
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CMD_SW_RESET_OFFSET 0xF0010
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Ownership flags used to define hardware or software ownership for
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * various Tavor resources
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_OWNER 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_SW_OWNER 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Determines whether or not virtual-to-physical address translation is
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * required. Several of the Tavor hardware structures can be optionally
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * accessed by Tavor without going through the TPT address translation
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tables.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_VA2PA_XLAT_ENABLED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_VA2PA_XLAT_DISABLED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * HCA Command Register (HCR)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The HCR command interface provides privileged access to the HCA in
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * order to query, configure and modify HCA execution. It is the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * primary mechanism through which mailboxes may be posted to Tavor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * firmware. To use this interface software fills the HCR with pointers
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * to input and output mailboxes. Some commands support immediate
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * parameters, however, and for these commands the HCR will contain the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * input or output parameters. Command execution completion can be
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * detected either by the software polling the HCR or by waiting for a
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * command completion event.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_hcr_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t in_param0;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t in_param1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t input_modifier;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t out_param0;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t out_param1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t token;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cmd;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HCR_TOKEN_MASK 0xFFFF0000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HCR_TOKEN_SHIFT 16
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HCR_CMD_STATUS_MASK 0xFF000000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HCR_CMD_GO_MASK 0x00800000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HCR_CMD_E_MASK 0x00400000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HCR_CMD_OPMOD_MASK 0x0000F000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HCR_CMD_OPCODE_MASK 0x00000FFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HCR_CMD_STATUS_SHFT 24
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HCR_CMD_GO_SHFT 23
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HCR_CMD_E_SHFT 22
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HCR_CMD_OPMOD_SHFT 12
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor "QUERY_DEV_LIM" command
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The QUERY_DEV_LIM command returns the device limits and capabilities
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * supported by the Tavor device. This command should be run before
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * running the INIT_HCA command (below) in order to determine the maximum
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * capabilities of the device and which optional features are supported.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_querydevlim_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_ee :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_rsvd_ee :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_srq :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_rsvd_srq :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_qp :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_rsvd_qp :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_qp_sz :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_srq_sz :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_eq :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t num_rsvd_eq :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_mpt :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :10;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_cq :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_rsvd_cq :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_cq_sz :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_av :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_mttseg :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_rsvd_mpt :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_mrw_sz :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_rsvd_mttseg :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_ra_glob :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_ras_qp :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :10;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_raq_qp :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :10;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t num_ports :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_vl :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_port_width :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_mtu :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ca_ack_delay :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :11;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_pkey :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :12;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t stat_rate_sup :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_gid :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :28;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rc :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t uc :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ud :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rd :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t raw_ipv6 :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t raw_ether :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srq :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pkey_v :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qkey_v :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mem_win :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t apm :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t atomic :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t raw_multi :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t avp :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ud_multi :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pg_on_demand :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t router :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_pg_sz :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_uar_sz :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t num_rsvd_uar :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_desc_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_sg :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_rdd :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t num_rsvd_rdd :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_pd :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t num_rsvd_pd :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_mcg :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t num_rsvd_mcg :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_qp_mcg :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv2[6];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eqpc_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eeec_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qpc_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eec_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t uarscr_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srq_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqc_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eqc_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv3[28];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_querydevlim_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_srq_sz :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_qp_sz :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_rsvd_qp :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_qp :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_rsvd_srq :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_srq :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_rsvd_ee :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_ee :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_cq_sz :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_rsvd_cq :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_cq :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :10;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_mpt :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t num_rsvd_eq :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_eq :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_rsvd_mttseg :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_mrw_sz :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_rsvd_mpt :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_mttseg :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_av :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :10;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_raq_qp :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :10;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_ras_qp :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_ra_glob :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :11;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ca_ack_delay :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_mtu :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_port_width :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_vl :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t num_ports :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :28;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_gid :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t stat_rate_sup :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :12;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_pkey :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t router :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pg_on_demand :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ud_multi :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t avp :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t raw_multi :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t atomic :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t apm :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mem_win :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qkey_v :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pkey_v :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srq :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t raw_ether :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t raw_ipv6 :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rd :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ud :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t uc :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rc :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t num_rsvd_uar :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_uar_sz :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_pg_sz :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_sg :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_desc_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_qp_mcg :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t num_rsvd_mcg :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_mcg :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t num_rsvd_pd :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_pd :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t num_rsvd_rdd :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_rdd :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv2[6];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eec_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qpc_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eeec_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eqpc_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eqc_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqc_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srq_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t uarscr_entry_sz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv3[28];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor "QUERY_FW" command
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The QUERY_FW command retrieves the firmware revision and the Command
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Interface revision. The command also returns the HCA attached local
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * memory area (DDR) which is used by the firmware. Below we also
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * include some defines which are used to enforce a minimum firmware
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * version check (see tavor_fw_version_check() for more details).
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_queryfw_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t fw_rev_minor :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t fw_rev_subminor :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t fw_rev_major :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_cmd :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :23;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dbg_trace :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cmd_intf_rev :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t fw_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t fw_endaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t error_buf_addr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t error_buf_sz;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[48];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_queryfw_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t fw_rev_major :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t fw_rev_subminor :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t fw_rev_minor :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cmd_intf_rev :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dbg_trace :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :23;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_cmd :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t fw_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t fw_endaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t error_buf_addr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t error_buf_sz;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[49];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_FW_VER_MAJOR 0x0003
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_FW_VER_MINOR 0x0001
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_FW_VER_SUBMINOR 0x0000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_COMPAT_FW_VER_MAJOR 0x0004
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_COMPAT_FW_VER_MINOR 0x0005
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_COMPAT_FW_VER_SUBMINOR 0x0003
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor "QUERY_DDR" command
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The QUERY_DDR command retrieves information regarding the HCA attached
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * local memory area (DDR). This information includes: the DIMM PCI BAR,
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the total address space provided by the HCA attached local memory, and
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * some DIMM-specific information. Note: Some of the HCA attached local
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * memory is reserved for use by firmware. This extent of this reserved
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * area can be obtained through the QUERY_FW command (above).
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Below we first define the tavor_hw_queryddr_dimm_t or "Logical DIMM
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Information" structure. Four of these are present in the QUERY_DDR
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * command.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_queryddr_dimm_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t spd :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sladr :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sock_num :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t syn :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :22;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dimmsz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dimmstatus :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dimm_hidden :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t write_only :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t vendor_id_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t vendor_id_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dimm_baseaddr_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dimm_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_queryddr_dimm_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_queryddr_dimm_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t write_only :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dimm_hidden :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dimmstatus :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dimmsz :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :22;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t syn :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sock_num :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sladr :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t spd :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t vendor_id_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t vendor_id_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dimm_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dimm_baseaddr_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_queryddr_dimm_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_DIMMSTATUS_ENABLED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_DIMMSTATUS_DISABLED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_DIMM_ERR_NONE 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_DIMM_ERR_SPD 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_DIMM_ERR_BOUNDS 0x2
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_DIMM_ERR_CONFLICT 0x3
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_DIMM_ERR_SIZETRIM 0x5
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_DIMM_SPD_FROM_DIMM 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_DIMM_SPD_FROM_NVMEM 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_queryddr_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t ddr_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t ddr_endaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t data_integrity :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t auto_precharge :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ddr_hidden :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :27;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[10];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_queryddr_dimm_t dimm[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[16];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_queryddr_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t ddr_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t ddr_endaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :27;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ddr_hidden :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t auto_precharge :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t data_integrity :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[10];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_queryddr_dimm_t dimm[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[16];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_AUTO_PRECHRG_NONE 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_AUTO_PRECHRG_PER_TRANS 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_AUTO_PRECHRG_PER_64B 0x2
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_DATA_INT_NONE 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_DATA_INT_PARITY 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_DATA_INT_ECC_DETECT_ONLY 0x2
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_DATA_INT_ECC_CORRECT 0x3
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor "QUERY_ADAPTER" command
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The QUERY_ADAPTER command retrieves adapter specific parameters. The
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * command also retrieves the PCI(X) interrupt pin routing for each of
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the INTx# pins supported by the device. This information is used by
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the driver during interrupt processing in order to clear the appropriate
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * interrupt bit.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_queryadapter_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t device_id;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t vendor_id;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rev_id;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t inta_pin :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[58];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_queryadapter_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t vendor_id;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t device_id;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rev_id;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t inta_pin :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[58];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_REV_A0 0xA0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_REV_A1 0xA1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor "INIT_HCA" and "QUERY_HCA" commands
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The INIT_HCA command configures all HCA resources in HCA attached local
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * memory and some system relevant information. The same mailbox output
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * format is used by the QUERY_HCA command. All parameters, which are
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * specifically the output of the QUERY_HCA command are marked as
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * "QUERY_HCA only". These parameters are not configurable through the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * INIT_HCA command, but can be retrieved as read-only through the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * QUERY_HCA command.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Below we first define several structures which help make up the whole
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * of the INIT_HCA/QUERY_HCA command. These are:
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tavor_hw_qp_ee_cq_eq_rdb_t for "QPC/EEC/CQC/EQC/RDB Parameters",
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tavor_udav_mem_param_t for "Memory Access Parameters for UDAV Table",
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tavor_multicast_param_t for "Multicast Support Parameters",
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tavor_tpt_param_t for "Translation and Protection Table Parameters",
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * and tavor_uar_param_t for Tavor "UAR Parameters".
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_qp_ee_cq_eq_rdb_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_num_qp :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qpc_baseaddr_l :25;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qpc_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_num_ee :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eec_baseaddr_l :25;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eec_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_num_srq :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srqc_baseaddr_l :27;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srqc_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_num_cq :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqc_baseaddr_l :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqc_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv2[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t eqpc_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv3[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t eeec_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv4[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_num_eq :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eqc_baseaddr_l :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eqc_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv5[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rdb_baseaddr_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rdb_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv6[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_qp_ee_cq_eq_rdb_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_qp_ee_cq_eq_rdb_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qpc_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qpc_baseaddr_l :25;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_num_qp :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eec_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eec_baseaddr_l :25;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_num_ee :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srqc_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srqc_baseaddr_l :27;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_num_srq :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqc_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqc_baseaddr_l :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_num_cq :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv2[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t eqpc_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv3[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t eeec_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv4[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eqc_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eqc_baseaddr_l :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_num_eq :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv5[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rdb_baseaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rdb_baseaddr_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv6[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_qp_ee_cq_eq_rdb_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_udav_mem_param_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t udav_pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t udav_xlat_en :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t udav_lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_udav_mem_param_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_udav_mem_param_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t udav_lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t udav_xlat_en :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t udav_pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_udav_mem_param_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_multicast_param_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t mc_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mc_tbl_hash_sz :17;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :15;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_mc_tbl_ent :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_mc_tbl_sz :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :19;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mc_hash_fn :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_multicast_param_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_multicast_param_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t mc_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_mc_tbl_ent :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :15;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mc_tbl_hash_sz :17;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mc_hash_fn :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :19;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_mc_tbl_sz :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_multicast_param_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MCG_DEFAULT_HASH_FN 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_tpt_param_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t mpt_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mtt_version :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_mpt_sz :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pgfault_rnr_to :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mttseg_sz :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :13;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t mtt_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_tpt_param_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_tpt_param_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t mpt_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :13;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mttseg_sz :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pgfault_rnr_to :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_mpt_sz :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mtt_version :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t mtt_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_tpt_param_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_uar_param_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :20;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t uar_baseaddr_l :12; /* QUERY_HCA only */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t uar_baseaddr_h; /* QUERY_HCA only */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t uar_pg_sz :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t uarscr_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_uar_param_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_uar_param_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t uar_baseaddr_h; /* QUERY_HCA only */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t uar_baseaddr_l :12; /* QUERY_HCA only */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :20;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t uar_pg_sz :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t uarscr_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_uar_param_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_initqueryhca_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t hca_core_clock :8; /* QUERY_HCA only */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t udav_port_chk :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t big_endian :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t udav_chk :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t responder_exu :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_quota :15;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_quota_en :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t router_qp :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t router_en :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_qp_ee_cq_eq_rdb_t context;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv2[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_udav_mem_param_t udav;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv3[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_multicast_param_t multi;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv4[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_tpt_param_t tpt;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv5[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_uar_param_t uar;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv6[48];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_initqueryhca_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t hca_core_clock :8; /* QUERY_HCA only */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t router_en :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t router_qp :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_quota_en :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_quota :15;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t responder_exu :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t udav_chk :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t big_endian :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t udav_port_chk :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_qp_ee_cq_eq_rdb_t context;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv2[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_udav_mem_param_t udav;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv3[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_multicast_param_t multi;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv4[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_tpt_param_t tpt;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv5[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_uar_param_t uar;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv6[48];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_UDAV_PROTECT_DISABLED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_UDAV_PROTECT_ENABLED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_UDAV_PORTCHK_DISABLED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_UDAV_PORTCHK_ENABLED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor "INIT_IB" command
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The INIT_IB command enables the physical layer of a given IB port.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * It provides control over the IB port attributes. The capabilities
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * requested here should not exceed the device limits, as retrieved by
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the QUERY_DEV_LIM command (above). To query information about the IB
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * port or node, the driver may submit GetPortInfo or GetNodeInfo MADs
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * through the Tavor MAD_IFC command.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_initib_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_gid :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t vl_cap :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t port_width_cap :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mtu_cap :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t set_port_guid0 :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t set_node_guid :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t set_sysimg_guid :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :13;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_pkey :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t guid0;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t node_guid;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t sysimg_guid;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[54];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_initib_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :13;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t set_sysimg_guid :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t set_node_guid :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t set_port_guid0 :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mtu_cap :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t port_width_cap :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t vl_cap :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_gid :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_pkey :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t guid0;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t node_guid;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t sysimg_guid;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[54];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor Memory Protection Table (MPT) entries
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The Memory Protection Table (MPT) contains the information associated
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * with all the regions and windows. The MPT table resides in a physically-
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * contiguous area in HCA attached local memory, and the memory key (R_Key
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * or L_Key) is used to calculate the physical address for accessing the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * entries in the table.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The following structure is used in the SW2HW_MPT, QUERY_MPT, and
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * HW2SW_MPT commands.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The SW2HW_MPT command transfers ownership of an MPT entry from software
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * to hardware. The command takes the MPT entry from the input mailbox and
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * stores it in the MPT in the hardware. The command will fail if the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * requested MPT entry is already owned by the hardware or if the MPT index
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * given in the command is inconsistent with the MPT entry memory key.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The QUERY_MPT command retrieves a snapshot of an MPT entry. The command
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * takes the current state of an MPT entry from the hardware and stores it
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * in the output mailbox. The command will fail if the requested MPT entry
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * is already owned by software.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Finally, the HW2SW_MPT command transfers ownership of an MPT entry from
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the hardware to the software. The command takes the MPT entry from the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * hardware, invalidates it, and stores it in the output mailbox. The
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * command will fail if the requested entry is already owned by software.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The command will also fail if the MPT entry in question is a Memory
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Region which has Memory Windows currently bound to it.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_mpt_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t page_sz :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :27;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ver :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t reg_win :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t phys_addr :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lr :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lw :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rr :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rw :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t atomic :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t en_bind :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t m_io :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :10;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t status :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mem_key;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t start_addr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t reg_win_len;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t win_cnt;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mttseg_addr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t win_cnt_limit;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mttseg_addr_l :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_mpt_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t status :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :10;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t m_io :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t en_bind :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t atomic :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rw :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rr :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lw :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lr :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t phys_addr :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t reg_win :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ver :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :27;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t page_sz :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mem_key;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t start_addr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t reg_win_len;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t win_cnt;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t win_cnt_limit;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mttseg_addr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mttseg_addr_l :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MEM_CYCLE_GENERATE 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_IO_CYCLE_GENERATE 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MPT_IS_WINDOW 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MPT_IS_REGION 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MPT_DEFAULT_VERSION 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_UNLIMITED_WIN_BIND 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PHYSADDR_ENABLED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PHYSADDR_DISABLED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor Memory Translation Table (MTT) entries
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * After accessing the MPT table (above) and validating the access rights
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * to the region/window, Tavor address translation moves to the next step
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * where it translates the virtual address to a physical address. This
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * translation is performed using the Memory Translation Table entries
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * (MTT). Note: The MTT in hardware is organized into segments and each
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * segment contains multiple address translation pages (MTT entries).
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Each memory region (MPT above) points to the first segment in the MTT
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * that corresponds to that region.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_mtt_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t present :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :11;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ptag_l :20;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ptag_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_mtt_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ptag_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ptag_l :20;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :11;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t present :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MTT_ENTRY_NOTPRESET 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MTT_ENTRY_PRESET 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor Event Queue Context Table (EQC) entries
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor supports 64 Event Queues, and the status of Event Queues is stored
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * in the Event Queue Context (EQC) table. The EQC table is a physically-
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * contiguous memory structure in the HCA attached local memory. Each EQC
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * table entry contains Event Queue status and information required by
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the hardware in order to access the event queue.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The following structure is used in the SW2HW_EQ, QUERY_EQ, and HW2SW_EQ
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * commands.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The SW2HW_EQ command transfers ownership of an EQ context from software
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * to hardware. The command takes the EQC entry from the input mailbox and
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * stores it in the EQC in the hardware. The command will fail if the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * requested EQC entry is already owned by the hardware.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The QUERY_EQ command retrieves a snapshot of an EQC entry. The command
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * stores the snapshot in the output mailbox. The EQC state and its values
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * are not affected by the QUERY_EQ command.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Finally, the HW2SW_EQ command transfers ownership of an EQC entry from
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the hardware to the software. The command takes the EQC entry from the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * hardware and stores it in the output mailbox. The EQC entry will be
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * invalidated as a result of the command. It is the responsibility of the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * software to unmap all the events, which might have been previously
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * mapped to the EQ, prior to issuing the HW2SW_EQ command.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_eqc_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t start_addr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t state :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t overrun_ignore :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t xlat :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t owner :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t status :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t usr_page :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_eq_sz :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t start_addr_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t intr :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lost_cnt;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t prod_indx;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cons_indx;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_eqc_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t status :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t owner :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t xlat :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t overrun_ignore :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t state :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t start_addr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t start_addr_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_eq_sz :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t usr_page :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t intr :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lost_cnt;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cons_indx;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t prod_indx;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQ_STATUS_OK 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQ_STATUS_OVERFLOW 0x9
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQ_STATUS_WRITE_FAILURE 0xA
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQ_ARMED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQ_FIRED 0x2
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQ_ALWAYS_ARMED 0x3
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor Event Queue Entries (EQE)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Each EQE contains enough information for the software to identify the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * source of the event. The following structures are used to define each
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * of the various kinds of events that the Tavor hardware will generate.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Note: The tavor_hw_eqe_t below is the generic "Event Queue Entry". All
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * other EQEs differ only in the contents of their "event_data" field.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Below we first define several structures which define the contents of
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the "event_data" fields:
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tavor_hw_eqe_cq_t for "Completion Queue Events"
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tavor_hw_eqe_cqerr_t for "Completion Queue Error Events"
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tavor_hw_eqe_portstate_t for "Port State Change Events"
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tavor_hw_eqe_cmdcmpl_t for "Command Interface Completion Events"
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tavor_hw_eqe_qp_evt_t for "Queue Pair Events" such as Path Migration
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Succeeded, Path Migration Failed, Communication Established, Send
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Queue Drained, Local WQ Catastrophic Error, Invalid Request Local
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * WQ Error, and Local Access Violation WQ Error.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tavor_hw_eqe_operr_t for "Operational and Catastrophic Error Events"
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * such as EQ Overflow, Misbehaved UAR page, Internal Parity Error,
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Uplink bus error, and DDR data error.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tavor_hw_eqe_pgflt_t for "Not-present Page Fault on WQE or Data
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Buffer Access". (Note: Currently, this event is unsupported).
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Note also: The following structures are not #define'd with both
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * little-endian and big-endian definitions. This is because their
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * individual fields are not directly accessed except through the macros
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * defined below.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_eqe_cq_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[5];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_eqe_cq_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_eqe_cqerr_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t syndrome :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[3];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_eqe_cqerr_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQERR_OVERFLOW 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQERR_ACCESS_VIOLATION 0x2
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_eqe_portstate_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t port :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :28;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[3];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_eqe_portstate_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PORT_LINK_ACTIVE 0x4
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PORT_LINK_DOWN 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_eqe_cmdcmpl_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t token :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t status :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t out_param0;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t out_param1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_eqe_cmdcmpl_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_eqe_qp_evt_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qpn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qp_ee :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :28;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[3];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_eqe_qpevt_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_eqe_operr_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t error_type :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t data;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_eqe_operr_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_ERREVT_EQ_OVERFLOW 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_ERREVT_BAD_UARPG 0x2
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_ERREVT_UPLINK_BUSERR 0x3
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_ERREVT_DDR_DATAERR 0x4
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_ERREVT_INTERNAL_PARITY 0x5
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_eqe_pgflt_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t fault_type :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqv :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_data :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rem_loc :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t snd_rcv :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t vaddr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t vaddr_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mem_key;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_eqe_pgflt_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PGFLT_PG_NOTPRESENT 0x8
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PGFLT_PG_WRACC_VIOL 0xA
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PGFLT_UNSUP_NOTPRESENT 0xE
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PGFLT_UNSUP_WRACC_VIOL 0xF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PGFLT_WQE_CAUSED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PGFLT_DATA_CAUSED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PGFLT_REMOTE_CAUSED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PGFLT_LOCAL_CAUSED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PGFLT_SEND_CAUSED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PGFLT_RECV_CAUSED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PGFLT_DESC_CONSUMED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PGFLT_DESC_NOTCONSUMED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_eqe_ecc_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrcv0[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t overflow :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :15;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t err_ba :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t err_da :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t err_src_id :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t err_rmw :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cause_msb :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cause_lsb :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t err_ca :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t err_ra :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_eqe_ecc_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_eqe_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t event_type :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t event_subtype :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor union {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_eqe_cq_t eqe_cq;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_eqe_cqerr_t eqe_cqerr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_eqe_portstate_t eqe_portstate;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_eqe_cmdcmpl_t eqe_cmdcmpl;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_eqe_qpevt_t eqe_qpevt;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_eqe_operr_t eqe_operr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_eqe_pgflt_t eqe_pgflt;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_eqe_ecc_t eqe_ecc;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } event_data;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t owner :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define eqe_cq event_data.eqe_cq
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define eqe_cqerr event_data.eqe_cqerr
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define eqe_portstate event_data.eqe_portstate
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define eqe_cmdcmpl event_data.eqe_cmdcmpl
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define eqe_qpevt event_data.eqe_qpevt
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define eqe_operr event_data.eqe_operr
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define eqe_pgflt event_data.eqe_pgflt
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The following macros are used for extracting (and in some cases filling in)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * information from EQEs
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_EVTTYPE_MASK 0x00FF0000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_EVTTYPE_SHIFT 16
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_EVTSUBTYPE_MASK 0x000000FF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_EVTSUBTYPE_SHIFT 0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_CQNUM_MASK 0x00FFFFFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_CQNUM_SHIFT 0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_QPNUM_MASK 0x00FFFFFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_QPNUM_SHIFT 0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_PORTNUM_MASK 0x30000000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_PORTNUM_SHIFT 28
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_CMDTOKEN_MASK 0x0000FFFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_CMDTOKEN_SHIFT 0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_CMDSTATUS_MASK 0x000000FF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_CMDSTATUS_SHIFT 0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_OPERRTYPE_MASK 0x000000FF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_OPERRTYPE_SHIFT 0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_OWNER_MASK 0x00000080
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_OWNER_SHIFT 7
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_EVTTYPE_GET(eq, eqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((eq)->eq_eqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(eqe))[0]) & TAVOR_EQE_EVTTYPE_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_EQE_EVTTYPE_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_EVTSUBTYPE_GET(eq, eqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((eq)->eq_eqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(eqe))[0]) & TAVOR_EQE_EVTSUBTYPE_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_EQE_EVTSUBTYPE_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_CQNUM_GET(eq, eqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((eq)->eq_eqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(eqe))[1]) & TAVOR_EQE_CQNUM_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_EQE_CQNUM_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_QPNUM_GET(eq, eqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((eq)->eq_eqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(eqe))[1]) & TAVOR_EQE_QPNUM_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_EQE_QPNUM_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_PORTNUM_GET(eq, eqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((eq)->eq_eqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(eqe))[3]) & TAVOR_EQE_PORTNUM_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_EQE_PORTNUM_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_CMDTOKEN_GET(eq, eqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((eq)->eq_eqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(eqe))[1]) & TAVOR_EQE_CMDTOKEN_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_EQE_CMDTOKEN_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_CMDSTATUS_GET(eq, eqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((eq)->eq_eqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(eqe))[3]) & TAVOR_EQE_CMDSTATUS_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_EQE_CMDSTATUS_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_CMDOUTP0_GET(eq, eqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ddi_get32((eq)->eq_eqinfo.qa_acchdl, &((uint32_t *)(eqe))[4]))
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_CMDOUTP1_GET(eq, eqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ddi_get32((eq)->eq_eqinfo.qa_acchdl, &((uint32_t *)(eqe))[5]))
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_OPERRTYPE_GET(eq, eqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((eq)->eq_eqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(eqe))[3]) & TAVOR_EQE_OPERRTYPE_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_EQE_OPERRTYPE_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_OPERRDATA_GET(eq, eqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ddi_get32((eq)->eq_eqinfo.qa_acchdl, &((uint32_t *)(eqe))[4]))
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_OWNER_IS_SW(eq, eqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (((ddi_get32((eq)->eq_eqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(eqe))[7]) & TAVOR_EQE_OWNER_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_EQE_OWNER_SHIFT) == TAVOR_SW_OWNER)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQE_OWNER_SET_HW(eq, eqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ddi_put32((eq)->eq_eqinfo.qa_acchdl, &((uint32_t *)(eqe))[7], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((TAVOR_HW_OWNER << TAVOR_EQE_OWNER_SHIFT) & \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_EQE_OWNER_MASK)))
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor Completion Queue Context Table (CQC) entries
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The CQC table is a physically-contiguous memory area residing in HCA
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * attached local memory. Each CQC table entry contains information
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * required by the hardware to access the completion queue to post
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * completions (CQE).
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The following structure is used in the SW2HW_CQ, QUERY_CQ, RESIZE_CQ,
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * and HW2SW_CQ commands.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The SW2HW_CQ command transfers ownership of an CQ context from software
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * to hardware. The command takes the CQC entry from the input mailbox and
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * stores it in the CQC in the hardware. The command will fail if the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * requested CQC entry is already owned by the hardware.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The QUERY_CQ command retrieves a snapshot of a CQC entry. The command
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * stores the snapshot in the output mailbox. The CQC state and its values
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * are not affected by the QUERY_CQ command.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Finally, the HW2SW_CQ command transfers ownership of a CQC entry from
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the hardware to the software. The command takes the CQC entry from the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * hardware and stores it in the output mailbox. The CQC entry will be
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * invalidated as a result of the command.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_cqc_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t start_addr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t state :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t overrun_ignore :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t xlat :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :9;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t status :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t usr_page :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_cq_sz :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t start_addr_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t c_eqn :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t e_eqn :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t solicit_prod_indx;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t last_notified_indx;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t prod_indx;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cons_indx;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_cqc_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t status :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :9;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t xlat :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t overrun_ignore :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t state :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t start_addr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t start_addr_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_cq_sz :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t usr_page :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t e_eqn :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t c_eqn :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t last_notified_indx;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t solicit_prod_indx;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cons_indx;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t prod_indx;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[2];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQ_STATUS_OK 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQ_STATUS_OVERFLOW 0x9
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQ_STATUS_WRITE_FAILURE 0xA
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQ_DISARMED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQ_ARMED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQ_ARMED_SOLICITED 0x4
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQ_FIRED 0xA
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor Completion Queue Entries (CQE)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Each CQE contains enough information for the software to associate the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * completion with the Work Queue Element (WQE) to which it corresponds.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Note: The following structure is not #define'd with both little-endian
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * and big-endian definitions. This is because each CQE's individual
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * fields are not directly accessed except through the macros defined below.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_cqe_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ver :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t my_qpn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t my_ee :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rqpn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sl :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t grh :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ml_path :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rlid :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t imm_eth_pkey_cred;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t byte_cnt;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_addr :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_sz :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t opcode :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t send_or_recv :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :15;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t owner :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_COMPLETION_RECV 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_COMPLETION_SEND 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_DEFAULT_VERSION 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The following macros are used for extracting (and in some cases filling in)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * information from CQEs
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_QPNUM_MASK 0x00FFFFFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_QPNUM_SHIFT 0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_DQPN_MASK 0x00FFFFFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_DQPN_SHIFT 0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_SL_MASK 0xF0000000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_SL_SHIFT 28
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_GRH_MASK 0x00800000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_GRH_SHIFT 23
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_PATHBITS_MASK 0x007F0000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_PATHBITS_SHIFT 16
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_DLID_MASK 0x0000FFFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_DLID_SHIFT 0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_OPCODE_MASK 0xFF000000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_OPCODE_SHIFT 24
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_SENDRECV_MASK 0x00800000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_SENDRECV_SHIFT 23
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_OWNER_MASK 0x00000080
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_OWNER_SHIFT 7
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_QPNUM_GET(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((cq)->cq_cqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(cqe))[0]) & TAVOR_CQE_QPNUM_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_CQE_QPNUM_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_DQPN_GET(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((cq)->cq_cqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(cqe))[2]) & TAVOR_CQE_DQPN_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_CQE_DQPN_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_SL_GET(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((cq)->cq_cqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(cqe))[3]) & TAVOR_CQE_SL_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_CQE_SL_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_GRH_GET(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((cq)->cq_cqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(cqe))[3]) & TAVOR_CQE_GRH_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_CQE_GRH_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_PATHBITS_GET(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((cq)->cq_cqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(cqe))[3]) & TAVOR_CQE_PATHBITS_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_CQE_PATHBITS_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_DLID_GET(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((cq)->cq_cqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(cqe))[3]) & TAVOR_CQE_DLID_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_CQE_DLID_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_IMM_ETH_PKEY_CRED_GET(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ddi_get32((cq)->cq_cqinfo.qa_acchdl, &((uint32_t *)(cqe))[4]))
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_IMM_ETH_PKEY_CRED_SET(cq, cqe, arg) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ddi_put32((cq)->cq_cqinfo.qa_acchdl, &((uint32_t *)(cqe))[4], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (arg)))
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_BYTECNT_GET(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ddi_get32((cq)->cq_cqinfo.qa_acchdl, &((uint32_t *)(cqe))[5]))
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_WQEADDRSZ_GET(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ddi_get32((cq)->cq_cqinfo.qa_acchdl, &((uint32_t *)(cqe))[6]))
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_WQEADDRSZ_SET(cq, cqe, arg) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ddi_put32((cq)->cq_cqinfo.qa_acchdl, &((uint32_t *)(cqe))[6], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (arg)))
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_OPCODE_GET(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((cq)->cq_cqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(cqe))[7]) & TAVOR_CQE_OPCODE_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_CQE_OPCODE_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_SENDRECV_GET(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((cq)->cq_cqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(cqe))[7]) & TAVOR_CQE_SENDRECV_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_CQE_SENDRECV_SHIFT)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_OWNER_IS_SW(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (((ddi_get32((cq)->cq_cqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(cqe))[7]) & TAVOR_CQE_OWNER_MASK) >> \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_CQE_OWNER_SHIFT) == TAVOR_SW_OWNER)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_OWNER_SET_HW(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor if ((cq)->cq_is_umap) { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((uint32_t *)(cqe))[7] = 0x80000000; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } else { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((cq)->cq_cqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(cqe))[7], 0x00000080); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor }
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQE_OWNER_SET_HW(cq, cqe) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor if ((cq)->cq_is_umap) { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((uint32_t *)(cqe))[7] = 0x00000080; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } else { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((cq)->cq_cqinfo.qa_acchdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor &((uint32_t *)(cqe))[7], 0x00000080); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor }
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor Shared Receive Queue (SRQ) Context Entry Format
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_srqc_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ds :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t next_wqe_addr_l :27;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_addr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t state :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_cnt :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t uar :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_srqc_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_addr_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t next_wqe_addr_l :27;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ds :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t state :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t uar :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_cnt :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor MOD_STAT_CFG input mailbox structure
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_mod_stat_cfg_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_srq :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srq :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srq_m :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t reserved[62];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_mod_stat_cfg_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srq_m :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srq :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t log_max_srq :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t reserved[62];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor UD Address Vector (UDAV)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor UDAV are used in conjunction with Unreliable Datagram (UD) send
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * WQEs. Each UD send message specifies an address vector that denotes its
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * link and (optional) network layer destination address. The IBA verbs
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * interface enables the separation of the address administration from the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * send WQE posting. The verbs consumer must use special verbs to create
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * and modify address handles (which represent hardware address vectors).
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * When posting send WQEs to UD QP, the verbs consumer must supply a
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * valid address handle/UDAV.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_udav_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rlid :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ml_path :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t grh :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t portnum :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t flow_label :20;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t tclass :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sl :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t hop_limit :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_stat_rate :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t msg_sz :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mgid_index :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :10;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t rgid_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t rgid_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_udav_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t portnum :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t grh :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ml_path :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rlid :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :10;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mgid_index :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t msg_sz :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_stat_rate :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t hop_limit :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sl :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t tclass :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t flow_label :20;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t rgid_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t rgid_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_UDAV_MODIFY_MASK0 0xFCFFFFFFFF000000ULL
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_UDAV_MODIFY_MASK1 0xFFC0F80000000000ULL
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor Queue Pair Context Table (QPC) entries
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The QPC table is a physically-contiguous memory area residing in HCA
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * attached local memory. Each QPC entry is accessed for reads and writes
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * by the HCA while executing work requests on the associated QP.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The following structure is used in the RST2INIT_QP, INIT2INIT_QP,
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * INIT2RTR_QP, RTR2RTS_QP, RTS2RTS_QP, SQERR2RTS_QP, TOERR_QP, RTS2SQD_QP,
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * SQD2RTS_QP, TORST_QP, and QUERY_QP commands.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * With the exception of the QUERY_QP command, each of these commands reads
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * from some portion of the QPC in the input mailbox and modified the QPC
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * stored in the hardware. The QUERY_QP command retrieves a snapshot of a
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * QPC entry. The command stores the snapshot in the output mailbox. The
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * QPC state and its values are not affected by the QUERY_QP command.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Below we first define the tavor_hw_addr_path_t or "Tavor Address Path"
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * structure. This structure is used to provide address path information
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * (both primary and secondary) for each QP context. Note: Since this
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * structure is _very_ similar to the tavor_hw_udav_t structure above,
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * we are able to leverage the similarity with filling in and reading from
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the two types of structures. See tavor_get_addr_path() and
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * tavor_set_addr_path() in tavor_misc.c for more details.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_addr_path_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rlid :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ml_path :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t grh :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rnr_retry :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pkey_indx :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :17;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t portnum :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t flow_label :20;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t tclass :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sl :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t hop_limit :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_stat_rate :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mgid_index :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ack_timeout :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t rgid_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t rgid_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_addr_path_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t portnum :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :17;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pkey_indx :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rnr_retry :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t grh :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ml_path :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rlid :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ack_timeout :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mgid_index :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_stat_rate :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t hop_limit :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sl :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t tclass :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t flow_label :20;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t rgid_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t rgid_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_qpc_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sched_q :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :28;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t de :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pm_state :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t serv_type :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :9;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t state :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t usr_page :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t msg_max :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mtu :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rem_qpn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t loc_qpn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_addr_path_t pri_addr_path;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_addr_path_t alt_addr_path;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rdd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ssc :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sic :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cur_retry_cnt :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cur_rnr_retry :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sae :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t swe :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sre :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t retry_cnt :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sra_max :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t flight_lim :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ack_req_freq :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqn_snd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t next_snd_psn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t next_snd_wqe;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ssn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t last_acked_psn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t next_rcv_psn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t min_rnr_nak :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsc :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ric :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rae :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rwe :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rre :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rra_max :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqn_rcv :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ra_buff_indx :27;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t next_rcv_wqe;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srq_number :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srq_en :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rmsn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[18];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_qpc_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t state :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :9;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t serv_type :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pm_state :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t de :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :28;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sched_q :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t mtu :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t msg_max :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t usr_page :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t loc_qpn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rem_qpn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_addr_path_t pri_addr_path;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_addr_path_t alt_addr_path;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rdd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t pd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_baseaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t wqe_lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ack_req_freq :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t flight_lim :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sra_max :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t retry_cnt :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sre :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t swe :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sae :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cur_rnr_retry :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cur_retry_cnt :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sic :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ssc :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t next_snd_psn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqn_snd :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t next_snd_wqe;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t last_acked_psn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ssn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rra_max :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rre :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rwe :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rae :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ric :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsc :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t min_rnr_nak :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t next_rcv_psn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ra_buff_indx :27;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqn_rcv :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t next_rcv_wqe;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srq_en :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t srq_number :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rmsn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[18];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_RESET 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_INIT 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_RTR 0x2
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_RTS 0x3
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_SQERR 0x4
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_SQD 0x5
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_ERR 0x6
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_SQDRAINING 0x7
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_RC 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_UC 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_UD 0x3
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_MLX 0x7
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_PMSTATE_MIGRATED 0x3
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_PMSTATE_ARMED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_PMSTATE_REARM 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_DESC_EVT_DISABLED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_DESC_EVT_ENABLED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_FLIGHT_LIM_UNLIMITED 0xF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_SQ_ALL_SIGNALED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_SQ_WR_SIGNALED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_RQ_ALL_SIGNALED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_RQ_WR_SIGNALED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_SRQ_ENABLED 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_SRQ_DISABLED 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor Multicast Group Member (MCG)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor MCG are organized in a physically-contiguous memory table (the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Multicast Group Table) in the HCA attached local memory. This table is
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * actually comprised of two consecutive tables: the Multicast Group Hash
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Table (MGHT) and the Additional Multicast Group Members Table (AMGM).
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Each such entry contains an MGID and a list of QPs that are attached to
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the multicast group. Each such entry may also include an index to an
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Additional Multicast Group Member Table (AMGM) entry. The AMGMs are
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * used to form a linked list of MCG entries that all map to the same hash
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * value. The MCG entry size is configured through the INIT_HCA command.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Note: An MCG actually consists of a single tavor_hw_mcg_t and some
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * number of tavor_hw_mcg_qp_list_t (such that the combined structure is a
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * power-of-2).
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The following structures are used in the READ_MGM and WRITE_MGM commands.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The READ_MGM command reads an MCG entry from the multicast table and
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * returns it in the output mailbox. Note: This operation does not affect
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the MCG entry state or values.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The WRITE_MGM command retrieves an MCG entry from the input mailbox and
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * stores it in the multicast group table at the index specified in the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * command. Once the command has finished execution, the multicast group
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * table is updated. The old entry contents are lost.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_mcg_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t next_gid_indx :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t mgid_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t mgid_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_mcg_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t next_gid_indx :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t mgid_h;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t mgid_l;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/* Multicast Group Member - QP List entries */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef _LITTLE_ENDIAN
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_mcg_qp_list_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qpn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t q :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#else
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_mcg_qp_list_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t q :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :7;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qpn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MCG_QPN_INVALID 0x0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MCG_QPN_VALID 0x1
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala/*
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala * Structure for getting the peformance counters from the HCA
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala */
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala#ifdef _LITTLE_ENDIAN
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummalastruct tavor_hw_sm_perfcntr_s {
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t linkdown :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t linkerrrec :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t symerr :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t cntrsel :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portsel :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portxmdiscard :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portrcvswrelay :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portrcvrem :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portrcv :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t vl15drop :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t xsbuffovrun :4;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t locallinkint :4;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portrcconstr :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portxmconstr :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portrcdata;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portxmdata;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portrcpkts;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portxmpkts;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t reserved;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portxmwait;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala};
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala#else /* BIG ENDIAN */
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummalastruct tavor_hw_sm_perfcntr_s {
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portsel :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t cntrsel :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t symerr :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t linkerrrec :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t linkdown :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portrcv :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portrcvrem :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portrcvswrelay :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portxmdiscard :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portxmconstr :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portrcconstr :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t :8;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t locallinkint :4;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t xsbuffovrun :4;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t vl15drop :16;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portxmdata;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portrcdata;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portxmpkts;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portrcpkts;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t portxmwait;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala uint32_t reserved;
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala};
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala#endif
e9dc6bff6e018821c8c8ac7fe3e3b42e621e93aeRamaswamy Tummala
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor User Access Region (UAR)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor doorbells are each rung by writing to the doorbell registers that
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * form a User Access Region (UAR). A doorbell is a write-only hardware
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * register which enables passing information from software to hardware
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * with minimum software latency. A write operation from the host software
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * to these doorbell registers passes information about the HCA resources
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * and initiates processing of the doorbell data. There are 6 types of
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * doorbells in Tavor.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * "Send Doorbell" for synchronizing the attachment of a WQE (or a chain
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * of WQEs) to the send queue.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * "RD Send Doorbell" (Same as above, except for RD QPs) is not supported.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * "Receive Doorbell" for synchronizing the attachment of a WQE (or a chain
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * of WQEs) to the receive queue.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * "CQ Doorbell" for updating the CQ consumer index and requesting
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * completion notifications.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * "EQ Doorbell" for updating the EQ consumer index, arming interrupt
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * triggering, and disarming CQ notification requests.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * "InfiniBlast" (which would have enabled access to the "InfiniBlast
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * buffer") is not supported.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Note: The tavor_hw_uar_t below is the container for all of the various
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * doorbell types. Below we first define several structures which make up
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the contents of those doorbell types.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Note also: The following structures are not #define'd with both little-
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * endian and big-endian definitions. This is because each doorbell type
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * is not directly accessed except through a single ddi_put64() operation
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * (see tavor_qp_send_doorbell, tavor_qp_recv_doorbell, tavor_cq_doorbell,
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * or tavor_eq_doorbell)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_uar_send_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t nda :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t fence :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t nopcode :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qpn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t nds :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_uar_send_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QPSNDDB_NDA_MASK 0xFFFFFFC0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QPSNDDB_NDA_SHIFT 0x20
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QPSNDDB_F_SHIFT 0x25
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QPSNDDB_NOPCODE_SHIFT 0x20
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QPSNDDB_QPN_SHIFT 0x8
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_uar_recv_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t nda :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t nds :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qpn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t credits :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_uar_recv_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QPRCVDB_NDA_MASK 0xFFFFFFC0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QPRCVDB_NDA_SHIFT 0x20
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QPRCVDB_NDS_SHIFT 0x20
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QPRCVDB_QPN_SHIFT 0x8
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/* Max descriptors per Tavor doorbell */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_QP_MAXDESC_PER_DB 256
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_uar_cq_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cmd :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cqn :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t param;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_uar_cq_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQDB_CMD_SHIFT 0x38
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQDB_CQN_SHIFT 0x20
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQDB_INCR_CONSINDX 0x01
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQDB_NOTIFY_CQ 0x02
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQDB_NOTIFY_CQ_SOLICIT 0x03
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQDB_SET_CONSINDX 0x04
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/* Default value for use in NOTIFY_CQ doorbell */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_CQDB_DEFAULT_PARAM 0xFFFFFFFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylortypedef struct tavor_hw_uar_eq_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t cmd :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :18;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t eqn :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t param;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor} tavor_hw_uar_eq_t;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQDB_CMD_SHIFT 0x38
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQDB_EQN_SHIFT 0x20
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQDB_INCR_CONSINDX 0x01
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQDB_REARM_EQ 0x02
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQDB_DISARM_CQ 0x03
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQDB_SET_CONSINDX 0x04
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_EQDB_SET_ALWAYSARMED 0x05
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_uar_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[4]; /* "RD Send" unsupported */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_uar_send_t send;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_uar_recv_t recv;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_uar_cq_t cq;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tavor_hw_uar_eq_t eq;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv1[244];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t iblast[256]; /* "InfiniBlast" unsupported */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor Send Work Queue Element (WQE)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * A Tavor Send WQE is built of the following segments, each of which is a
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * multiple of 16 bytes. Note: Each individual WQE may contain only a
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * subset of these segments described below (according to the operation type
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * and transport type of the QP).
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The first 16 bytes of ever WQE are formed from the "Next/Ctrl" segment.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * This segment contains the address of the next WQE to be executed and the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * information required in order to allocate the resources to execute the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * next WQE. The "Ctrl" part of this segment contains the control
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * information required to execute the WQE, including the opcode and other
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * control information.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The "Datagram" segment contains address information required in order to
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * form a UD message.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The "Bind" segment contains the parameters required for a Bind Memory
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Window operation.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The "Remote Address" segment is present only in RDMA or Atomic WQEs and
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * specifies remote virtual addresses and RKey, respectively. Length of
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the remote access is calculated from the scatter/gather list (for
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * RDMA-write/RDMA-read) or set to eight (for Atomic).
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The "Atomic" segment is present only in Atomic WQEs and specifies
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Swap/Add and Compare data.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Note: The following structures are not #define'd with both little-endian
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * and big-endian definitions. This is because their individual fields are
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * not directly accessed except through macros defined below.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_snd_wqe_nextctrl_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t next_wqe_addr :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t nopcode :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t next_eec :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dbd :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t fence :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t nds :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :28;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t c :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t e :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t s :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t i :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t immediate :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_NDA_MASK 0x00000000FFFFFFC0ull
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_NDS_MASK 0x3F
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_DBD_MASK 0x80
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SEND_FENCE_MASK 0x40
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SEND_NOPCODE_RDMAW 0x8
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SEND_NOPCODE_RDMAWI 0x9
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SEND_NOPCODE_SEND 0xA
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SEND_NOPCODE_SENDI 0xB
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SEND_NOPCODE_RDMAR 0x10
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SEND_NOPCODE_ATMCS 0x11
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SEND_NOPCODE_ATMFA 0x12
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SEND_NOPCODE_BIND 0x18
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SEND_SIGNALED_MASK 0x0000000800000000ull
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SEND_SOLICIT_MASK 0x0000000200000000ull
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SEND_IMMEDIATE_MASK 0x0000000100000000ull
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_snd_wqe_ud_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lkey :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t av_addr_h :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t av_addr_l :27;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rsrv0[4];
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :8;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dest_qp :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t qkey :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SENDHDR_UD_AV_MASK 0xFFFFFFFFFFFFFFE0ull
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SENDHDR_UD_DQPN_MASK 0xFFFFFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_snd_wqe_bind_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t ae :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rw :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rr :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :29;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t new_rkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t reg_lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t addr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t len;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SENDHDR_BIND_ATOM 0x8000000000000000ull
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SENDHDR_BIND_WR 0x4000000000000000ull
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SENDHDR_BIND_RD 0x2000000000000000ull
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_snd_wqe_remaddr_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t vaddr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_snd_wqe_atomic_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t swap_add;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t compare;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor "MLX transport" Work Queue Element (WQE)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The format of the MLX WQE is similar to that of the Send WQE (above)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * with the following exceptions. MLX WQEs are used for sending MADs on
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * special QPs 0 and 1. Everything following the "Next/Ctrl" header
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * (defined below) consists of scatter-gather list entries. The contents
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * of these SGLs (also defined below) will be put on the wire exactly as
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * they appear in the buffers. In addition, the VCRC and the ICRC of each
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * sent packet can be modified by changing values in the following header
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * or in the payload of the packet itself.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_mlx_wqe_nextctrl_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t next_wqe_addr :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t nopcode :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dbd :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t nds :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :14;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t vl15 :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t slr :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t max_srate :3;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t sl :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :4;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t c :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t e :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t rlid :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t vcrc :16;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_MLXHDR_VL15_MASK 0x0002000000000000ull
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_MLXHDR_SLR_MASK 0x0001000000000000ull
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_MLXHDR_SRATE_SHIFT 44
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_MLXHDR_SL_SHIFT 40
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_MLXHDR_SIGNALED_MASK 0x0000000800000000ull
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_MLXHDR_RLID_SHIFT 16
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Tavor Receive Work Queue Element (WQE)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Like the Send WQE, the Receive WQE is built of 16-byte segments. The
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * segment is the "Next/Ctrl" segment (defined below). It is followed by
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * some number of scatter list entries for the incoming message.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The format of the scatter-gather list entries is also shown below. For
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Receive WQEs the "inline_data" field must be cleared (i.e. data segments
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * cannot contain inline data).
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_rcv_wqe_nextctrl_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t next_wqe_addr :26;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :5;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t one :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :24;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t dbd :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t nds :6;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :28;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t c :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t e :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :2;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t :32;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * This bit must be set in the next/ctrl field of all Receive WQEs
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * as a workaround to a Tavor hardware erratum related to having
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * the first 32-bits in the WQE set to zero.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_RCV_WQE_NDA0_WA_MASK 0x0000000100000000ull
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylorstruct tavor_hw_wqe_sgl_s {
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t inline_data :1;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t byte_cnt :31;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lkey;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t addr;
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor};
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SGL_BYTE_CNT_MASK 0x7FFFFFFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_SGL_INLINE_MASK 0x80000000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The following defines are used when building descriptors for special QP
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * work requests (i.e. MLX transport WQEs). Note: Because Tavor MLX transport
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * requires the driver to build actual IB packet headers, we use these defines
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * for the most common fields in those headers.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MLX_VL15_LVER 0xF0000000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MLX_VL0_LVER 0x00000000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MLX_IPVER_TC_FLOW 0x60000000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MLX_TC_SHIFT 20
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MLX_DEF_PKEY 0xFFFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MLX_GSI_QKEY 0x80010000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MLX_UDSEND_OPCODE 0x64000000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_MLX_DQPN_MASK 0xFFFFFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The following macros are used for building each of the individual
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * segments that can make up a Tavor WQE. Note: We try not to use the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * structures (with their associated bitfields) here, instead opting to
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * build and put 64-bit or 32-bit chunks to the WQEs as appropriate,
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * primarily because using the bitfields appears to force more read-modify-
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * write operations.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_BUILD_UD - Builds Unreliable Datagram Segment
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_BUILD_REMADDR - Builds Remote Address Segment using
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * RDMA info from the work request
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_BUILD_RC_ATOMIC_REMADDR - Builds Remote Address Segment
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * for RC Atomic work requests
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_BUILD_ATOMIC - Builds Atomic Segment using atomic
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * info from the work request
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_BUILD_BIND - Builds the Bind Memory Window
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Segment using bind info from the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * work request
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_BUILD_DATA_SEG - Builds the individual Data Segments
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * for Send, Receive, and MLX WQEs
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_BUILD_INLINE - Builds an "inline" Data Segment
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * (primarily for MLX transport)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_BUILD_INLINE_ICRC - Also builds an "inline" Data Segment
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * (but used primarily in the ICRC
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * portion of MLX transport WQEs)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_LINKNEXT - Links the current WQE to the
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * previous one
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_LINKFIRST - Links the first WQE on the current
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * chain to the previous WQE
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_BUILD_MLX_LRH - Builds the inline LRH header for
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * MLX transport MADs
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_BUILD_MLX_GRH - Builds the inline GRH header for
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * MLX transport MADs
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_BUILD_MLX_BTH - Builds the inline BTH header for
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * MLX transport MADs
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * TAVOR_WQE_BUILD_MLX_DETH - Builds the inline DETH header for
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * MLX transport MADs
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_BUILD_UD(qp, ud, ah, wr) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t *tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tmp = (uint64_t *)(ud); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[0], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (uint64_t)(ah)->ah_mrhdl->mr_lkey); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[1], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ah)->ah_mrhdl->mr_bindinfo.bi_addr & \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_WQE_SENDHDR_UD_AV_MASK); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[2], 0x0); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[3], 0x0); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[4], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (((uint64_t)((wr)->wr.ud.udwr_dest->ud_dst_qpn & \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_WQE_SENDHDR_UD_DQPN_MASK) << 32) | \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (wr)->wr.ud.udwr_dest->ud_qkey)); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_BUILD_REMADDR(qp, ra, wr_rdma) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t *tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tmp = (uint64_t *)(ra); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[0], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (wr_rdma)->rdma_raddr); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[1], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (uint64_t)(wr_rdma)->rdma_rkey << 32); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_BUILD_RC_ATOMIC_REMADDR(qp, rc, wr) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t *tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tmp = (uint64_t *)(rc); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[0], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (wr)->wr.rc.rcwr.atomic->atom_raddr); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[1], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (uint64_t)(wr)->wr.rc.rcwr.atomic->atom_rkey << 32); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_BUILD_ATOMIC(qp, at, wr_atom) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t *tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tmp = (uint64_t *)(at); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[0], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (wr_atom)->atom_arg2); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[1], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (wr_atom)->atom_arg1); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_BUILD_BIND(qp, bn, wr_bind) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t *tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t bn0_tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ibt_bind_flags_t bind_flags; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tmp = (uint64_t *)(bn); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor bind_flags = (wr_bind)->bind_flags; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor bn0_tmp = (bind_flags & IBT_WR_BIND_ATOMIC) ? \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_WQE_SENDHDR_BIND_ATOM : 0; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor bn0_tmp |= (bind_flags & IBT_WR_BIND_WRITE) ? \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_WQE_SENDHDR_BIND_WR : 0; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor bn0_tmp |= (bind_flags & IBT_WR_BIND_READ) ? \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_WQE_SENDHDR_BIND_RD : 0; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[0], bn0_tmp); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[1], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (((uint64_t)(wr_bind)->bind_rkey_out << 32) | \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (wr_bind)->bind_lkey)); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[2], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (wr_bind)->bind_va); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[3], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (wr_bind)->bind_len); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_BUILD_DATA_SEG(qp, ds, sgl) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t *tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tmp = (uint64_t *)(ds); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[0], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (((uint64_t)((sgl)->ds_len & \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_WQE_SGL_BYTE_CNT_MASK) << 32) | (sgl)->ds_key)); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &tmp[1], (sgl)->ds_va); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_BUILD_DATA_SEG_SRQ(srq, ds, sgl) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint64_t *tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tmp = (uint64_t *)(ds); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((srq)->srq_wqinfo.qa_acchdl, &tmp[0], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (((uint64_t)((sgl)->ds_len & \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_WQE_SGL_BYTE_CNT_MASK) << 32) | (sgl)->ds_key)); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((srq)->srq_wqinfo.qa_acchdl, &tmp[1], (sgl)->ds_va); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_BUILD_INLINE(qp, ds, sz) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t *tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t inline_tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tmp = (uint32_t *)(ds); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor inline_tmp = TAVOR_WQE_SGL_INLINE_MASK | sz; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[0], inline_tmp); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_BUILD_INLINE_ICRC(qp, ds, sz, icrc) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t *tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t inline_tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tmp = (uint32_t *)(ds); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor inline_tmp = TAVOR_WQE_SGL_INLINE_MASK | sz; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[0], inline_tmp); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[1], icrc); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_LINKNEXT(qp, prev, ctrl, next) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &((uint64_t *)(prev))[1], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ctrl)); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &((uint64_t *)(prev))[0], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (next)); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_LINKNEXT_SRQ(srq, prev, ctrl, next) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((srq)->srq_wqinfo.qa_acchdl, &((uint64_t *)(prev))[1],\
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ctrl)); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((srq)->srq_wqinfo.qa_acchdl, &((uint64_t *)(prev))[0],\
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (next)); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_LINKFIRST(qp, prev, next) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put64((qp)->qp_wqinfo.qa_acchdl, &((uint64_t *)(prev))[0], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (next)); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_BUILD_MLX_LRH(lrh, qp, udav, pktlen) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t *tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t lrh_tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tmp = (uint32_t *)(lrh); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor if ((qp)->qp_is_special == TAVOR_QP_SMI) { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor lrh_tmp = TAVOR_MLX_VL15_LVER; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } else { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor lrh_tmp = TAVOR_MLX_VL0_LVER | ((udav).sl << 20); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor if ((udav).grh) { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor lrh_tmp |= (IB_LRH_NEXT_HDR_GRH << 16); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } else { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor lrh_tmp |= (IB_LRH_NEXT_HDR_BTH << 16); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor lrh_tmp |= (udav).rlid; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[0], lrh_tmp); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor lrh_tmp = (pktlen) << 16; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor if ((udav).rlid == IB_LID_PERMISSIVE) { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor lrh_tmp |= IB_LID_PERMISSIVE; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } else { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor lrh_tmp |= (udav).ml_path; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[1], lrh_tmp); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Note: The GRH payload length, calculated below, is the overall packet
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * length (in bytes) minus LRH header and GRH headers.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor *
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Also note: Filling in the GIDs in the way we do below is helpful because
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * it avoids potential alignment restrictions and/or conflicts.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_BUILD_MLX_GRH(state, grh, qp, udav, pktlen) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t *tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t grh_tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ib_gid_t sgid; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tmp = (uint32_t *)(grh); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor grh_tmp = TAVOR_MLX_IPVER_TC_FLOW; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor grh_tmp |= (udav).tclass << TAVOR_MLX_TC_SHIFT; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor grh_tmp |= (udav).flow_label; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[0], grh_tmp); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor grh_tmp = (((pktlen) << 2) - (sizeof (ib_lrh_hdr_t) + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor sizeof (ib_grh_t))) << 16; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor grh_tmp |= (IB_GRH_NEXT_HDR_BTH << 8); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor grh_tmp |= (udav).hop_limit; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[1], grh_tmp); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_SGID_FROM_INDX_GET((state), (qp)->qp_portnum, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (udav).mgid_index, &sgid); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor bcopy(&sgid, &tmp[2], sizeof (ib_gid_t)); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor bcopy(&(udav).rgid_h, &tmp[6], sizeof (ib_gid_t)); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_BUILD_MLX_BTH(state, bth, qp, wr) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t *tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t bth_tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tmp = (uint32_t *)(bth); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor bth_tmp = TAVOR_MLX_UDSEND_OPCODE; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor if ((wr)->wr_flags & IBT_WR_SEND_SOLICIT) { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor bth_tmp |= (IB_BTH_SOLICITED_EVENT_MASK << 16); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor if (qp->qp_is_special == TAVOR_QP_SMI) { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor bth_tmp |= TAVOR_MLX_DEF_PKEY; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } else { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor bth_tmp |= TAVOR_PKEY_FROM_INDX_GET((state), \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (qp)->qp_portnum, (qp)->qp_pkeyindx); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[0], bth_tmp); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[1], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (wr)->wr.ud.udwr_dest->ud_dst_qpn & \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_MLX_DQPN_MASK); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[2], 0x0); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_WQE_BUILD_MLX_DETH(deth, qp) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor{ \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor uint32_t *tmp; \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor tmp = (uint32_t *)(deth); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor if ((qp)->qp_is_special == TAVOR_QP_SMI) { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[0], 0x0); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[1], 0x0); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } else { \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[0], \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_MLX_GSI_QKEY); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ddi_put32((qp)->qp_wqinfo.qa_acchdl, &tmp[1], 0x1); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor } \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Undocumented:
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * The following registers (and the macros to access them) are not defined
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * in the Tavor PRM. But we have high confidence that these offsets are
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * unlikely to change in the lifetime of the Tavor hardware.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PORTINFO_LMC_OFFSET 0x10020
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PORTINFO_BASELID_OFFSET 0x10010
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PORTINFO_MASTERSMLID_OFFSET 0x10010
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PORTINFO_LINKWIDTH_OFFSET 0x1001C
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PORT_SIZE 0x800
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_PORTXMITDATA_OFFSET 0x10120
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_PORTRECVDATA_OFFSET 0x10124
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_PORTXMITPKTS_OFFSET 0x10128
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_PORTRECVPKTS_OFFSET 0x1012C
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_PORTRECVERR_OFFSET 0x10130
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_PORTXMITDISCARD_OFFSET 0x10134
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_VL15DROPPED_OFFSET 0x10138
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_PORTXMITWAIT_OFFSET 0x1013C
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_PORTRECVREMPHYSERR_OFFSET 0x10144
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_PORTXMITCONSTERR_OFFSET 0x10148
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_PORTRECVCONSTERR_OFFSET 0x1014C
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_SYMBOLERRCNT_OFFSET 0x10150
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_LINKERRRECOVERCNT_OFFSET 0x10154
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_LINKDOWNEDCNT_OFFSET 0x10154
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_EXCESSBUFOVERRUN_OFFSET 0x10164
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PMEG_LOCALLINKINTERR_OFFSET 0x10164
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_GUIDTABLE_OFFSET 0x4C800
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_GUIDTABLE_PORT_SIZE 0x200
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_GUIDTABLE_GID_SIZE 0x10
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_GUIDTABLE_GIDPREFIX_SIZE 0x8
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PKEYTABLE_OFFSET 0x4D800
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PKEYTABLE_PORT_SIZE 0x100
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_PKEYTABLE_PKEY_SIZE 0x4
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PORT_LMC_GET(state, port) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((ddi_get32((state)->ts_reg_cmdhdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (uint32_t *)((uintptr_t)(state)->ts_reg_cmd_baseaddr + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_HW_PORTINFO_LMC_OFFSET + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (TAVOR_HW_PORT_SIZE * (port)))) >> 8) & 0x7);
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PORT_BASELID_GET(state, port) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ddi_get32((state)->ts_reg_cmdhdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (uint32_t *)((uintptr_t)(state)->ts_reg_cmd_baseaddr + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_HW_PORTINFO_BASELID_OFFSET + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (TAVOR_HW_PORT_SIZE * (port)))) >> 16);
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PORT_MASTERSMLID_GET(state, port) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ddi_get32((state)->ts_reg_cmdhdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (uint32_t *)((uintptr_t)(state)->ts_reg_cmd_baseaddr + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_HW_PORTINFO_MASTERSMLID_OFFSET + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (TAVOR_HW_PORT_SIZE * (port)))) & 0xFFFF);
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PORT_LINKWIDTH_ACTIVE_GET(state, port) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ddi_get32((state)->ts_reg_cmdhdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (uint32_t *)((uintptr_t)(state)->ts_reg_cmd_baseaddr + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_HW_PORTINFO_LINKWIDTH_OFFSET + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (TAVOR_HW_PORT_SIZE * (port)))) & 0xF);
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_SGID_FROM_INDX_GET(state, port, sgid_ix, sgid) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (sgid)->gid_prefix = ddi_get64((state)->ts_reg_cmdhdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (uint64_t *)((uintptr_t)(state)->ts_reg_cmd_baseaddr + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_HW_GUIDTABLE_OFFSET + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((port) * TAVOR_HW_GUIDTABLE_PORT_SIZE) + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((sgid_ix) * TAVOR_HW_GUIDTABLE_GID_SIZE))); \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (sgid)->gid_guid = ddi_get64((state)->ts_reg_cmdhdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (uint64_t *)((uintptr_t)(state)->ts_reg_cmd_baseaddr + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_HW_GUIDTABLE_OFFSET + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((port) * TAVOR_HW_GUIDTABLE_PORT_SIZE) + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((sgid_ix) * TAVOR_HW_GUIDTABLE_GID_SIZE) + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_HW_GUIDTABLE_GIDPREFIX_SIZE));
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_PKEY_FROM_INDX_GET(state, port, pkey_ix) \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (ddi_get32((state)->ts_reg_cmdhdl, \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor (uint32_t *)((uintptr_t)(state)->ts_reg_cmd_baseaddr + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor TAVOR_HW_PKEYTABLE_OFFSET + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((port) * TAVOR_HW_PKEYTABLE_PORT_SIZE) + \
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor ((pkey_ix) * TAVOR_HW_PKEYTABLE_PKEY_SIZE))) & 0xFFFF)
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/*
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Flash interface:
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * Below we have PCI config space space offsets for flash interface
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * access, offsets within Tavor CR space for accessing flash-specific
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * information or settings, masks used for flash settings, and
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor * timeout values for flash operations.
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_CFG_HWREV 8
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_CFG_ADDR 88
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_CFG_DATA 92
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_RESET_AMD 0xF0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_RESET_INTEL 0xFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_CPUMODE 0xF0150
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_ADDR 0xF01A4
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_DATA 0xF01A8
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_GPIO_SEMA 0xF03FC
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_GPIO_DIR 0xF008C
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_GPIO_POL 0xF0094
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_GPIO_MOD 0xF009C
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_GPIO_DAT 0xF0084
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_GPIO_DATACLEAR 0xF00D4
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_GPIO_DATASET 0xF00DC
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_CPU_MASK 0xC0000000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_CPU_SHIFT 30
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_ADDR_MASK 0x0007FFFC
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_CMD_MASK 0xE0000000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_BANK_MASK 0xFFF80000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_TIMEOUT_WRITE 300
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_TIMEOUT_ERASE 1000000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_TIMEOUT_GPIO_SEMA 1000
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_TIMEOUT_CONFIG 50
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor/* Intel Command Set */
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_ICS_ERASE 0x20
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_ICS_ERROR 0x3E
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_ICS_WRITE 0x40
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_ICS_STATUS 0x70
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_ICS_READY 0x80
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_ICS_CONFIRM 0xD0
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#define TAVOR_HW_FLASH_ICS_READ 0xFF
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#ifdef __cplusplus
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor}
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor
9e39c5ba00a55fa05777cc94b148296af305e135Bill Taylor#endif /* _SYS_IB_ADAPTERS_TAVOR_HW_H */