david/ipxe
Archived
1
0
This repository has been archived on 2020-12-06. You can view files and clone it, but cannot push or open issues or pull requests.
ipxe/src/include/gpxe/ib_srp.h
Michael Brown 0c30dc6bc5 [infiniband] Add support for SRP over Infiniband
SRP is the SCSI RDMA Protocol.  It allows for a method of SAN booting
whereby the target is responsible for reading and writing data using
Remote DMA directly to the initiator's memory.  The software initiator
merely sends and receives SCSI commands; it never has to touch the
actual data.
2009-08-10 22:27:33 +01:00

80 lines
1.9 KiB
C

#ifndef _GPXE_IB_SRP_H
#define _GPXE_IB_SRP_H
/** @file
*
* SCSI RDMA Protocol over Infiniband
*
*/
FILE_LICENCE ( BSD2 );
#include <stdint.h>
#include <gpxe/infiniband.h>
#include <gpxe/srp.h>
/** SRP initiator port identifier for Infiniband */
struct ib_srp_initiator_port_id {
/** Identifier extension */
struct ib_gid_half id_ext;
/** IB channel adapter GUID */
struct ib_gid_half hca_guid;
} __attribute__ (( packed ));
/** SRP target port identifier for Infiniband */
struct ib_srp_target_port_id {
/** Identifier extension */
struct ib_gid_half id_ext;
/** I/O controller GUID */
struct ib_gid_half ioc_guid;
} __attribute__ (( packed ));
/**
* Get Infiniband-specific initiator port ID
*
* @v port_ids SRP port IDs
* @ret initiator_port_id Infiniband-specific initiator port ID
*/
static inline __always_inline struct ib_srp_initiator_port_id *
ib_srp_initiator_port_id ( struct srp_port_ids *port_ids ) {
return ( ( struct ib_srp_initiator_port_id * ) &port_ids->initiator );
}
/**
* Get Infiniband-specific target port ID
*
* @v port_ids SRP port IDs
* @ret target_port_id Infiniband-specific target port ID
*/
static inline __always_inline struct ib_srp_target_port_id *
ib_srp_target_port_id ( struct srp_port_ids *port_ids ) {
return ( ( struct ib_srp_target_port_id * ) &port_ids->target );
}
/** Infiniband-specific SRP parameters */
struct ib_srp_parameters {
/** Source GID */
struct ib_gid sgid;
/** Destination GID */
struct ib_gid dgid;
/** Service ID */
struct ib_gid_half service_id;
/** Partition key */
uint16_t pkey;
};
/**
* Get Infiniband-specific transport parameters
*
* @v srp SRP device
* @ret ib_params Infiniband-specific transport parameters
*/
static inline __always_inline struct ib_srp_parameters *
ib_srp_params ( struct srp_device *srp ) {
return srp_transport_priv ( srp );
}
extern struct srp_transport_type ib_srp_transport;
#endif /* _GPXE_IB_SRP_H */