iPXE
ib_cm.h File Reference

Infiniband communication management. More...

#include <ipxe/infiniband.h>
#include <ipxe/retry.h>

Go to the source code of this file.

Data Structures

struct  ib_connection_operations
 Infiniband connection operations. More...
struct  ib_connection
 An Infiniband connection. More...

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
struct ib_connectionib_create_conn (struct ib_device *ibdev, struct ib_queue_pair *qp, union ib_gid *dgid, union ib_guid *service_id, void *req_private_data, size_t req_private_data_len, struct ib_connection_operations *op)
 Create connection to remote QP.
void ib_destroy_conn (struct ib_device *ibdev, struct ib_queue_pair *qp, struct ib_connection *conn)

Detailed Description

Infiniband communication management.

Definition in file ib_cm.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ ib_create_conn()

struct ib_connection * ib_create_conn ( struct ib_device * ibdev,
struct ib_queue_pair * qp,
union ib_gid * dgid,
union ib_guid * service_id,
void * private_data,
size_t private_data_len,
struct ib_connection_operations * op )
extern

Create connection to remote QP.

Parameters
ibdevInfiniband device
qpQueue pair
dgidTarget GID
service_idTarget service ID
private_dataConnection request private data
private_data_lenLength of connection request private data
opConnection operations
Return values
connConnection

Definition at line 451 of file ib_cm.c.

454 {
455 struct ib_connection *conn;
457
458 /* Allocate and initialise request */
459 conn = zalloc ( sizeof ( *conn ) + private_data_len );
460 if ( ! conn )
461 goto err_alloc_conn;
462 conn->ibdev = ibdev;
463 conn->qp = qp;
464 memset ( &qp->av, 0, sizeof ( qp->av ) );
465 qp->av.gid_present = 1;
466 memcpy ( &qp->av.gid, dgid, sizeof ( qp->av.gid ) );
467 conn->local_id = local_id = random();
468 memcpy ( &conn->service_id, service_id, sizeof ( conn->service_id ) );
469 conn->op = op;
472
473 /* Create path */
474 conn->path = ib_create_path ( ibdev, &qp->av, &ib_cm_path_op );
475 if ( ! conn->path )
476 goto err_create_path;
477 ib_path_set_ownerdata ( conn->path, conn );
478
479 /* Add to list of connections */
480 list_add ( &conn->list, &ib_cm_conns );
481
482 DBGC ( local_id, "CM %08x created for IBDEV %s QPN %#lx\n",
483 local_id, ibdev->name, qp->qpn );
484 DBGC ( local_id, "CM %08x connecting to " IB_GID_FMT " "
487
488 return conn;
489
490 ib_destroy_path ( ibdev, conn->path );
491 err_create_path:
492 free ( conn );
493 err_alloc_conn:
494 return NULL;
495}
#define NULL
NULL pointer (VOID *)
Definition Base.h:322
struct arbelprm_qp_db_record qp
Definition arbel.h:2
unsigned int uint32_t
Definition stdint.h:12
#define DBGC(...)
Definition compiler.h:505
static struct ib_path_operations ib_cm_path_op
Connection path operations.
Definition ib_cm.c:434
uint32_t local_id
Local communication ID.
Definition ib_mad.h:1
union ib_gid dgid
Definition ib_mad.h:1
uint8_t private_data[92]
Private data.
Definition ib_mad.h:33
union ib_guid service_id
Service ID.
Definition ib_mad.h:5
#define IB_GID_ARGS(gid)
Infiniband Global Identifier debug message arguments.
Definition ib_packet.h:49
#define IB_GID_FMT
Infiniband Global Identifier debug message format.
Definition ib_packet.h:46
#define IB_GUID_FMT
Infiniband Globally Unique Identifier debug message format.
Definition ib_packet.h:27
#define IB_GUID_ARGS(guid)
Infiniband Globally Unique Identifier debug message arguments.
Definition ib_packet.h:30
void ib_destroy_path(struct ib_device *ibdev, struct ib_path *path)
Destroy path.
Definition ib_pathrec.c:156
struct ib_path * ib_create_path(struct ib_device *ibdev, struct ib_address_vector *av, struct ib_path_operations *op)
Create path.
Definition ib_pathrec.c:107
static __always_inline void ib_path_set_ownerdata(struct ib_path *path, void *priv)
Set Infiniband path owner-private data.
Definition ib_pathrec.h:52
void * memcpy(void *dest, const void *src, size_t len) __nonnull
void * memset(void *dest, int character, size_t len) __nonnull
#define list_add(new, head)
Add a new entry to the head of a list.
Definition list.h:70
void * zalloc(size_t size)
Allocate cleared memory.
Definition malloc.c:662
static uint16_t struct vmbus_xfer_pages_operations * op
Definition netvsc.h:327
long int random(void)
Generate a pseudo-random number between 0 and 2147483647L or 2147483562?
Definition random.c:32
static void(* free)(struct refcnt *refcnt))
Definition refcnt.h:55
An Infiniband connection.
Definition ib_cm.h:35
union ib_guid service_id
Target service ID.
Definition ib_cm.h:45
struct ib_device * ibdev
Infiniband device.
Definition ib_cm.h:37
uint32_t local_id
Local communication ID.
Definition ib_cm.h:41
size_t private_data_len
Length of connection request private data.
Definition ib_cm.h:58
uint8_t private_data[0]
Connection request private data.
Definition ib_cm.h:60
struct ib_connection_operations * op
Connection operations.
Definition ib_cm.h:47
struct ib_queue_pair * qp
Queue pair.
Definition ib_cm.h:39
struct ib_path * path
Path to target.
Definition ib_cm.h:53
struct list_head list
List of connections.
Definition ib_cm.h:50
char name[IBDEV_NAME_LEN]
Name of this Infiniband device.
Definition infiniband.h:409

References DBGC, dgid, free, ib_cm_path_op, ib_create_path(), ib_destroy_path(), IB_GID_ARGS, IB_GID_FMT, IB_GUID_ARGS, IB_GUID_FMT, ib_path_set_ownerdata(), ib_connection::ibdev, ib_connection::list, list_add, ib_connection::local_id, local_id, memcpy(), memset(), ib_device::name, NULL, ib_connection::op, op, ib_connection::path, ib_connection::private_data, private_data, ib_connection::private_data_len, ib_connection::qp, qp, random(), ib_connection::service_id, service_id, and zalloc().

Referenced by ib_cmrc_xfer_deliver().

◆ ib_destroy_conn()

void ib_destroy_conn ( struct ib_device * ibdev,
struct ib_queue_pair * qp,
struct ib_connection * conn )
extern

References qp.