]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/ofed/libibverbs/fixes/rocee_link_layer.patch
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / ofed / libibverbs / fixes / rocee_link_layer.patch
1 [PATCHv7 1/4] libibverbs: Add link layer field to ibv_port_attr
2
3 This field can have one of the values - IBV_LINK_LAYER_UNSPECIFIED,
4 IBV_LINK_LAYER_INFINIBAND, IBV_LINK_LAYER_ETHERNET. It can be used by
5 applications to know the link layer used by the port, which can be either
6 Infiniband or Ethernet. The addition of the new field does not change the size
7 of struct ibv_port_attr due to alignment of the preceding field. Binary
8 compatibility is not compromised either since new apps with old libraries will
9 determine the link layer as IB while old applications with new a new library do
10 not read this field.
11
12 Solution suggested by:
13                Roland Dreier <rolandd@cisco.com>
14                Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
15 Signed-off-by: Eli Cohen <eli@mellanox.co.il>
16 ---
17  include/infiniband/verbs.h |   21 +++++++++++++++++++++
18  1 files changed, 21 insertions(+), 0 deletions(-)
19
20 Index: libibverbs/include/infiniband/verbs.h
21 ===================================================================
22 --- libibverbs.orig/include/infiniband/verbs.h  2010-06-08 11:00:05.575721000 +0300
23 +++ libibverbs/include/infiniband/verbs.h       2010-06-08 11:00:39.442737000 +0300
24 @@ -162,6 +162,12 @@ enum ibv_port_state {
25         IBV_PORT_ACTIVE_DEFER   = 5
26  };
27  
28 +enum {
29 +       IBV_LINK_LAYER_UNSPECIFIED,
30 +       IBV_LINK_LAYER_INFINIBAND,
31 +       IBV_LINK_LAYER_ETHERNET,
32 +};
33 +
34  struct ibv_port_attr {
35         enum ibv_port_state     state;
36         enum ibv_mtu            max_mtu;
37 @@ -182,6 +188,8 @@ struct ibv_port_attr {
38         uint8_t                 active_width;
39         uint8_t                 active_speed;
40         uint8_t                 phys_state;
41 +       uint8_t                 link_layer;
42 +       uint8_t                 pad;
43  };
44  
45  enum ibv_event_type {
46 @@ -743,6 +751,16 @@ struct ibv_context {
47         struct ibv_more_ops     *more_ops;
48  };
49  
50 +static inline int ___ibv_query_port(struct ibv_context *context,
51 +                                   uint8_t port_num,
52 +                                   struct ibv_port_attr *port_attr)
53 +{
54 +       port_attr->link_layer = IBV_LINK_LAYER_UNSPECIFIED;
55 +       port_attr->pad = 0;
56 +
57 +       return context->ops.query_port(context, port_num, port_attr);
58 +}
59 +
60  /**
61   * ibv_get_device_list - Get list of IB devices currently available
62   * @num_devices: optional.  if non-NULL, set to the number of devices
63 @@ -1304,4 +1322,7 @@ END_C_DECLS
64  
65  #  undef __attribute_const
66  
67 +#define ibv_query_port(context, port_num, port_attr) \
68 +       ___ibv_query_port(context, port_num, port_attr)
69 +
70  #endif /* INFINIBAND_VERBS_H */