|
Packit |
857059 |
/* BEGIN_ICS_COPYRIGHT3 ****************************************
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Copyright (c) 2015, Intel Corporation
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Redistribution and use in source and binary forms, with or without
|
|
Packit |
857059 |
modification, are permitted provided that the following conditions are met:
|
|
Packit |
857059 |
|
|
Packit |
857059 |
* Redistributions of source code must retain the above copyright notice,
|
|
Packit |
857059 |
this list of conditions and the following disclaimer.
|
|
Packit |
857059 |
* Redistributions in binary form must reproduce the above copyright
|
|
Packit |
857059 |
notice, this list of conditions and the following disclaimer in the
|
|
Packit |
857059 |
documentation and/or other materials provided with the distribution.
|
|
Packit |
857059 |
* Neither the name of Intel Corporation nor the names of its contributors
|
|
Packit |
857059 |
may be used to endorse or promote products derived from this software
|
|
Packit |
857059 |
without specific prior written permission.
|
|
Packit |
857059 |
|
|
Packit |
857059 |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
Packit |
857059 |
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit |
857059 |
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
Packit |
857059 |
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
Packit |
857059 |
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit |
857059 |
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
Packit |
857059 |
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
Packit |
857059 |
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
Packit |
857059 |
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
Packit |
857059 |
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
Packit |
857059 |
|
|
Packit |
857059 |
** END_ICS_COPYRIGHT3 ****************************************/
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* [ICS VERSION STRING: unknown] */
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* Infiniband low level Link, Network and Transport Layer headers.
|
|
Packit |
857059 |
* Generally these are handled by the CA hardware. However in some cases
|
|
Packit |
857059 |
* for special QPs, the Verbs Provider must hand build these headers.
|
|
Packit |
857059 |
* Hence this file provides a common implementation for them
|
|
Packit |
857059 |
*
|
|
Packit |
857059 |
* The GRH header is more visible and is defined in ib_types.h
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#ifndef _IBA_IB_PKT_H_
|
|
Packit |
857059 |
#define _IBA_IB_PKT_H_ (1)
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include "iba/public/datatypes.h"
|
|
Packit |
857059 |
#include "iba/stl_types.h"
|
|
Packit |
857059 |
#include "iba/stl_helper.h"
|
|
Packit |
857059 |
#include "iba/public/ibyteswap.h"
|
|
Packit |
857059 |
#include "iba/public/imemory.h"
|
|
Packit |
857059 |
#include "iba/public/ispinlock.h"
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#if defined (__cplusplus)
|
|
Packit |
857059 |
extern "C" {
|
|
Packit |
857059 |
#endif
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include "iba/public/ipackon.h"
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/*
|
|
Packit |
857059 |
* IB packet headers
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/*
|
|
Packit |
857059 |
* Local Route Header
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
typedef struct _IB_LRH {
|
|
Packit |
857059 |
struct _IB_LRH_V { IB_BITFIELD2(uint8,
|
|
Packit |
857059 |
VL: 4, /* Virtual lane */
|
|
Packit |
857059 |
LinkVersion: 4) /* Link version */
|
|
Packit |
857059 |
} v;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
struct _IB_LRH_LNH { IB_BITFIELD3(uint8,
|
|
Packit |
857059 |
ServiceLevel: 4, /* service level */
|
|
Packit |
857059 |
Reserved: 2,
|
|
Packit |
857059 |
LNH: 2) /* this field identifies the headers */
|
|
Packit |
857059 |
/* that follow LRH */
|
|
Packit |
857059 |
} l;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
IB_LID DestLID; /* destination LID */
|
|
Packit |
857059 |
|
|
Packit |
857059 |
union _IB_LRH_PKT {
|
|
Packit |
857059 |
uint16 AsUINT16;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
struct _IB_LRH_PKT_S {IB_BITFIELD2(uint16,
|
|
Packit |
857059 |
Reserved: 5,
|
|
Packit |
857059 |
Length: 11) /* Packet length. Identifies sizeof */
|
|
Packit |
857059 |
/* packet in 4 byte increments. */
|
|
Packit |
857059 |
/* This field includes first byte */
|
|
Packit |
857059 |
/* of LRH to last byte before the */
|
|
Packit |
857059 |
/* variant CRC. */
|
|
Packit |
857059 |
} s;
|
|
Packit |
857059 |
} Packet;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
IB_LID SrcLID; /* source LID */
|
|
Packit |
857059 |
} PACK_SUFFIX IB_LRH;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/*
|
|
Packit |
857059 |
* Link Next Header types (LRH.l.LNH)
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
typedef enum {
|
|
Packit |
857059 |
LNH_RAW_ETHERTYPE = 0,
|
|
Packit |
857059 |
LNH_RAW_GRH,
|
|
Packit |
857059 |
LNH_BTH,
|
|
Packit |
857059 |
LNH_GRH
|
|
Packit |
857059 |
} LNH;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define LRH_IS_GLOBAL(lrh) (lrh->l.LNH == LNH_GRH)
|
|
Packit |
857059 |
|
|
Packit |
857059 |
static __inline void
|
|
Packit |
857059 |
BSWAP_IB_LRH(
|
|
Packit |
857059 |
IB_LRH *Header
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
Header->DestLID = ntoh16(Header->DestLID);
|
|
Packit |
857059 |
Header->Packet.AsUINT16 = ntoh16(Header->Packet.AsUINT16);
|
|
Packit |
857059 |
Header->SrcLID = ntoh16(Header->SrcLID);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* Network Header (IB_GRH) is defined in ib_types.h
|
|
Packit |
857059 |
* The IB_GRH structure is more visible since it is the 1st 40 bytes of all
|
|
Packit |
857059 |
* UD receive buffers
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/*
|
|
Packit |
857059 |
* Base Transport Header
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
typedef struct _IB_BTH {
|
|
Packit |
857059 |
uint8 OpCode;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
struct _IB_BTH_V {IB_BITFIELD4(uint8,
|
|
Packit |
857059 |
SolicitedEvent: 1,
|
|
Packit |
857059 |
Migrate: 1,
|
|
Packit |
857059 |
PadCount: 2,
|
|
Packit |
857059 |
HeaderVersion: 4) /* Transport Header version */
|
|
Packit |
857059 |
} v;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
IB_P_KEY Pkey;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
union _IB_BTH_QP {
|
|
Packit |
857059 |
uint32 AsUINT32;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
struct _IB_BTH_QP_S {IB_BITFIELD2(uint32,
|
|
Packit |
857059 |
Reserved: 8,
|
|
Packit |
857059 |
DestQPNumber: 24)
|
|
Packit |
857059 |
} s;
|
|
Packit |
857059 |
} Qp;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
union _IB_BTH_PSN {
|
|
Packit |
857059 |
uint32 AsUINT32;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
struct _IB_BTH_PSN_S {IB_BITFIELD3(uint32,
|
|
Packit |
857059 |
AckReq: 1,
|
|
Packit |
857059 |
Reserved: 7,
|
|
Packit |
857059 |
PSN: 24)
|
|
Packit |
857059 |
} s;
|
|
Packit |
857059 |
} Psn;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
} PACK_SUFFIX IB_BTH;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* opcode is composed of a 3 bit QP TYPE and a 5 bit message type */
|
|
Packit |
857059 |
#define BTH_OPCODE_QP_TYPE_MASK 0xE0
|
|
Packit |
857059 |
#define BTH_OPCODE_MSG_TYPE_MASK 0x1F
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* value for upper 3 bits of BTH_OPCODE */
|
|
Packit |
857059 |
typedef enum {
|
|
Packit |
857059 |
BTH_OPCODE_RC = 0x00,
|
|
Packit |
857059 |
BTH_OPCODE_UC = 0x20,
|
|
Packit |
857059 |
BTH_OPCODE_RD = 0x40,
|
|
Packit |
857059 |
BTH_OPCODE_UD = 0x60
|
|
Packit |
857059 |
/* 0x80, 0xA0 reserved */
|
|
Packit |
857059 |
/* 0xC0, 0xE0 manufacturer specific opcodes */
|
|
Packit |
857059 |
} BTH_OPCODE_QP_TYPE;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* value for low 5 bits of BTH_OPCODE */
|
|
Packit |
857059 |
typedef enum {
|
|
Packit |
857059 |
BTH_OPCODE_SEND_FIRST=0x00,
|
|
Packit |
857059 |
BTH_OPCODE_SEND_MIDDLE=0x01,
|
|
Packit |
857059 |
BTH_OPCODE_SEND_LAST=0x02,
|
|
Packit |
857059 |
BTH_OPCODE_SEND_LAST_IMMED=0x03,
|
|
Packit |
857059 |
BTH_OPCODE_SEND_ONLY=0x04,
|
|
Packit |
857059 |
BTH_OPCODE_SEND_ONLY_IMMED=0x05,
|
|
Packit |
857059 |
BTH_OPCODE_RDMA_WRITE_FIRST=0x06,
|
|
Packit |
857059 |
BTH_OPCODE_RDMA_WRITE_MIDDLE=0x07,
|
|
Packit |
857059 |
BTH_OPCODE_RDMA_WRITE_LAST=0x08,
|
|
Packit |
857059 |
BTH_OPCODE_RDMA_WRITE_LAST_IMMED=0x09,
|
|
Packit |
857059 |
BTH_OPCODE_RDMA_WRITE_ONLY=0x0A,
|
|
Packit |
857059 |
BTH_OPCODE_RDMA_WRITE_ONLY_IMMED=0x0B,
|
|
Packit |
857059 |
BTH_OPCODE_RDMA_READ_REQ=0x0C,
|
|
Packit |
857059 |
BTH_OPCODE_RDMA_READ_RESP_FIRST=0x0D,
|
|
Packit |
857059 |
BTH_OPCODE_RDMA_READ_RESP_MIDDLE=0x0E,
|
|
Packit |
857059 |
BTH_OPCODE_RDMA_READ_RESP_LAST=0x0F,
|
|
Packit |
857059 |
BTH_OPCODE_RDMA_READ_RESP_ONLY=0x10,
|
|
Packit |
857059 |
BTH_OPCODE_ACK=0x11,
|
|
Packit |
857059 |
BTH_OPCODE_ATOMIC_ACK=0x12,
|
|
Packit |
857059 |
BTH_OPCODE_CMP_SWAP=0x13,
|
|
Packit |
857059 |
BTH_OPCODE_FETCH_ADD=0x14,
|
|
Packit |
857059 |
BTH_OPCODE_RESYNC=0x15,
|
|
Packit |
857059 |
/* 0x15 - 0x1f reserved */
|
|
Packit |
857059 |
} BTH_OPCODE_MSG_TYPE;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/*
|
|
Packit |
857059 |
* OpCode (BTH.OpCode)
|
|
Packit |
857059 |
* Note not all combinations of QP_TYPE and MSG_TYPE are valid
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_SEND_FIRST (BTH_OPCODE_RC|BTH_OPCODE_SEND_FIRST)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_SEND_MIDDLE (BTH_OPCODE_RC|BTH_OPCODE_SEND_MIDDLE)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_SEND_LAST (BTH_OPCODE_RC|BTH_OPCODE_SEND_LAST)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_SEND_LAST_IMMED (BTH_OPCODE_RC|BTH_OPCODE_SEND_LAST_IMMED)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_SEND_ONLY (BTH_OPCODE_RC|BTH_OPCODE_SEND_ONLY)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_SEND_ONLY_IMMED (BTH_OPCODE_RC | BTH_OPCODE_SEND_ONLY_IMMED)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_RDMA_WRITE_FIRST (BTH_OPCODE_RC | BTH_OPCODE_RDMA_WRITE_FIRST)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_RDMA_WRITE_MIDDLE (BTH_OPCODE_RC | BTH_OPCODE_RDMA_WRITE_MIDDLE)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_RDMA_WRITE_LAST (BTH_OPCODE_RC | BTH_OPCODE_RDMA_WRITE_LAST)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_RDMA_WRITE_LAST_IMMED (BTH_OPCODE_RC | BTH_OPCODE_RDMA_WRITE_LAST_IMMED)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_RDMA_WRITE_ONLY (BTH_OPCODE_RC | BTH_OPCODE_RDMA_WRITE_ONLY)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_RDMA_WRITE_ONLY_IMMED (BTH_OPCODE_RC | BTH_OPCODE_RDMA_WRITE_ONLY_IMMED)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_RDMA_READ_REQ (BTH_OPCODE_RC | BTH_OPCODE_RDMA_READ_REQ)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_RDMA_READ_RESP_FIRST (BTH_OPCODE_RC | BTH_OPCODE_RDMA_READ_RESP_FIRST)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_RDMA_READ_RESP_MIDDLE (BTH_OPCODE_RC | BTH_OPCODE_RDMA_READ_RESP_MIDDLE)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_RDMA_READ_RESP_LAST (BTH_OPCODE_RC | BTH_OPCODE_RDMA_READ_RESP_LAST)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_RDMA_READ_RESP_ONLY (BTH_OPCODE_RC | BTH_OPCODE_RDMA_READ_RESP_ONLY)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_ACK (BTH_OPCODE_RC | BTH_OPCODE_ACK)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_ATOMIC_ACK (BTH_OPCODE_RC | BTH_OPCODE_ATOMIC_ACK)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_CMP_SWAP (BTH_OPCODE_RC | BTH_OPCODE_CMP_SWAP)
|
|
Packit |
857059 |
#define BTH_OPCODE_RC_FETCH_ADD (BTH_OPCODE_RC | BTH_OPCODE_FETCH_ADD)
|
|
Packit |
857059 |
/* 0x15 - 0x1f reserved */
|
|
Packit |
857059 |
#define BTH_OPCODE_UC_SEND_FIRST (BTH_OPCODE_UC | BTH_OPCODE_SEND_FIRST)
|
|
Packit |
857059 |
#define BTH_OPCODE_UC_SEND_MIDDLE (BTH_OPCODE_UC | BTH_OPCODE_SEND_MIDDLE)
|
|
Packit |
857059 |
#define BTH_OPCODE_UC_SEND_LAST (BTH_OPCODE_UC | BTH_OPCODE_SEND_LAST)
|
|
Packit |
857059 |
#define BTH_OPCODE_UC_SEND_LAST_IMMED (BTH_OPCODE_UC | BTH_OPCODE_SEND_LAST_IMMED)
|
|
Packit |
857059 |
#define BTH_OPCODE_UC_SEND_ONLY (BTH_OPCODE_UC | BTH_OPCODE_SEND_ONLY)
|
|
Packit |
857059 |
#define BTH_OPCODE_UC_SEND_ONLY_IMMED (BTH_OPCODE_UC | BTH_OPCODE_SEND_ONLY_IMMED)
|
|
Packit |
857059 |
#define BTH_OPCODE_UC_RDMA_WRITE_FIRST (BTH_OPCODE_UC | BTH_OPCODE_RDMA_WRITE_FIRST)
|
|
Packit |
857059 |
#define BTH_OPCODE_UC_RDMA_WRITE_MIDDLE (BTH_OPCODE_UC | BTH_OPCODE_RDMA_WRITE_MIDDLE)
|
|
Packit |
857059 |
#define BTH_OPCODE_UC_RDMA_WRITE_LAST (BTH_OPCODE_UC | BTH_OPCODE_RDMA_WRITE_LAST)
|
|
Packit |
857059 |
#define BTH_OPCODE_UC_RDMA_WRITE_LAST_IMMED (BTH_OPCODE_UC | BTH_OPCODE_RDMA_WRITE_LAST_IMMED)
|
|
Packit |
857059 |
#define BTH_OPCODE_UC_RDMA_WRITE_ONLY (BTH_OPCODE_UC | BTH_OPCODE_RDMA_WRITE_ONLY)
|
|
Packit |
857059 |
#define BTH_OPCODE_UC_RDMA_WRITE_ONLY_IMMED (BTH_OPCODE_UC | BTH_OPCODE_RDMA_WRITE_ONLY_IMMED)
|
|
Packit |
857059 |
/* 0x2C - 0x3f reserved */
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_SEND_FIRST (BTH_OPCODE_RD | BTH_OPCODE_SEND_FIRST)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_SEND_MIDDLE (BTH_OPCODE_RD | BTH_OPCODE_SEND_MIDDLE)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_SEND_LAST (BTH_OPCODE_RD | BTH_OPCODE_SEND_LAST)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_SEND_LAST_IMMED (BTH_OPCODE_RD | BTH_OPCODE_SEND_LAST_IMMED)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_SEND_ONLY (BTH_OPCODE_RD | BTH_OPCODE_SEND_ONLY)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_SEND_ONLY_IMMED (BTH_OPCODE_RD | BTH_OPCODE_SEND_ONLY_IMMED)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_RDMA_WRITE_FIRST (BTH_OPCODE_RD | BTH_OPCODE_RDMA_WRITE_FIRST)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_RDMA_WRITE_MIDDLE (BTH_OPCODE_RD | BTH_OPCODE_RDMA_WRITE_MIDDLE)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_RDMA_WRITE_LAST (BTH_OPCODE_RD | BTH_OPCODE_RDMA_WRITE_LAST)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_RDMA_WRITE_LAST_IMMED (BTH_OPCODE_RD | BTH_OPCODE_RDMA_WRITE_LAST_IMMED)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_RDMA_WRITE_ONLY (BTH_OPCODE_RD | BTH_OPCODE_RDMA_WRITE_ONLY)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_RDMA_WRITE_ONLY_IMMED (BTH_OPCODE_RD | BTH_OPCODE_RDMA_WRITE_ONLY_IMMED)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_RDMA_READ_REQ (BTH_OPCODE_RD | BTH_OPCODE_RDMA_READ_REQ)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_RDMA_READ_RESP_FIRST (BTH_OPCODE_RD | BTH_OPCODE_RDMA_READ_RESP_FIRST)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_RDMA_READ_RESP_MIDDLE (BTH_OPCODE_RD | BTH_OPCODE_RDMA_READ_RESP_MIDDLE)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_RDMA_READ_RESP_LAST (BTH_OPCODE_RD | BTH_OPCODE_RDMA_READ_RESP_LAST)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_RDMA_READ_RESP_ONLY (BTH_OPCODE_RD | BTH_OPCODE_RDMA_READ_RESP_ONLY)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_ACK (BTH_OPCODE_RD | BTH_OPCODE_ACK)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_ATOMIC_ACK (BTH_OPCODE_RD | BTH_OPCODE_ATOMIC_ACK)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_CMP_SWAP (BTH_OPCODE_RD | BTH_OPCODE_CMP_SWAP)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_FETCH_ADD (BTH_OPCODE_RD | BTH_OPCODE_FETCH_ADD)
|
|
Packit |
857059 |
#define BTH_OPCODE_RD_RESYNC (BTH_OPCODE_RD | BTH_OPCODE_RESYNC)
|
|
Packit |
857059 |
/* 0x56 - 0x5f reserved */
|
|
Packit |
857059 |
/* 0x60 - 0x63 reserved */
|
|
Packit |
857059 |
#define BTH_OPCODE_UD_SEND_ONLY (BTH_OPCODE_UD | BTH_OPCODE_SEND_ONLY)
|
|
Packit |
857059 |
#define BTH_OPCODE_UD_SEND_ONLY_IMMED (BTH_OPCODE_UD | BTH_OPCODE_SEND_ONLY_IMMED)
|
|
Packit |
857059 |
/* 0x66 - 0x7f reserved */
|
|
Packit |
857059 |
/* 0x80 - 0xBF reserved */
|
|
Packit |
857059 |
/* 0xC0 - 0xFF manufacturer specific codes */
|
|
Packit |
857059 |
|
|
Packit |
857059 |
static __inline void
|
|
Packit |
857059 |
BSWAP_IB_BTH(
|
|
Packit |
857059 |
IB_BTH *Header
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
Header->Pkey = ntoh16(Header->Pkey);
|
|
Packit |
857059 |
Header->Qp.AsUINT32 = ntoh32(Header->Qp.AsUINT32);
|
|
Packit |
857059 |
Header->Psn.AsUINT32 = ntoh32(Header->Psn.AsUINT32);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/*
|
|
Packit |
857059 |
* Datagram Extended Transport Header
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
typedef struct _IB_DETH {
|
|
Packit |
857059 |
IB_Q_KEY Qkey;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
union _IB_DETH_QP {
|
|
Packit |
857059 |
uint32 AsUINT32;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
struct _IB_DETH_QP_S {IB_BITFIELD2(uint32,
|
|
Packit |
857059 |
Reserved: 8,
|
|
Packit |
857059 |
SrcQPNumber: 24)
|
|
Packit |
857059 |
|
|
Packit |
857059 |
} s;
|
|
Packit |
857059 |
} Qp;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
} PACK_SUFFIX IB_DETH;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
static __inline void
|
|
Packit |
857059 |
BSWAP_IB_DETH(
|
|
Packit |
857059 |
IB_DETH *Header
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
Header->Qkey = ntoh32(Header->Qkey);
|
|
Packit |
857059 |
Header->Qp.AsUINT32 = ntoh32(Header->Qp.AsUINT32);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/*
|
|
Packit |
857059 |
* Swap Immediate Data
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
static __inline void
|
|
Packit |
857059 |
BSWAP_IMMED_DATA(
|
|
Packit |
857059 |
uint32 *ImmDt
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
*ImmDt = ntoh32(*ImmDt);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _IB_LOCAL_PKT_HEADERS {
|
|
Packit |
857059 |
IB_LRH Lrh;
|
|
Packit |
857059 |
IB_BTH Bth;
|
|
Packit |
857059 |
} PACK_SUFFIX IB_LOCAL_PKT_HEADERS;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _IB_GLOBAL_PKT_HEADERS {
|
|
Packit |
857059 |
IB_LRH Lrh;
|
|
Packit |
857059 |
IB_GRH Grh;
|
|
Packit |
857059 |
IB_BTH Bth;
|
|
Packit |
857059 |
} PACK_SUFFIX IB_GLOBAL_PKT_HEADERS;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _IB_LOCAL_UD_HEADERS {
|
|
Packit |
857059 |
IB_LRH Lrh;
|
|
Packit |
857059 |
IB_BTH Bth;
|
|
Packit |
857059 |
IB_DETH Deth;
|
|
Packit |
857059 |
} PACK_SUFFIX IB_LOCAL_UD_HEADERS;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _IB_GLOBAL_UD_HEADERS {
|
|
Packit |
857059 |
IB_LRH Lrh;
|
|
Packit |
857059 |
IB_GRH Grh;
|
|
Packit |
857059 |
IB_BTH Bth;
|
|
Packit |
857059 |
IB_DETH Deth;
|
|
Packit |
857059 |
} PACK_SUFFIX IB_GLOBAL_UD_HEADERS;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _IB_LOCAL_UD_IMM_HEADERS {
|
|
Packit |
857059 |
IB_LRH Lrh;
|
|
Packit |
857059 |
IB_BTH Bth;
|
|
Packit |
857059 |
IB_DETH Deth;
|
|
Packit |
857059 |
uint32 ImmDt;
|
|
Packit |
857059 |
} PACK_SUFFIX IB_LOCAL_UD_IMM_HEADERS;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _IB_GLOBAL_UD_IMM_HEADERS {
|
|
Packit |
857059 |
IB_LRH Lrh;
|
|
Packit |
857059 |
IB_GRH Grh;
|
|
Packit |
857059 |
IB_BTH Bth;
|
|
Packit |
857059 |
IB_DETH Deth;
|
|
Packit |
857059 |
uint32 ImmDt;
|
|
Packit |
857059 |
} PACK_SUFFIX IB_GLOBAL_UD_IMM_HEADERS;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include "iba/public/ipackoff.h"
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#if defined (__cplusplus)
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
#endif
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#endif /* _IBA_IB_PKT_H_ */
|