[infiniband] Remove the return status code from MAD handlers
[people/sha0/gpxe.git] / src / include / gpxe / ib_gma.h
1 #ifndef _GPXE_IB_GMA_H
2 #define _GPXE_IB_GMA_H
3
4 /** @file
5  *
6  * Infiniband General Management Agent
7  *
8  */
9
10 FILE_LICENCE ( GPL2_OR_LATER );
11
12 #include <gpxe/list.h>
13 #include <gpxe/retry.h>
14 #include <gpxe/tables.h>
15 #include <gpxe/infiniband.h>
16
17 struct ib_gma;
18
19 /** A GMA attribute handler */
20 struct ib_gma_handler {
21         /** Management class */
22         uint8_t mgmt_class;
23         /** Management class don't-care bits */
24         uint8_t mgmt_class_ignore;
25         /** Class version */
26         uint8_t class_version;
27         /** Method */
28         uint8_t method;
29         /** Response method, or zero */
30         uint8_t resp_method;
31         /** Attribute (in network byte order) */
32         uint16_t attr_id;
33         /** Handle attribute
34          *
35          * @v gma       General management agent
36          * @v mad       MAD
37          *
38          * The handler should modify the MAD as applicable.  If the
39          * handler returns with a non-zero value in the MAD's @c
40          * method field, it will be sent as a response.
41          */
42         void ( * handle ) ( struct ib_gma *gma, union ib_mad *mad );
43 };
44
45 /** GMA attribute handlers */
46 #define IB_GMA_HANDLERS __table ( struct ib_gma_handler, "ib_gma_handlers" )
47
48 /** Declare a GMA attribute handler */
49 #define __ib_gma_handler __table_entry ( IB_GMA_HANDLERS, 01 )
50
51 /** An Infiniband General Management Agent */
52 struct ib_gma {
53         /** Infiniband device */
54         struct ib_device *ibdev;
55         /** Completion queue */
56         struct ib_completion_queue *cq;
57         /** Queue pair */
58         struct ib_queue_pair *qp;
59
60         /** List of outstanding MAD requests */
61         struct list_head requests;
62 };
63
64 extern int ib_gma_request ( struct ib_gma *gma, union ib_mad *mad,
65                             struct ib_address_vector *av, int retry );
66 extern struct ib_gma * ib_create_gma ( struct ib_device *ibdev,
67                                        enum ib_queue_pair_type type );
68 extern void ib_destroy_gma ( struct ib_gma *gma );
69
70 #endif /* _GPXE_IB_GMA_H */