59 size_t orig_iob_len =
iob_len ( iobuf );
66 DBGC2 ( ibdev,
"IBDEV %s TX %04x:%08lx => %04x:%08lx (key %08lx)\n",
71 pad_len = ( (-payload_len) & 0x3 );
76 orig_iob_len =
iob_len ( iobuf );
79 grh_len = ( payload_len +
iob_len ( iobuf ) - orig_iob_len );
83 lrh_len = ( payload_len +
iob_len ( iobuf ) - orig_iob_len );
87 lrh->vl__lver = ( vl << 4 );
89 lrh->sl__lnh = ( (
dest->sl << 4 ) | lnh );
91 lrh->length =
htons ( lrh_len >> 2 );
96 grh->ipver__tclass__flowlabel =
110 bth->ack__psn =
htonl ( (
qp->send.psn++ ) & 0xffffffUL );
117 (
iob_len ( iobuf ) - orig_iob_len ) );
141 size_t orig_iob_len =
iob_len ( iobuf );
151 memset ( source, 0,
sizeof ( *source ) );
155 DBGC ( ibdev,
"IBDEV %s RX too short (%zd bytes) for LRH\n",
162 dest->sl = (
lrh->sl__lnh >> 4 );
164 source->
sl = (
lrh->sl__lnh >> 4 );
165 lnh = (
lrh->sl__lnh & 0x3 );
169 DBGC ( ibdev,
"IBDEV %s RX unsupported LNH %x\n",
177 DBGC ( ibdev,
"IBDEV %s RX too short (%zd bytes) "
183 dest->gid_present = 1;
193 DBGC ( ibdev,
"IBDEV %s RX too short (%zd bytes) for BTH\n",
200 DBGC ( ibdev,
"IBDEV %s unsupported BTH opcode %x\n",
208 DBGC ( ibdev,
"IBDEV %s RX too short (%zd bytes) for DETH\n",
219 pad_len = ( (
bth->se__m__padcnt__tver >> 4 ) & 0x3 );
220 *payload_len = ( (
ntohs (
lrh->length ) << 2 )
221 - ( orig_iob_len -
iob_len ( iobuf ) )
229 DBGC ( ibdev,
"IBDEV %s RX for unknown MGID "
236 DBGC ( ibdev,
"IBDEV %s RX for nonexistent "
237 "QPN %#lx\n", ibdev->
name,
dest->qpn );
244 DBGC2 ( ibdev,
"IBDEV %s RX %04x:%08lx <= %04x:%08lx (key %08x)\n",
247 (
qp ? (*qp)->ext_qpn : -1UL ) :
dest->qpn ),
250 ( iobuf->
data - ( orig_iob_len -
iob_len ( iobuf ) ) ),
251 ( orig_iob_len -
iob_len ( iobuf ) ) );
#define NULL
NULL pointer (VOID *)
struct arbelprm_qp_db_record qp
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" retur dest)
#define assert(condition)
Assert a condition at run-time.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define EINVAL
Invalid argument.
#define ENOTSUP
Operation not supported.
#define ENODEV
No such device.
int ib_pull(struct ib_device *ibdev, struct io_buffer *iobuf, struct ib_queue_pair **qp, size_t *payload_len, struct ib_address_vector *dest, struct ib_address_vector *source)
Remove IB headers.
int ib_push(struct ib_device *ibdev, struct io_buffer *iobuf, struct ib_queue_pair *qp, size_t payload_len, const struct ib_address_vector *dest)
Add IB headers.
Infiniband packet format.
#define IB_GID_ARGS(gid)
Infiniband Global Identifier debug message arguments.
struct ib_datagram_extended_transport_header deth
#define IB_GRH_IPVER_IPv6
#define IB_GID_FMT
Infiniband Global Identifier debug message format.
#define IB_GRH_NXTHDR_IBA
#define IB_LID_MULTICAST(lid)
Test for multicast LID.
struct ib_global_route_header grh
struct ib_base_transport_header bth
struct ib_local_route_header lrh
void * memcpy(void *dest, const void *src, size_t len) __nonnull
void * memset(void *dest, int character, size_t len) __nonnull
struct ib_queue_pair * ib_find_qp_mgid(struct ib_device *ibdev, union ib_gid *gid)
Find queue pair by multicast GID.
struct ib_queue_pair * ib_find_qp_qpn(struct ib_device *ibdev, unsigned long qpn)
Find queue pair by QPN.
#define IB_QPN_SMI
Subnet management interface QPN.
#define iob_push(iobuf, len)
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
#define iob_pull(iobuf, len)
An Infiniband Address Vector.
unsigned int sl
Service level.
unsigned long qkey
Queue key.
unsigned int gid_present
GID is present.
unsigned int lid
Local ID.
union ib_gid gid
GID, if present.
unsigned long qpn
Queue Pair Number.
char name[IBDEV_NAME_LEN]
Name of this Infiniband device.
uint16_t pkey
Partition key.
union ib_gid gid
Port GID (comprising GID prefix and port GUID)
An Infiniband Queue Pair.
void * data
Start of data.