#ifndef _GPXE_IB_SRP_H #define _GPXE_IB_SRP_H /** @file * * SCSI RDMA Protocol over Infiniband * */ FILE_LICENCE ( BSD2 ); #include #include #include /** 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 */