iPXE - Open Source Boot Firmware

[eepro100] Remove link-state checking
[ipxe.git] / src / include / gpxe / ib_srp.h
1 #ifndef _GPXE_IB_SRP_H
2 #define _GPXE_IB_SRP_H
3
4 /** @file
5  *
6  * SCSI RDMA Protocol over Infiniband
7  *
8  */
9
10 FILE_LICENCE ( BSD2 );
11
12 #include <stdint.h>
13 #include <gpxe/infiniband.h>
14 #include <gpxe/srp.h>
15
16 /** SRP initiator port identifier for Infiniband */
17 struct ib_srp_initiator_port_id {
18         /** Identifier extension */
19         struct ib_gid_half id_ext;
20         /** IB channel adapter GUID */
21         struct ib_gid_half hca_guid;
22 } __attribute__ (( packed ));
23
24 /** SRP target port identifier for Infiniband */
25 struct ib_srp_target_port_id {
26         /** Identifier extension */
27         struct ib_gid_half id_ext;
28         /** I/O controller GUID */
29         struct ib_gid_half ioc_guid;
30 } __attribute__ (( packed ));
31
32 /**
33  * Get Infiniband-specific initiator port ID
34  *
35  * @v port_ids          SRP port IDs
36  * @ret initiator_port_id  Infiniband-specific initiator port ID
37  */
38 static inline __always_inline struct ib_srp_initiator_port_id *
39 ib_srp_initiator_port_id ( struct srp_port_ids *port_ids ) {
40         return ( ( struct ib_srp_initiator_port_id * ) &port_ids->initiator );
41 }
42
43 /**
44  * Get Infiniband-specific target port ID
45  *
46  * @v port_ids          SRP port IDs
47  * @ret target_port_id  Infiniband-specific target port ID
48  */
49 static inline __always_inline struct ib_srp_target_port_id *
50 ib_srp_target_port_id ( struct srp_port_ids *port_ids ) {
51         return ( ( struct ib_srp_target_port_id * ) &port_ids->target );
52 }
53
54 /** Infiniband-specific SRP parameters */
55 struct ib_srp_parameters {
56         /** Source GID */
57         struct ib_gid sgid;
58         /** Destination GID */
59         struct ib_gid dgid;
60         /** Service ID */
61         struct ib_gid_half service_id;
62         /** Partition key */
63         uint16_t pkey;
64 };
65
66 /**
67  * Get Infiniband-specific transport parameters
68  *
69  * @v srp               SRP device
70  * @ret ib_params       Infiniband-specific transport parameters
71  */
72 static inline __always_inline struct ib_srp_parameters *
73 ib_srp_params ( struct srp_device *srp ) {
74         return srp_transport_priv ( srp );
75 }
76
77 extern struct srp_transport_type ib_srp_transport;
78
79 #endif /* _GPXE_IB_SRP_H */