components/open-fabrics/libsif/include/psifapi/psif_hw_setget.h
author ssadalka soniya.sadalkar@oracle.com
Tue, 08 Mar 2016 21:43:23 -0800
changeset 5564 e533d5840fdd
child 7120 b01185225eaa
permissions -rw-r--r--
PSARC/2015/479 PSIF Solaris IB HCA Driver 22111504 RFE for libsif integration into userland gate
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5564
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
     1
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
     2
 * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
     3
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
     4
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
     5
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
     6
 * Redistribution and use in source and binary forms, with or without modification,
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
     7
 * are permitted provided that the following conditions are met:
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
     8
 *
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
     9
 * 1. Redistributions of source code must retain the above copyright notice,
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    10
 *    this list of conditions and the following disclaimer.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    11
 *
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    12
 * 2. Redistributions in binary form must reproduce the above copyright notice,
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    13
 *    this list of conditions and the following disclaimer in the documentation
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    14
 *    and/or other materials provided with the distribution.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    15
 *
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    16
 * 3. Neither the name of the copyright holder nor the names of its contributors
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    17
 *    may be used to endorse or promote products derived from this software without
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    18
 *    specific prior written permission.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    19
 *
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    20
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    21
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    22
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    23
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    24
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    25
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    26
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    27
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    28
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    29
 * OF THE POSSIBILITY OF SUCH DAMAGE.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    30
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    31
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    32
#ifndef	_PSIF_HW_SETGET_H
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    33
#define	_PSIF_HW_SETGET_H
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    34
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    35
#ifdef __cplusplus
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    36
extern "C" {
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    37
#endif
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    38
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    39
#include "psif_api.h"
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    40
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    41
#if defined(__arm__)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    42
#include "epsfw_misc.h"
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    43
#  define htobe64(x) eps_htobe64(x)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    44
#  define be64toh(x) eps_be64toh(x)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    45
#endif /* __arm__ */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    46
#include "psif_endian.h"
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    47
#if !defined(__KERNEL__)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    48
#include "os_header.h"
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    49
#endif
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    50
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    51
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    52
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    53
 * PSIF_WR_INVALIDATE_LKEY: key to invalidate/flush from the DMA VT cache.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    54
 * PSIF_WR_INVALIDATE_RKEY: key to invalidate/flush from the DMA VT cache.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    55
 * PSIF_WR_INVALIDATE_BOTH_KEYS: key to invalidate/flush from the DMA VT
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    56
 * cache. PSIF_WR_INVALIDATE_TLB: this is the address vector to invalidate in
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    57
 * the TLB.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    58
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    59
static inline void set_psif_wr_su__key(volatile struct psif_wr_su *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    60
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    61
	/* group=2 shift=32 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    62
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    63
	pte[2] = htobe64((be64toh(pte[2]) & 0x00000000ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    64
		((((u64)(data)) & 0x00000000ffffffffull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    65
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    66
static inline u32 get_psif_wr_su__key(volatile struct psif_wr_su *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    67
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    68
	/* group=2 shift=32 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    69
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    70
	return((u32)((be64toh(pte[2]) >> 32) & 0x00000000ffffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    71
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    72
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    73
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    74
 * Send queue sequence number. Used to map request to a particular work
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    75
 * request in the send queue.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    76
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    77
static inline void set_psif_wr__sq_seq(volatile struct psif_wr *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    78
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    79
	/* group=0 shift=0 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    80
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    81
	pte[0] = htobe64((be64toh(pte[0]) & 0xffffffffffff0000ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    82
		((((u64)(data)) & 0x000000000000ffffull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    83
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    84
static inline u16 get_psif_wr__sq_seq(volatile struct psif_wr *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    85
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    86
	/* group=0 shift=0 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    87
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    88
	return((u16)((be64toh(pte[0]) >> 0) & 0x000000000000ffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    89
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    90
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    91
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    92
 * QP sending this request. XXX: Should name be own_qp_num as defined in QP
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    93
 * state?
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    94
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    95
static inline void set_psif_wr__local_qp(volatile struct psif_wr *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    96
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    97
	/* group=0 shift=32 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    98
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
    99
	pte[0] = htobe64((be64toh(pte[0]) & 0xff000000ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   100
		((((u64)(data)) & 0x0000000000ffffffull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   101
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   102
static inline u32 get_psif_wr__local_qp(volatile struct psif_wr *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   103
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   104
	/* group=0 shift=32 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   105
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   106
	return((u32)((be64toh(pte[0]) >> 32) & 0x0000000000ffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   107
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   108
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   109
/* Completion notification identifier. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   110
static inline void set_psif_wr__completion(volatile struct psif_wr *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   111
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   112
	/* group=1 shift=31 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   113
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   114
	pte[1] = htobe64((be64toh(pte[1]) & 0xffffffff7fffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   115
		((((u64)(data)) & 0x0000000000000001ull) << 31));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   116
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   117
static inline u8 get_psif_wr__completion(volatile struct psif_wr *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   118
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   119
	/* group=1 shift=31 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   120
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   121
	return((u8)((be64toh(pte[1]) >> 31) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   122
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   123
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   124
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   125
 * Checksum used for data protection and consistency between work request and
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   126
 * QP state.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   127
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   128
static inline void set_psif_wr__checksum(volatile struct psif_wr *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   129
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   130
	/* group=2 shift=32 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   131
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   132
	pte[2] = htobe64((be64toh(pte[2]) & 0x00000000ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   133
		((((u64)(data)) & 0x00000000ffffffffull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   134
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   135
static inline u32 get_psif_wr__checksum(volatile struct psif_wr *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   136
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   137
	/* group=2 shift=32 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   138
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   139
	return((u32)((be64toh(pte[2]) >> 32) & 0x00000000ffffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   140
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   141
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   142
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   143
 * Index to where elements are added to the send queue by SW. SW is
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   144
 * responsibel for keeping track of how many entries there are in the send
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   145
 * queue. I.e. SW needs to keep track of the head_index so it doesn't
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   146
 * overwrite entries in the send queue which is not yet completed.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   147
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   148
static inline void set_psif_sq_sw__tail_indx(volatile struct psif_sq_sw *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   149
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   150
	/* group=0 shift=32 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   151
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   152
	pte[0] = htobe64((be64toh(pte[0]) & 0xffff0000ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   153
		((((u64)(data)) & 0x000000000000ffffull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   154
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   155
static inline u16 get_psif_sq_sw__tail_indx(volatile struct psif_sq_sw *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   156
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   157
	/* group=0 shift=32 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   158
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   159
	return((u16)((be64toh(pte[0]) >> 32) & 0x000000000000ffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   160
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   161
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   162
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   163
 * Send queue sequence number used by the SQS to maintain ordering and keep
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   164
 * track of where which send queue elements to fetch. This field is not in
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   165
 * sync with the field in qp_t. This number is typically a little bit before
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   166
 * the number in the qp_t as SQS has to fetch the elements from host memory.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   167
 * This is also used as tail_index when checking if there are more elements
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   168
 * in the send queue.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   169
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   170
static inline void set_psif_sq_hw__last_seq(volatile struct psif_sq_hw *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   171
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   172
	/* group=0 shift=16 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   173
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   174
	pte[0] = htobe64((be64toh(pte[0]) & 0xffffffff0000ffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   175
		((((u64)(data)) & 0x000000000000ffffull) << 16));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   176
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   177
static inline u16 get_psif_sq_hw__last_seq(volatile struct psif_sq_hw *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   178
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   179
	/* group=0 shift=16 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   180
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   181
	return((u16)((be64toh(pte[0]) >> 16) & 0x000000000000ffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   182
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   183
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   184
/* QP and UF to be processed next. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   185
static inline void set_psif_sq_hw__sq_next(volatile struct psif_sq_hw *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   186
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   187
	/* group=0 shift=32 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   188
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   189
	pte[0] = htobe64((be64toh(pte[0]) & 0x00000000ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   190
		((((u64)(data)) & 0x00000000ffffffffull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   191
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   192
static inline u32 get_psif_sq_hw__sq_next(volatile struct psif_sq_hw *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   193
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   194
	/* group=0 shift=32 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   195
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   196
	return((u32)((be64toh(pte[0]) >> 32) & 0x00000000ffffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   197
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   198
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   199
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   200
 * This bit is set through the doorbell. SW should check this bit plus
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   201
 * psif_next = null to ensure SW can own the SQ descriptor.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   202
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   203
static inline void set_psif_sq_hw__destroyed(volatile struct psif_sq_hw *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   204
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   205
	/* group=1 shift=27 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   206
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   207
	pte[1] = htobe64((be64toh(pte[1]) & 0xfffffffff7ffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   208
		((((u64)(data)) & 0x0000000000000001ull) << 27));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   209
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   210
static inline u8 get_psif_sq_hw__destroyed(volatile struct psif_sq_hw *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   211
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   212
	/* group=1 shift=27 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   213
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   214
	return((u8)((be64toh(pte[1]) >> 27) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   215
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   216
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   217
/* Software modified index pointing to the tail reecive entry in host memory. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   218
static inline void set_psif_rq_sw__tail_indx(volatile struct psif_rq_sw *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   219
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   220
	/* group=0 shift=32 bits=14 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   221
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   222
	pte[0] = htobe64((be64toh(pte[0]) & 0xffffc000ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   223
		((((u64)(data)) & 0x0000000000003fffull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   224
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   225
static inline u16 get_psif_rq_sw__tail_indx(volatile struct psif_rq_sw *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   226
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   227
	/* group=0 shift=32 bits=14 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   228
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   229
	return((u16)((be64toh(pte[0]) >> 32) & 0x0000000000003fffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   230
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   231
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   232
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   233
 * Hardware modified index pointing to the head of the receive queue. TSU is
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   234
 * using this to find the address of the receive queue entry.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   235
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   236
static inline void set_psif_rq_hw__head_indx(volatile struct psif_rq_hw *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   237
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   238
	/* group=0 shift=14 bits=14 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   239
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   240
	pte[0] = htobe64((be64toh(pte[0]) & 0xfffffffff0003fffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   241
		((((u64)(data)) & 0x0000000000003fffull) << 14));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   242
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   243
static inline u16 get_psif_rq_hw__head_indx(volatile struct psif_rq_hw *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   244
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   245
	/* group=0 shift=14 bits=14 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   246
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   247
	return((u16)((be64toh(pte[0]) >> 14) & 0x0000000000003fffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   248
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   249
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   250
/* The desciptor is valid. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   251
static inline void set_psif_rq_hw__valid(volatile struct psif_rq_hw *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   252
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   253
	/* group=3 shift=55 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   254
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   255
	pte[3] = htobe64((be64toh(pte[3]) & 0xff7fffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   256
		((((u64)(data)) & 0x0000000000000001ull) << 55));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   257
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   258
static inline u8 get_psif_rq_hw__valid(volatile struct psif_rq_hw *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   259
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   260
	/* group=3 shift=55 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   261
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   262
	return((u8)((be64toh(pte[3]) >> 55) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   263
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   264
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   265
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   266
 * Receive queue entry ID. This is added to the receive completion using this
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   267
 * receive queue entry.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   268
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   269
static inline void set_psif_rq_entry__rqe_id(volatile struct psif_rq_entry *ptr, u64 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   270
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   271
	/* group=0 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   272
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   273
	pte[0] = htobe64((__be64)data);
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   274
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   275
static inline u64 get_psif_rq_entry__rqe_id(volatile struct psif_rq_entry *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   276
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   277
	/* group=0 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   278
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   279
	return((u64)be64toh(pte[0]));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   280
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   281
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   282
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   283
 * This retry tag is the one used by tsu_rqs and added to the packets sent to
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   284
 * tsu_dma. It is the responsibility of tsu_rqs to update this retry tag
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   285
 * whenever the sq_sequence_number in QP state is equal to the one in the
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   286
 * request.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   287
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   288
static inline void set_psif_qp_core__retry_tag_committed(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   289
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   290
	/* group=0 shift=0 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   291
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   292
	pte[0] = htobe64((be64toh(pte[0]) & 0xfffffffffffffff8ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   293
		((((u64)(data)) & 0x0000000000000007ull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   294
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   295
static inline u8 get_psif_qp_core__retry_tag_committed(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   296
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   297
	/* group=0 shift=0 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   298
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   299
	return((u8)((be64toh(pte[0]) >> 0) & 0x0000000000000007ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   300
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   301
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   302
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   303
 * This retry tag is updated by the error block when an error occur. If
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   304
 * tsu_rqs reads this retry tag and it is different than the
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   305
 * retry_tag_comitted, tsu_rqs must update retry_tag_comitted to the value of
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   306
 * retry_tag_err when the sq_sequence_number indicates this is the valid
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   307
 * request. The sq_sequence_number has been updated by tsu_err at the same
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   308
 * time the retry_tag_err is updated.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   309
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   310
static inline void set_psif_qp_core__retry_tag_err(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   311
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   312
	/* group=0 shift=3 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   313
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   314
	pte[0] = htobe64((be64toh(pte[0]) & 0xffffffffffffffc7ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   315
		((((u64)(data)) & 0x0000000000000007ull) << 3));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   316
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   317
static inline u8 get_psif_qp_core__retry_tag_err(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   318
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   319
	/* group=0 shift=3 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   320
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   321
	return((u8)((be64toh(pte[0]) >> 3) & 0x0000000000000007ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   322
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   323
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   324
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   325
 * Error retry counter initial value. Read by tsu_dma and used by tsu_cmpl to
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   326
 * calculate exp_backoff etc..
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   327
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   328
static inline void set_psif_qp_core__error_retry_init(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   329
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   330
	/* group=0 shift=32 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   331
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   332
	pte[0] = htobe64((be64toh(pte[0]) & 0xfffffff8ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   333
		((((u64)(data)) & 0x0000000000000007ull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   334
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   335
static inline u8 get_psif_qp_core__error_retry_init(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   336
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   337
	/* group=0 shift=32 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   338
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   339
	return((u8)((be64toh(pte[0]) >> 32) & 0x0000000000000007ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   340
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   341
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   342
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   343
 * Retry counter associated with retries to received NAK or implied NAK. If
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   344
 * it expires, a path migration will be attempted if it is armed, or the QP
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   345
 * will go to error state. Read by tsu_dma and used by tsu_cmpl.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   346
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   347
static inline void set_psif_qp_core__error_retry_count(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   348
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   349
	/* group=0 shift=35 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   350
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   351
	pte[0] = htobe64((be64toh(pte[0]) & 0xffffffc7ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   352
		((((u64)(data)) & 0x0000000000000007ull) << 35));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   353
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   354
static inline u8 get_psif_qp_core__error_retry_count(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   355
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   356
	/* group=0 shift=35 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   357
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   358
	return((u8)((be64toh(pte[0]) >> 35) & 0x0000000000000007ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   359
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   360
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   361
/* A hit in the set locally spun out of tsu_cmpl is found. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   362
static inline void set_psif_qp_core__spin_hit(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   363
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   364
	/* group=0 shift=39 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   365
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   366
	pte[0] = htobe64((be64toh(pte[0]) & 0xffffff7fffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   367
		((((u64)(data)) & 0x0000000000000001ull) << 39));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   368
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   369
static inline u8 get_psif_qp_core__spin_hit(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   370
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   371
	/* group=0 shift=39 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   372
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   373
	return((u8)((be64toh(pte[0]) >> 39) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   374
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   375
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   376
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   377
 * Minium RNR NAK timeout. This is added to RNR NAK packets and the requester
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   378
 * receiving the RNR NAK must wait until the timer has expired before the
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   379
 * retry is sent.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   380
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   381
static inline void set_psif_qp_core__min_rnr_nak_time(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   382
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   383
	/* group=1 shift=0 bits=5 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   384
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   385
	pte[1] = htobe64((be64toh(pte[1]) & 0xffffffffffffffe0ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   386
		((((u64)(data)) & 0x000000000000001full) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   387
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   388
static inline u8 get_psif_qp_core__min_rnr_nak_time(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   389
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   390
	/* group=1 shift=0 bits=5 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   391
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   392
	return((u8)((be64toh(pte[1]) >> 0) & 0x000000000000001full));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   393
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   394
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   395
/* QP State for this QP. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   396
static inline void set_psif_qp_core__state(volatile struct psif_qp_core *ptr, enum psif_qp_state data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   397
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   398
	/* group=1 shift=5 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   399
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   400
	pte[1] = htobe64((be64toh(pte[1]) & 0xffffffffffffff1full) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   401
		((((u64)(data)) & 0x0000000000000007ull) << 5));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   402
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   403
static inline enum psif_qp_state get_psif_qp_core__state(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   404
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   405
	/* group=1 shift=5 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   406
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   407
	return((enum psif_qp_state)((be64toh(pte[1]) >> 5) & 0x0000000000000007ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   408
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   409
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   410
/* QP number for the remote node. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   411
static inline void set_psif_qp_core__remote_qp(volatile struct psif_qp_core *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   412
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   413
	/* group=1 shift=8 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   414
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   415
	pte[1] = htobe64((be64toh(pte[1]) & 0xffffffff000000ffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   416
		((((u64)(data)) & 0x0000000000ffffffull) << 8));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   417
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   418
static inline u32 get_psif_qp_core__remote_qp(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   419
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   420
	/* group=1 shift=8 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   421
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   422
	return((u32)((be64toh(pte[1]) >> 8) & 0x0000000000ffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   423
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   424
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   425
static inline void set_psif_qp_core__retry_sq_seq(volatile struct psif_qp_core *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   426
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   427
	/* group=2 shift=32 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   428
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   429
	pte[2] = htobe64((be64toh(pte[2]) & 0xffff0000ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   430
		((((u64)(data)) & 0x000000000000ffffull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   431
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   432
static inline u16 get_psif_qp_core__retry_sq_seq(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   433
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   434
	/* group=2 shift=32 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   435
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   436
	return((u16)((be64toh(pte[2]) >> 32) & 0x000000000000ffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   437
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   438
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   439
static inline void set_psif_qp_core__sq_seq(volatile struct psif_qp_core *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   440
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   441
	/* group=2 shift=48 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   442
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   443
	pte[2] = htobe64((be64toh(pte[2]) & 0x0000ffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   444
		((((u64)(data)) & 0x000000000000ffffull) << 48));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   445
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   446
static inline u16 get_psif_qp_core__sq_seq(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   447
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   448
	/* group=2 shift=48 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   449
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   450
	return((u16)((be64toh(pte[2]) >> 48) & 0x000000000000ffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   451
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   452
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   453
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   454
 * Magic number used to verify use of QP state. This is done by calculating a
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   455
 * checksum of the work request incorporating the magic number. This checksum
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   456
 * is checked against the checksum in the work request.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   457
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   458
static inline void set_psif_qp_core__magic(volatile struct psif_qp_core *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   459
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   460
	/* group=3 shift=0 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   461
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   462
	pte[3] = htobe64((be64toh(pte[3]) & 0xffffffff00000000ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   463
		((((u64)(data)) & 0x00000000ffffffffull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   464
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   465
static inline u32 get_psif_qp_core__magic(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   466
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   467
	/* group=3 shift=0 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   468
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   469
	return((u32)((be64toh(pte[3]) >> 0) & 0x00000000ffffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   470
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   471
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   472
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   473
 * Q-Key received in incoming IB packet is checked towards this Q-Key. Q-Key
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   474
 * used on transmit if top bit of Q-Key in WR is set.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   475
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   476
static inline void set_psif_qp_core__qkey(volatile struct psif_qp_core *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   477
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   478
	/* group=4 shift=0 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   479
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   480
	pte[4] = htobe64((be64toh(pte[4]) & 0xffffffff00000000ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   481
		((((u64)(data)) & 0x00000000ffffffffull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   482
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   483
static inline u32 get_psif_qp_core__qkey(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   484
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   485
	/* group=4 shift=0 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   486
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   487
	return((u32)((be64toh(pte[4]) >> 0) & 0x00000000ffffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   488
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   489
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   490
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   491
 * Sequence number of the last ACK received. Read and written by tsu_cmpl.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   492
 * Used to verify that the received response packet is a valid response.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   493
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   494
static inline void set_psif_qp_core__last_acked_psn(volatile struct psif_qp_core *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   495
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   496
	/* group=4 shift=40 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   497
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   498
	pte[4] = htobe64((be64toh(pte[4]) & 0x000000ffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   499
		((((u64)(data)) & 0x0000000000ffffffull) << 40));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   500
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   501
static inline u32 get_psif_qp_core__last_acked_psn(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   502
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   503
	/* group=4 shift=40 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   504
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   505
	return((u32)((be64toh(pte[4]) >> 40) & 0x0000000000ffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   506
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   507
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   508
/* Index to scatter element of in progress SEND. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   509
static inline void set_psif_qp_core__scatter_indx(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   510
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   511
	/* group=5 shift=32 bits=5 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   512
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   513
	pte[5] = htobe64((be64toh(pte[5]) & 0xffffffe0ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   514
		((((u64)(data)) & 0x000000000000001full) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   515
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   516
static inline u8 get_psif_qp_core__scatter_indx(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   517
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   518
	/* group=5 shift=32 bits=5 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   519
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   520
	return((u8)((be64toh(pte[5]) >> 32) & 0x000000000000001full));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   521
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   522
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   523
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   524
 * Expected packet sequence number: Sequence number on next expected packet.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   525
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   526
static inline void set_psif_qp_core__expected_psn(volatile struct psif_qp_core *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   527
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   528
	/* group=5 shift=40 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   529
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   530
	pte[5] = htobe64((be64toh(pte[5]) & 0x000000ffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   531
		((((u64)(data)) & 0x0000000000ffffffull) << 40));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   532
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   533
static inline u32 get_psif_qp_core__expected_psn(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   534
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   535
	/* group=5 shift=40 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   536
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   537
	return((u32)((be64toh(pte[5]) >> 40) & 0x0000000000ffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   538
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   539
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   540
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   541
 * TSU quality of service level. Can take values indicating low latency and
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   542
 * high throughput. This is equivalent to high/low BAR when writing doorbells
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   543
 * to PSIF. The qosl bit in the doorbell request must match this bit in the
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   544
 * QP state, otherwise the QP must be put in error. This check only applies
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   545
 * to tsu_rqs.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   546
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   547
static inline void set_psif_qp_core__qosl(volatile struct psif_qp_core *ptr, enum psif_tsu_qos data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   548
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   549
	/* group=6 shift=49 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   550
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   551
	pte[6] = htobe64((be64toh(pte[6]) & 0xfffdffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   552
		((((u64)(data)) & 0x0000000000000001ull) << 49));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   553
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   554
static inline enum psif_tsu_qos get_psif_qp_core__qosl(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   555
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   556
	/* group=6 shift=49 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   557
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   558
	return((enum psif_tsu_qos)((be64toh(pte[6]) >> 49) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   559
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   560
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   561
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   562
 * Migration state (migrated, re-arm and armed). Since path migration is
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   563
 * handled by tsu_qps, this is controlled by tsu_qps. XXX: Should error
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   564
 * handler also be able to change the path?
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   565
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   566
static inline void set_psif_qp_core__mstate(volatile struct psif_qp_core *ptr, enum psif_migration data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   567
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   568
	/* group=6 shift=50 bits=2 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   569
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   570
	pte[6] = htobe64((be64toh(pte[6]) & 0xfff3ffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   571
		((((u64)(data)) & 0x0000000000000003ull) << 50));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   572
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   573
static inline enum psif_migration get_psif_qp_core__mstate(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   574
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   575
	/* group=6 shift=50 bits=2 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   576
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   577
	return((enum psif_migration)((be64toh(pte[6]) >> 50) & 0x0000000000000003ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   578
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   579
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   580
/* This is an IB over IB QP. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   581
static inline void set_psif_qp_core__ipoib_enable(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   582
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   583
	/* group=6 shift=53 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   584
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   585
	pte[6] = htobe64((be64toh(pte[6]) & 0xffdfffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   586
		((((u64)(data)) & 0x0000000000000001ull) << 53));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   587
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   588
static inline u8 get_psif_qp_core__ipoib_enable(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   589
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   590
	/* group=6 shift=53 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   591
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   592
	return((u8)((be64toh(pte[6]) >> 53) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   593
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   594
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   595
/* IB defined capability enable for receiving Atomic operations. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   596
static inline void set_psif_qp_core__atomic_enable(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   597
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   598
	/* group=6 shift=61 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   599
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   600
	pte[6] = htobe64((be64toh(pte[6]) & 0xdfffffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   601
		((((u64)(data)) & 0x0000000000000001ull) << 61));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   602
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   603
static inline u8 get_psif_qp_core__atomic_enable(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   604
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   605
	/* group=6 shift=61 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   606
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   607
	return((u8)((be64toh(pte[6]) >> 61) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   608
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   609
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   610
/* IB defined capability enable for receiving RDMA WR. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   611
static inline void set_psif_qp_core__rdma_wr_enable(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   612
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   613
	/* group=6 shift=62 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   614
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   615
	pte[6] = htobe64((be64toh(pte[6]) & 0xbfffffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   616
		((((u64)(data)) & 0x0000000000000001ull) << 62));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   617
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   618
static inline u8 get_psif_qp_core__rdma_wr_enable(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   619
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   620
	/* group=6 shift=62 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   621
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   622
	return((u8)((be64toh(pte[6]) >> 62) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   623
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   624
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   625
/* IB defined capability enable for receiving RDMA RD. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   626
static inline void set_psif_qp_core__rdma_rd_enable(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   627
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   628
	/* group=6 shift=63 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   629
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   630
	pte[6] = htobe64((be64toh(pte[6]) & 0x7fffffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   631
		((((u64)(data)) & 0x0000000000000001ull) << 63));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   632
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   633
static inline u8 get_psif_qp_core__rdma_rd_enable(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   634
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   635
	/* group=6 shift=63 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   636
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   637
	return((u8)((be64toh(pte[6]) >> 63) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   638
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   639
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   640
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   641
 * Transmit packet sequence number. Read and updated by tsu_dma before
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   642
 * sending packets to tsu_ibpb and tsu_cmpl.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   643
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   644
static inline void set_psif_qp_core__xmit_psn(volatile struct psif_qp_core *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   645
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   646
	/* group=7 shift=0 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   647
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   648
	pte[7] = htobe64((be64toh(pte[7]) & 0xffffffffff000000ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   649
		((((u64)(data)) & 0x0000000000ffffffull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   650
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   651
static inline u32 get_psif_qp_core__xmit_psn(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   652
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   653
	/* group=7 shift=0 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   654
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   655
	return((u32)((be64toh(pte[7]) >> 0) & 0x0000000000ffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   656
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   657
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   658
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   659
 * TSU Service Level used to decide the TSU VL for requests associated with
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   660
 * this QP.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   661
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   662
static inline void set_psif_qp_core__tsl(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   663
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   664
	/* group=7 shift=55 bits=4 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   665
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   666
	pte[7] = htobe64((be64toh(pte[7]) & 0xf87fffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   667
		((((u64)(data)) & 0x000000000000000full) << 55));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   668
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   669
static inline u8 get_psif_qp_core__tsl(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   670
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   671
	/* group=7 shift=55 bits=4 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   672
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   673
	return((u8)((be64toh(pte[7]) >> 55) & 0x000000000000000full));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   674
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   675
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   676
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   677
 * Maximum number of outstanding read or atomic requests allowed by the
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   678
 * remote HCA. Initialized by software.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   679
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   680
static inline void set_psif_qp_core__max_outstanding(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   681
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   682
	/* group=7 shift=59 bits=5 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   683
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   684
	pte[7] = htobe64((be64toh(pte[7]) & 0x07ffffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   685
		((((u64)(data)) & 0x000000000000001full) << 59));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   686
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   687
static inline u8 get_psif_qp_core__max_outstanding(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   688
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   689
	/* group=7 shift=59 bits=5 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   690
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   691
	return((u8)((be64toh(pte[7]) >> 59) & 0x000000000000001full));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   692
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   693
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   694
/* Send Queue RNR retry count initialization value. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   695
static inline void set_psif_qp_core__rnr_retry_init(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   696
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   697
	/* group=8 shift=32 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   698
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   699
	pte[8] = htobe64((be64toh(pte[8]) & 0xfffffff8ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   700
		((((u64)(data)) & 0x0000000000000007ull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   701
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   702
static inline u8 get_psif_qp_core__rnr_retry_init(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   703
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   704
	/* group=8 shift=32 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   705
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   706
	return((u8)((be64toh(pte[8]) >> 32) & 0x0000000000000007ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   707
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   708
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   709
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   710
 * Retry counter associated with RNR NAK retries. If it expires, a path
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   711
 * migration will be attempted if it is armed, or the QP will go to error
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   712
 * state.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   713
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   714
static inline void set_psif_qp_core__rnr_retry_count(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   715
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   716
	/* group=8 shift=35 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   717
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   718
	pte[8] = htobe64((be64toh(pte[8]) & 0xffffffc7ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   719
		((((u64)(data)) & 0x0000000000000007ull) << 35));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   720
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   721
static inline u8 get_psif_qp_core__rnr_retry_count(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   722
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   723
	/* group=8 shift=35 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   724
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   725
	return((u8)((be64toh(pte[8]) >> 35) & 0x0000000000000007ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   726
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   727
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   728
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   729
 * When set, RQS should only check that the orig_checksum is equal to magic
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   730
 * number. When not set, RQS should perform the checksum check towards the
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   731
 * checksum in the psif_wr.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   732
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   733
static inline void set_psif_qp_core__no_checksum(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   734
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   735
	/* group=8 shift=39 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   736
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   737
	pte[8] = htobe64((be64toh(pte[8]) & 0xffffff7fffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   738
		((((u64)(data)) & 0x0000000000000001ull) << 39));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   739
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   740
static inline u8 get_psif_qp_core__no_checksum(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   741
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   742
	/* group=8 shift=39 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   743
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   744
	return((u8)((be64toh(pte[8]) >> 39) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   745
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   746
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   747
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   748
 * Transport type of the QP (RC, UC, UD, XRC, MANSP1). MANSP1 is set for
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   749
 * privileged QPs.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   750
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   751
static inline void set_psif_qp_core__transport_type(volatile struct psif_qp_core *ptr, enum psif_qp_trans data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   752
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   753
	/* group=9 shift=0 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   754
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   755
	pte[9] = htobe64((be64toh(pte[9]) & 0xfffffffffffffff8ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   756
		((((u64)(data)) & 0x0000000000000007ull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   757
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   758
static inline enum psif_qp_trans get_psif_qp_core__transport_type(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   759
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   760
	/* group=9 shift=0 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   761
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   762
	return((enum psif_qp_trans)((be64toh(pte[9]) >> 0) & 0x0000000000000007ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   763
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   764
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   765
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   766
 * Number of bytes received of in progress RDMA Write or SEND. The data
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   767
 * received for SENDs and RDMA WR w/Imm are needed for completions. This
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   768
 * should be added to the msg_length.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   769
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   770
static inline void set_psif_qp_core__bytes_received(volatile struct psif_qp_core *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   771
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   772
	/* group=9 shift=32 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   773
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   774
	pte[9] = htobe64((be64toh(pte[9]) & 0x00000000ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   775
		((((u64)(data)) & 0x00000000ffffffffull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   776
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   777
static inline u32 get_psif_qp_core__bytes_received(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   778
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   779
	/* group=9 shift=32 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   780
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   781
	return((u32)((be64toh(pte[9]) >> 32) & 0x00000000ffffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   782
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   783
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   784
/* This QP is running IP over IB. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   785
static inline void set_psif_qp_core__ipoib(volatile struct psif_qp_core *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   786
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   787
	/* group=10 shift=5 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   788
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   789
	pte[10] = htobe64((be64toh(pte[10]) & 0xffffffffffffffdfull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   790
		((((u64)(data)) & 0x0000000000000001ull) << 5));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   791
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   792
static inline u8 get_psif_qp_core__ipoib(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   793
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   794
	/* group=10 shift=5 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   795
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   796
	return((u8)((be64toh(pte[10]) >> 5) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   797
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   798
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   799
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   800
 * Combined 'Last Received MSN' and 'Last Outstanding MSN', used to maintain
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   801
 * 'spin set floor' and indicate 'all retries completed', respectively.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   802
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   803
static inline void set_psif_qp_core__last_received_outstanding_msn(volatile struct psif_qp_core *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   804
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   805
	/* group=11 shift=0 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   806
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   807
	pte[11] = htobe64((be64toh(pte[11]) & 0xffffffffffff0000ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   808
		((((u64)(data)) & 0x000000000000ffffull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   809
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   810
static inline u16 get_psif_qp_core__last_received_outstanding_msn(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   811
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   812
	/* group=11 shift=0 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   813
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   814
	return((u16)((be64toh(pte[11]) >> 0) & 0x000000000000ffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   815
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   816
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   817
static inline void set_psif_qp_core__path_mtu(volatile struct psif_qp_core *ptr, enum psif_path_mtu data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   818
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   819
	/* group=13 shift=4 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   820
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   821
	pte[13] = htobe64((be64toh(pte[13]) & 0xffffffffffffff8full) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   822
		((((u64)(data)) & 0x0000000000000007ull) << 4));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   823
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   824
static inline enum psif_path_mtu get_psif_qp_core__path_mtu(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   825
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   826
	/* group=13 shift=4 bits=3 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   827
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   828
	return((enum psif_path_mtu)((be64toh(pte[13]) >> 4) & 0x0000000000000007ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   829
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   830
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   831
/* This PSN is committed - ACKs sent will contain this PSN. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   832
static inline void set_psif_qp_core__committed_received_psn(volatile struct psif_qp_core *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   833
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   834
	/* group=13 shift=8 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   835
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   836
	pte[13] = htobe64((be64toh(pte[13]) & 0xffffffff000000ffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   837
		((((u64)(data)) & 0x0000000000ffffffull) << 8));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   838
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   839
static inline u32 get_psif_qp_core__committed_received_psn(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   840
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   841
	/* group=13 shift=8 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   842
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   843
	return((u32)((be64toh(pte[13]) >> 8) & 0x0000000000ffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   844
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   845
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   846
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   847
 * Message sequence number used in AETH when sending ACKs. The number is
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   848
 * incremented every time a new inbound message is processed.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   849
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   850
static inline void set_psif_qp_core__msn(volatile struct psif_qp_core *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   851
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   852
	/* group=14 shift=0 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   853
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   854
	pte[14] = htobe64((be64toh(pte[14]) & 0xffffffffff000000ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   855
		((((u64)(data)) & 0x0000000000ffffffull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   856
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   857
static inline u32 get_psif_qp_core__msn(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   858
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   859
	/* group=14 shift=0 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   860
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   861
	return((u32)((be64toh(pte[14]) >> 0) & 0x0000000000ffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   862
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   863
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   864
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   865
 * This is an index to send completion queue descriptor. The descriptor
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   866
 * points to a send completion queue, which may or may not be the same as the
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   867
 * send completion queue.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   868
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   869
static inline void set_psif_qp_core__send_cq_indx(volatile struct psif_qp_core *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   870
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   871
	/* group=14 shift=24 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   872
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   873
	pte[14] = htobe64((be64toh(pte[14]) & 0xffff000000ffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   874
		((((u64)(data)) & 0x0000000000ffffffull) << 24));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   875
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   876
static inline u32 get_psif_qp_core__send_cq_indx(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   877
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   878
	/* group=14 shift=24 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   879
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   880
	return((u32)((be64toh(pte[14]) >> 24) & 0x0000000000ffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   881
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   882
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   883
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   884
 * Committed MSN - the MSN of the newest committed request for this QP. Only
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   885
 * the bottom 16 bits of the MSN is used.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   886
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   887
static inline void set_psif_qp_core__last_committed_msn(volatile struct psif_qp_core *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   888
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   889
	/* group=14 shift=48 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   890
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   891
	pte[14] = htobe64((be64toh(pte[14]) & 0x0000ffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   892
		((((u64)(data)) & 0x000000000000ffffull) << 48));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   893
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   894
static inline u16 get_psif_qp_core__last_committed_msn(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   895
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   896
	/* group=14 shift=48 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   897
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   898
	return((u16)((be64toh(pte[14]) >> 48) & 0x000000000000ffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   899
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   900
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   901
static inline void set_psif_qp_core__srq_pd(volatile struct psif_qp_core *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   902
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   903
	/* group=15 shift=0 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   904
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   905
	pte[15] = htobe64((be64toh(pte[15]) & 0xffffffffff000000ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   906
		((((u64)(data)) & 0x0000000000ffffffull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   907
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   908
static inline u32 get_psif_qp_core__srq_pd(volatile struct psif_qp_core *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   909
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   910
	/* group=15 shift=0 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   911
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   912
	return((u32)((be64toh(pte[15]) >> 0) & 0x0000000000ffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   913
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   914
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   915
static inline void set_psif_qp_path__remote_gid_0(volatile struct psif_qp_path *ptr, u64 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   916
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   917
	/* group=0 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   918
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   919
	pte[0] = htobe64((__be64)data);
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   920
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   921
static inline u64 get_psif_qp_path__remote_gid_0(volatile struct psif_qp_path *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   922
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   923
	/* group=0 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   924
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   925
	return((u64)be64toh(pte[0]));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   926
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   927
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   928
static inline void set_psif_qp_path__remote_gid_1(volatile struct psif_qp_path *ptr, u64 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   929
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   930
	/* group=1 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   931
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   932
	pte[1] = htobe64((__be64)data);
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   933
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   934
static inline u64 get_psif_qp_path__remote_gid_1(volatile struct psif_qp_path *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   935
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   936
	/* group=1 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   937
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   938
	return((u64)be64toh(pte[1]));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   939
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   940
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   941
static inline void set_psif_qp_path__remote_lid(volatile struct psif_qp_path *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   942
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   943
	/* group=2 shift=0 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   944
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   945
	pte[2] = htobe64((be64toh(pte[2]) & 0xffffffffffff0000ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   946
		((((u64)(data)) & 0x000000000000ffffull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   947
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   948
static inline u16 get_psif_qp_path__remote_lid(volatile struct psif_qp_path *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   949
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   950
	/* group=2 shift=0 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   951
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   952
	return((u16)((be64toh(pte[2]) >> 0) & 0x000000000000ffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   953
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   954
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   955
static inline void set_psif_qp_path__port(volatile struct psif_qp_path *ptr, enum psif_port data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   956
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   957
	/* group=2 shift=17 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   958
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   959
	pte[2] = htobe64((be64toh(pte[2]) & 0xfffffffffffdffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   960
		((((u64)(data)) & 0x0000000000000001ull) << 17));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   961
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   962
static inline enum psif_port get_psif_qp_path__port(volatile struct psif_qp_path *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   963
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   964
	/* group=2 shift=17 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   965
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   966
	return((enum psif_port)((be64toh(pte[2]) >> 17) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   967
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   968
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   969
static inline void set_psif_qp_path__loopback(volatile struct psif_qp_path *ptr, enum psif_loopback data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   970
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   971
	/* group=2 shift=18 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   972
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   973
	pte[2] = htobe64((be64toh(pte[2]) & 0xfffffffffffbffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   974
		((((u64)(data)) & 0x0000000000000001ull) << 18));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   975
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   976
static inline enum psif_loopback get_psif_qp_path__loopback(volatile struct psif_qp_path *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   977
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   978
	/* group=2 shift=18 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   979
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   980
	return((enum psif_loopback)((be64toh(pte[2]) >> 18) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   981
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   982
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   983
static inline void set_psif_qp_path__use_grh(volatile struct psif_qp_path *ptr, enum psif_use_grh data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   984
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   985
	/* group=2 shift=19 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   986
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   987
	pte[2] = htobe64((be64toh(pte[2]) & 0xfffffffffff7ffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   988
		((((u64)(data)) & 0x0000000000000001ull) << 19));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   989
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   990
static inline enum psif_use_grh get_psif_qp_path__use_grh(volatile struct psif_qp_path *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   991
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   992
	/* group=2 shift=19 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   993
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   994
	return((enum psif_use_grh)((be64toh(pte[2]) >> 19) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   995
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   996
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   997
static inline void set_psif_qp_path__sl(volatile struct psif_qp_path *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   998
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
   999
	/* group=2 shift=20 bits=4 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1000
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1001
	pte[2] = htobe64((be64toh(pte[2]) & 0xffffffffff0fffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1002
		((((u64)(data)) & 0x000000000000000full) << 20));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1003
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1004
static inline u8 get_psif_qp_path__sl(volatile struct psif_qp_path *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1005
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1006
	/* group=2 shift=20 bits=4 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1007
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1008
	return((u8)((be64toh(pte[2]) >> 20) & 0x000000000000000full));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1009
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1010
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1011
static inline void set_psif_qp_path__hoplmt(volatile struct psif_qp_path *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1012
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1013
	/* group=2 shift=28 bits=8 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1014
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1015
	pte[2] = htobe64((be64toh(pte[2]) & 0xfffffff00fffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1016
		((((u64)(data)) & 0x00000000000000ffull) << 28));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1017
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1018
static inline u8 get_psif_qp_path__hoplmt(volatile struct psif_qp_path *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1019
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1020
	/* group=2 shift=28 bits=8 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1021
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1022
	return((u8)((be64toh(pte[2]) >> 28) & 0x00000000000000ffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1023
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1024
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1025
static inline void set_psif_qp_path__flowlabel(volatile struct psif_qp_path *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1026
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1027
	/* group=2 shift=44 bits=20 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1028
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1029
	pte[2] = htobe64((be64toh(pte[2]) & 0x00000fffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1030
		((((u64)(data)) & 0x00000000000fffffull) << 44));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1031
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1032
static inline u32 get_psif_qp_path__flowlabel(volatile struct psif_qp_path *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1033
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1034
	/* group=2 shift=44 bits=20 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1035
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1036
	return((u32)((be64toh(pte[2]) >> 44) & 0x00000000000fffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1037
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1038
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1039
static inline void set_psif_qp_path__local_ack_timeout(volatile struct psif_qp_path *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1040
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1041
	/* group=3 shift=27 bits=5 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1042
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1043
	pte[3] = htobe64((be64toh(pte[3]) & 0xffffffff07ffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1044
		((((u64)(data)) & 0x000000000000001full) << 27));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1045
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1046
static inline u8 get_psif_qp_path__local_ack_timeout(volatile struct psif_qp_path *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1047
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1048
	/* group=3 shift=27 bits=5 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1049
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1050
	return((u8)((be64toh(pte[3]) >> 27) & 0x000000000000001full));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1051
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1052
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1053
static inline void set_psif_qp_path__ipd(volatile struct psif_qp_path *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1054
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1055
	/* group=3 shift=32 bits=8 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1056
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1057
	pte[3] = htobe64((be64toh(pte[3]) & 0xffffff00ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1058
		((((u64)(data)) & 0x00000000000000ffull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1059
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1060
static inline u8 get_psif_qp_path__ipd(volatile struct psif_qp_path *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1061
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1062
	/* group=3 shift=32 bits=8 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1063
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1064
	return((u8)((be64toh(pte[3]) >> 32) & 0x00000000000000ffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1065
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1066
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1067
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1068
 * This is the LID path bits. This is used by tsu_ibpb when generating the
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1069
 * SLID in the packet, and it is used by tsu_rcv when checking the DLID.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1070
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1071
static inline void set_psif_qp_path__local_lid_path(volatile struct psif_qp_path *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1072
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1073
	/* group=3 shift=48 bits=7 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1074
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1075
	pte[3] = htobe64((be64toh(pte[3]) & 0xff80ffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1076
		((((u64)(data)) & 0x000000000000007full) << 48));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1077
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1078
static inline u8 get_psif_qp_path__local_lid_path(volatile struct psif_qp_path *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1079
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1080
	/* group=3 shift=48 bits=7 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1081
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1082
	return((u8)((be64toh(pte[3]) >> 48) & 0x000000000000007full));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1083
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1084
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1085
static inline void set_psif_qp_path__pkey_indx(volatile struct psif_qp_path *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1086
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1087
	/* group=3 shift=55 bits=9 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1088
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1089
	pte[3] = htobe64((be64toh(pte[3]) & 0x007fffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1090
		((((u64)(data)) & 0x00000000000001ffull) << 55));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1091
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1092
static inline u16 get_psif_qp_path__pkey_indx(volatile struct psif_qp_path *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1093
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1094
	/* group=3 shift=55 bits=9 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1095
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1096
	return((u16)((be64toh(pte[3]) >> 55) & 0x00000000000001ffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1097
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1098
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1099
/* L-key state for this DMA validation entry */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1100
static inline void set_psif_key__lkey_state(volatile struct psif_key *ptr, enum psif_dma_vt_key_states data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1101
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1102
	/* group=0 shift=60 bits=2 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1103
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1104
	pte[0] = htobe64((be64toh(pte[0]) & 0xcfffffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1105
		((((u64)(data)) & 0x0000000000000003ull) << 60));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1106
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1107
static inline enum psif_dma_vt_key_states get_psif_key__lkey_state(volatile struct psif_key *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1108
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1109
	/* group=0 shift=60 bits=2 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1110
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1111
	return((enum psif_dma_vt_key_states)((be64toh(pte[0]) >> 60) & 0x0000000000000003ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1112
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1113
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1114
/* R-key state for this DMA validation entry */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1115
static inline void set_psif_key__rkey_state(volatile struct psif_key *ptr, enum psif_dma_vt_key_states data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1116
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1117
	/* group=0 shift=62 bits=2 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1118
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1119
	pte[0] = htobe64((be64toh(pte[0]) & 0x3fffffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1120
		((((u64)(data)) & 0x0000000000000003ull) << 62));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1121
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1122
static inline enum psif_dma_vt_key_states get_psif_key__rkey_state(volatile struct psif_key *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1123
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1124
	/* group=0 shift=62 bits=2 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1125
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1126
	return((enum psif_dma_vt_key_states)((be64toh(pte[0]) >> 62) & 0x0000000000000003ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1127
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1128
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1129
/* Length of memory region this validation entry is associated with. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1130
static inline void set_psif_key__length(volatile struct psif_key *ptr, u64 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1131
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1132
	/* group=1 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1133
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1134
	pte[1] = htobe64((__be64)data);
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1135
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1136
static inline u64 get_psif_key__length(volatile struct psif_key *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1137
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1138
	/* group=1 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1139
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1140
	return((u64)be64toh(pte[1]));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1141
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1142
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1143
static inline void set_psif_key__mmu_context(volatile struct psif_key *ptr, u64 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1144
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1145
	/* group=2 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1146
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1147
	pte[2] = htobe64((__be64)data);
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1148
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1149
static inline u64 get_psif_key__mmu_context(volatile struct psif_key *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1150
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1151
	/* group=2 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1152
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1153
	return((u64)be64toh(pte[2]));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1154
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1155
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1156
static inline void set_psif_key__base_addr(volatile struct psif_key *ptr, u64 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1157
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1158
	/* group=3 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1159
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1160
	pte[3] = htobe64((__be64)data);
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1161
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1162
static inline u64 get_psif_key__base_addr(volatile struct psif_key *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1163
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1164
	/* group=3 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1165
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1166
	return((u64)be64toh(pte[3]));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1167
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1168
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1169
/* sequence number for sanity checking */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1170
static inline void set_psif_eq_entry__seq_num(volatile struct psif_eq_entry *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1171
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1172
	/* group=7 shift=0 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1173
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1174
	pte[7] = htobe64((be64toh(pte[7]) & 0xffffffff00000000ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1175
		((((u64)(data)) & 0x00000000ffffffffull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1176
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1177
static inline u32 get_psif_eq_entry__seq_num(volatile struct psif_eq_entry *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1178
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1179
	/* group=7 shift=0 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1180
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1181
	return((u32)((be64toh(pte[7]) >> 0) & 0x00000000ffffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1182
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1183
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1184
/* enum psif_epsc_csr_opcode from request */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1185
static inline void set_psif_epsc_csr_rsp__opcode(volatile struct psif_epsc_csr_rsp *ptr, enum psif_epsc_csr_opcode data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1186
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1187
	/* group=0 shift=48 bits=8 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1188
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1189
	pte[0] = htobe64((be64toh(pte[0]) & 0xff00ffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1190
		((((u64)(data)) & 0x00000000000000ffull) << 48));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1191
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1192
static inline enum psif_epsc_csr_opcode get_psif_epsc_csr_rsp__opcode(volatile struct psif_epsc_csr_rsp *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1193
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1194
	/* group=0 shift=48 bits=8 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1195
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1196
	return((enum psif_epsc_csr_opcode)((be64toh(pte[0]) >> 48) & 0x00000000000000ffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1197
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1198
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1199
/* Sequence number from request */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1200
static inline void set_psif_epsc_csr_rsp__seq_num(volatile struct psif_epsc_csr_rsp *ptr, u64 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1201
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1202
	/* group=3 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1203
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1204
	pte[3] = htobe64((__be64)data);
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1205
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1206
static inline u64 get_psif_epsc_csr_rsp__seq_num(volatile struct psif_epsc_csr_rsp *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1207
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1208
	/* group=3 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1209
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1210
	return((u64)be64toh(pte[3]));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1211
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1212
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1213
/* Sequence number - included in response */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1214
static inline void set_psif_epsc_csr_req__seq_num(volatile struct psif_epsc_csr_req *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1215
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1216
	/* group=0 shift=32 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1217
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1218
	pte[0] = htobe64((be64toh(pte[0]) & 0xffff0000ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1219
		((((u64)(data)) & 0x000000000000ffffull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1220
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1221
static inline u16 get_psif_epsc_csr_req__seq_num(volatile struct psif_epsc_csr_req *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1222
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1223
	/* group=0 shift=32 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1224
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1225
	return((u16)((be64toh(pte[0]) >> 32) & 0x000000000000ffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1226
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1227
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1228
static inline void set_psif_epsc_csr_req__opcode(volatile struct psif_epsc_csr_req *ptr, enum psif_epsc_csr_opcode data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1229
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1230
	/* group=0 shift=56 bits=8 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1231
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1232
	pte[0] = htobe64((be64toh(pte[0]) & 0x00ffffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1233
		((((u64)(data)) & 0x00000000000000ffull) << 56));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1234
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1235
static inline enum psif_epsc_csr_opcode get_psif_epsc_csr_req__opcode(volatile struct psif_epsc_csr_req *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1236
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1237
	/* group=0 shift=56 bits=8 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1238
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1239
	return((enum psif_epsc_csr_opcode)((be64toh(pte[0]) >> 56) & 0x00000000000000ffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1240
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1241
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1242
/* Index to completion elements added by SW. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1243
static inline void set_psif_cq_sw__head_indx(volatile struct psif_cq_sw *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1244
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1245
	/* group=0 shift=32 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1246
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1247
	pte[0] = htobe64((be64toh(pte[0]) & 0x00000000ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1248
		((((u64)(data)) & 0x00000000ffffffffull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1249
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1250
static inline u32 get_psif_cq_sw__head_indx(volatile struct psif_cq_sw *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1251
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1252
	/* group=0 shift=32 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1253
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1254
	return((u32)((be64toh(pte[0]) >> 32) & 0x00000000ffffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1255
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1256
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1257
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1258
 * EPS-A core number completions are forwarded to if the proxy_enabled bit is
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1259
 * set.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1260
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1261
static inline void set_psif_cq_hw__eps_core(volatile struct psif_cq_hw *ptr, enum psif_eps_a_core data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1262
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1263
	/* group=0 shift=52 bits=2 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1264
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1265
	pte[0] = htobe64((be64toh(pte[0]) & 0xffcfffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1266
		((((u64)(data)) & 0x0000000000000003ull) << 52));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1267
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1268
static inline enum psif_eps_a_core get_psif_cq_hw__eps_core(volatile struct psif_cq_hw *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1269
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1270
	/* group=0 shift=52 bits=2 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1271
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1272
	return((enum psif_eps_a_core)((be64toh(pte[0]) >> 52) & 0x0000000000000003ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1273
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1274
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1275
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1276
 * If set, this completion queue is proxy enabled and should send completions
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1277
 * to EPS core indicated by the eps_core field.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1278
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1279
static inline void set_psif_cq_hw__proxy_en(volatile struct psif_cq_hw *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1280
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1281
	/* group=0 shift=54 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1282
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1283
	pte[0] = htobe64((be64toh(pte[0]) & 0xffbfffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1284
		((((u64)(data)) & 0x0000000000000001ull) << 54));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1285
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1286
static inline u8 get_psif_cq_hw__proxy_en(volatile struct psif_cq_hw *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1287
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1288
	/* group=0 shift=54 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1289
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1290
	return((u8)((be64toh(pte[0]) >> 54) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1291
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1292
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1293
/* The descriptor is valid. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1294
static inline void set_psif_cq_hw__valid(volatile struct psif_cq_hw *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1295
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1296
	/* group=0 shift=60 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1297
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1298
	pte[0] = htobe64((be64toh(pte[0]) & 0xefffffffffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1299
		((((u64)(data)) & 0x0000000000000001ull) << 60));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1300
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1301
static inline u8 get_psif_cq_hw__valid(volatile struct psif_cq_hw *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1302
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1303
	/* group=0 shift=60 bits=1 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1304
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1305
	return((u8)((be64toh(pte[0]) >> 60) & 0x0000000000000001ull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1306
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1307
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1308
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1309
 * VA or PA of the base of the completion queue. If PA the MMU context above
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1310
 * will be a bypass context. Updated by software. The head and tail pointers
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1311
 * can be calculated by the following calculations: Address = base_ptr +
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1312
 * (head * ($bits(completion_entry_t)/8 ) Head Pointer and Tail Pointer will
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1313
 * use the same MMU context as the base, and all need to be VA from one
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1314
 * address space, or all need to be PA. In typical use, to allow direct user
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1315
 * access to the head and tail pointer VAs are used.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1316
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1317
static inline void set_psif_cq_hw__base_addr(volatile struct psif_cq_hw *ptr, u64 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1318
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1319
	/* group=2 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1320
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1321
	pte[2] = htobe64((__be64)data);
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1322
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1323
static inline u64 get_psif_cq_hw__base_addr(volatile struct psif_cq_hw *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1324
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1325
	/* group=2 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1326
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1327
	return((u64)be64toh(pte[2]));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1328
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1329
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1330
/* Index to completion elements to be consumed by HW. */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1331
static inline void set_psif_cq_hw__tail_indx(volatile struct psif_cq_hw *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1332
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1333
	/* group=3 shift=32 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1334
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1335
	pte[3] = htobe64((be64toh(pte[3]) & 0x00000000ffffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1336
		((((u64)(data)) & 0x00000000ffffffffull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1337
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1338
static inline u32 get_psif_cq_hw__tail_indx(volatile struct psif_cq_hw *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1339
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1340
	/* group=3 shift=32 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1341
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1342
	return((u32)((be64toh(pte[3]) >> 32) & 0x00000000ffffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1343
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1344
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1345
/*
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1346
 * Work queue completion ID. For receive completions this is the entry number
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1347
 * in the receive queue and the receive queue descriptor index. For send
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1348
 * completions this is the sq_sequence number.
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1349
 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1350
static inline void set_psif_cq_entry__wc_id(volatile struct psif_cq_entry *ptr, u64 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1351
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1352
	/* group=0 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1353
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1354
	pte[0] = htobe64((__be64)data);
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1355
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1356
static inline u64 get_psif_cq_entry__wc_id(volatile struct psif_cq_entry *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1357
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1358
	/* group=0 shift=0 bits=64 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1359
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1360
	return((u64)be64toh(pte[0]));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1361
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1362
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1363
static inline void set_psif_cq_entry__qp(volatile struct psif_cq_entry *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1364
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1365
	/* group=1 shift=0 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1366
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1367
	pte[1] = htobe64((be64toh(pte[1]) & 0xffffffffff000000ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1368
		((((u64)(data)) & 0x0000000000ffffffull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1369
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1370
static inline u32 get_psif_cq_entry__qp(volatile struct psif_cq_entry *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1371
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1372
	/* group=1 shift=0 bits=24 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1373
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1374
	return((u32)((be64toh(pte[1]) >> 0) & 0x0000000000ffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1375
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1376
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1377
static inline void set_psif_cq_entry__opcode(volatile struct psif_cq_entry *ptr, enum psif_wc_opcode data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1378
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1379
	/* group=1 shift=24 bits=8 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1380
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1381
	pte[1] = htobe64((be64toh(pte[1]) & 0xffffffff00ffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1382
		((((u64)(data)) & 0x00000000000000ffull) << 24));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1383
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1384
static inline enum psif_wc_opcode get_psif_cq_entry__opcode(volatile struct psif_cq_entry *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1385
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1386
	/* group=1 shift=24 bits=8 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1387
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1388
	return((enum psif_wc_opcode)((be64toh(pte[1]) >> 24) & 0x00000000000000ffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1389
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1390
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1391
static inline void set_psif_cq_entry__status(volatile struct psif_cq_entry *ptr, enum psif_wc_status data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1392
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1393
	/* group=2 shift=24 bits=8 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1394
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1395
	pte[2] = htobe64((be64toh(pte[2]) & 0xffffffff00ffffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1396
		((((u64)(data)) & 0x00000000000000ffull) << 24));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1397
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1398
static inline enum psif_wc_status get_psif_cq_entry__status(volatile struct psif_cq_entry *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1399
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1400
	/* group=2 shift=24 bits=8 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1401
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1402
	return((enum psif_wc_status)((be64toh(pte[2]) >> 24) & 0x00000000000000ffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1403
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1404
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1405
/* sequence number for sanity checking */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1406
static inline void set_psif_cq_entry__seq_num(volatile struct psif_cq_entry *ptr, u32 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1407
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1408
	/* group=7 shift=0 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1409
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1410
	pte[7] = htobe64((be64toh(pte[7]) & 0xffffffff00000000ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1411
		((((u64)(data)) & 0x00000000ffffffffull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1412
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1413
static inline u32 get_psif_cq_entry__seq_num(volatile struct psif_cq_entry *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1414
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1415
	/* group=7 shift=0 bits=32 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1416
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1417
	return((u32)((be64toh(pte[7]) >> 0) & 0x00000000ffffffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1418
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1419
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1420
static inline void set_psif_ah__remote_lid(volatile struct psif_ah *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1421
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1422
	/* group=2 shift=0 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1423
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1424
	pte[2] = htobe64((be64toh(pte[2]) & 0xffffffffffff0000ull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1425
		((((u64)(data)) & 0x000000000000ffffull) << 0));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1426
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1427
static inline u16 get_psif_ah__remote_lid(volatile struct psif_ah *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1428
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1429
	/* group=2 shift=0 bits=16 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1430
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1431
	return((u16)((be64toh(pte[2]) >> 0) & 0x000000000000ffffull));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1432
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1433
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1434
static inline void set_psif_ah__sl(volatile struct psif_ah *ptr, u8 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1435
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1436
	/* group=2 shift=20 bits=4 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1437
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1438
	pte[2] = htobe64((be64toh(pte[2]) & 0xffffffffff0fffffull) | 
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1439
		((((u64)(data)) & 0x000000000000000full) << 20));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1440
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1441
static inline u8 get_psif_ah__sl(volatile struct psif_ah *ptr)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1442
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1443
	/* group=2 shift=20 bits=4 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1444
	volatile __be64 *const pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1445
	return((u8)((be64toh(pte[2]) >> 20) & 0x000000000000000full));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1446
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1447
static inline void set_psif_csr_mmu_config__ta_upper_twelve(volatile void *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1448
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1449
	        /* group=0 shift=32 bits=12 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1450
	        volatile __be64 *pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1451
		        pte[0] = htobe64((be64toh(pte[0]) & 0xfffff000ffffffffull) |
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1452
			                    ((((u64)(data)) & 0x0000000000000fffull) << 32));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1453
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1454
static inline void set_psif_csr_mmu_config__pa_upper_twelve(volatile void *ptr, u16 data)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1455
{
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1456
	        /* group=0 shift=48 bits=12 */
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1457
	        volatile __be64 *pte = (__be64 *)ptr;
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1458
		        pte[0] = htobe64((be64toh(pte[0]) & 0xf000ffffffffffffull) |
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1459
			                    ((((u64)(data)) & 0x0000000000000fffull) << 48));
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1460
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1461
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1462
#if defined (HOST_LITTLE_ENDIAN)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1463
#elif defined (HOST_BIG_ENDIAN)
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1464
#else
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1465
#error "Could not determine byte order in psif_hw_setget.h !?"
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1466
#endif
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1467
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1468
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1469
#ifdef __cplusplus
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1470
}
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1471
#endif
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1472
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1473
e533d5840fdd PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff changeset
  1474
#endif	/* _PSIF_HW_SETGET_H */