#ifndef _GPXE_IB_PATHREC_H
#define _GPXE_IB_PATHREC_H

/** @file
 *
 * Infiniband path records
 *
 */

FILE_LICENCE ( GPL2_OR_LATER );

#include <gpxe/infiniband.h>

struct ib_mad_transaction;
struct ib_path;

/** Infiniband path operations */
struct ib_path_operations {
	/** Handle path transaction completion
	 *
	 * @v ibdev		Infiniband device
	 * @v path		Path
	 * @v rc		Status code
	 * @v av		Address vector, or NULL on error
	 */
	void ( * complete ) ( struct ib_device *ibdev,
			      struct ib_path *path, int rc,
			      struct ib_address_vector *av );
};

/** An Infiniband path */
struct ib_path {
	/** Infiniband device */
	struct ib_device *ibdev;
	/** Address vector */
	struct ib_address_vector av;
	/** Management transaction */
	struct ib_mad_transaction *madx;
	/** Path operations */
	struct ib_path_operations *op;
	/** Owner private data */
	void *owner_priv;
};

/**
 * Set Infiniband path owner-private data
 *
 * @v path		Path
 * @v priv		Private data
 */
static inline __always_inline void
ib_path_set_ownerdata ( struct ib_path *path, void *priv ) {
	path->owner_priv = priv;
}

/**
 * Get Infiniband path owner-private data
 *
 * @v path		Path
 * @ret priv		Private data
 */
static inline __always_inline void *
ib_path_get_ownerdata ( struct ib_path *path ) {
	return path->owner_priv;
}

extern struct ib_path *
ib_create_path ( struct ib_device *ibdev, struct ib_address_vector *av,
		 struct ib_path_operations *op );
extern void ib_destroy_path ( struct ib_device *ibdev,
			      struct ib_path *path );

extern int ib_resolve_path ( struct ib_device *ibdev,
			     struct ib_address_vector *av );

#endif /* _GPXE_IB_PATHREC_H */
