~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/ipxe/src/include/ipxe/ib_mi.h

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef _IPXE_IB_MI_H
 
2
#define _IPXE_IB_MI_H
 
3
 
 
4
/** @file
 
5
 *
 
6
 * Infiniband management interfaces
 
7
 *
 
8
 */
 
9
 
 
10
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 
11
 
 
12
#include <ipxe/list.h>
 
13
#include <ipxe/retry.h>
 
14
#include <ipxe/tables.h>
 
15
#include <ipxe/infiniband.h>
 
16
 
 
17
struct ib_mad_interface;
 
18
struct ib_mad_transaction;
 
19
 
 
20
/** An Infiniband management agent */
 
21
struct ib_mad_agent {
 
22
        /** Management class */
 
23
        uint8_t mgmt_class;
 
24
        /** Class version */
 
25
        uint8_t class_version;
 
26
        /** Attribute (in network byte order) */
 
27
        uint16_t attr_id;
 
28
        /** Handle MAD
 
29
         *
 
30
         * @v ibdev             Infiniband device
 
31
         * @v mi                Management interface
 
32
         * @v mad               Received MAD
 
33
         * @v av                Source address vector
 
34
         * @ret rc              Return status code
 
35
         */
 
36
        void ( * handle ) ( struct ib_device *ibdev,
 
37
                            struct ib_mad_interface *mi,
 
38
                            union ib_mad *mad,
 
39
                            struct ib_address_vector *av );
 
40
};
 
41
 
 
42
/** Infiniband management agents */
 
43
#define IB_MAD_AGENTS __table ( struct ib_mad_agent, "ib_mad_agents" )
 
44
 
 
45
/** Declare an Infiniband management agent */
 
46
#define __ib_mad_agent __table_entry ( IB_MAD_AGENTS, 01 )
 
47
 
 
48
/** Infiniband management transaction operations */
 
49
struct ib_mad_transaction_operations {
 
50
        /** Handle transaction completion
 
51
         *
 
52
         * @v ibdev             Infiniband device
 
53
         * @v mi                Management interface
 
54
         * @v madx              Management transaction
 
55
         * @v rc                Status code
 
56
         * @v mad               Received MAD (or NULL on error)
 
57
         * @v av                Source address vector (or NULL on error)
 
58
         *
 
59
         * The completion handler should in most cases call
 
60
         * ib_destroy_madx() to free up the completed transaction.
 
61
         */
 
62
        void ( * complete ) ( struct ib_device *ibdev,
 
63
                              struct ib_mad_interface *mi,
 
64
                              struct ib_mad_transaction *madx,
 
65
                              int rc, union ib_mad *mad,
 
66
                              struct ib_address_vector *av );
 
67
};
 
68
 
 
69
/** An Infiniband management transaction */
 
70
struct ib_mad_transaction {
 
71
        /** Associated management interface */
 
72
        struct ib_mad_interface *mi;
 
73
        /** List of transactions */
 
74
        struct list_head list;
 
75
        /** Retry timer */
 
76
        struct retry_timer timer;
 
77
        /** Destination address vector */
 
78
        struct ib_address_vector av;
 
79
        /** MAD being sent */
 
80
        union ib_mad mad;
 
81
        /** Transaction operations */
 
82
        struct ib_mad_transaction_operations *op;
 
83
        /** Owner private data */
 
84
        void *owner_priv;
 
85
};
 
86
 
 
87
/** An Infiniband management interface */
 
88
struct ib_mad_interface {
 
89
        /** Infiniband device */
 
90
        struct ib_device *ibdev;
 
91
        /** Completion queue */
 
92
        struct ib_completion_queue *cq;
 
93
        /** Queue pair */
 
94
        struct ib_queue_pair *qp;
 
95
        /** List of management transactions */
 
96
        struct list_head madx;
 
97
};
 
98
 
 
99
/**
 
100
 * Set Infiniband management transaction owner-private data
 
101
 *
 
102
 * @v madx              Management transaction
 
103
 * @v priv              Private data
 
104
 */
 
105
static inline __always_inline void
 
106
ib_madx_set_ownerdata ( struct ib_mad_transaction *madx, void *priv ) {
 
107
        madx->owner_priv = priv;
 
108
}
 
109
 
 
110
/**
 
111
 * Get Infiniband management transaction owner-private data
 
112
 *
 
113
 * @v madx              Management transaction
 
114
 * @ret priv            Private data
 
115
 */
 
116
static inline __always_inline void *
 
117
ib_madx_get_ownerdata ( struct ib_mad_transaction *madx ) {
 
118
        return madx->owner_priv;
 
119
}
 
120
 
 
121
extern int ib_mi_send ( struct ib_device *ibdev, struct ib_mad_interface *mi,
 
122
                        union ib_mad *mad, struct ib_address_vector *av );
 
123
extern struct ib_mad_transaction *
 
124
ib_create_madx ( struct ib_device *ibdev, struct ib_mad_interface *mi,
 
125
                 union ib_mad *mad, struct ib_address_vector *av,
 
126
                 struct ib_mad_transaction_operations *op );
 
127
extern void ib_destroy_madx ( struct ib_device *ibdev,
 
128
                              struct ib_mad_interface *mi,
 
129
                              struct ib_mad_transaction *madx );
 
130
extern struct ib_mad_interface * ib_create_mi ( struct ib_device *ibdev,
 
131
                                                enum ib_queue_pair_type type );
 
132
extern void ib_destroy_mi ( struct ib_device *ibdev,
 
133
                            struct ib_mad_interface *mi );
 
134
 
 
135
#endif /* _IPXE_IB_MI_H */