[MLX4] add 2 new functions to Eth interface: mlx4_register_vlan/mlx4_unregister_vlan...
[mirror/winof/.git] / hw / mlx4 / kernel / bus / inc / bus_intf.h
1 #pragma once
2
3 #define MLX4_BUS_IB_INTERFACE_VERSION           4
4
5 #include <ib_verbs.h>
6 //
7 // Interface for work with MLX4 IB driver
8 //
9
10 struct mlx4_interface;
11 struct mlx4_dev;
12 struct mlx4_cq_context;
13 enum mlx4_qp_state;
14 struct mlx4_qp_context;
15 enum mlx4_qp_optpar;
16 struct mlx4_eq;
17
18
19 typedef int (*MLX4_REGISTER_INTERFACE)(struct mlx4_interface *intf);
20 typedef VOID (*MLX4_UNREGISTER_INTERFACE)(struct mlx4_interface *intf);
21
22
23 int mlx4_pd_alloc(struct mlx4_dev *dev, u32 *pdn);
24 void mlx4_pd_free(struct mlx4_dev *dev, u32 pdn);
25
26 typedef int  (*MLX4_PD_ALLOC) (struct mlx4_dev *dev, u32 *pdn);
27 typedef void (*MLX4_PD_FREE)(struct mlx4_dev *dev, u32 pdn);
28
29 typedef int  (*MLX4_UAR_ALLOC)(struct mlx4_dev *dev, struct mlx4_uar *uar);
30 typedef void (*MLX4_UAR_FREE)(struct mlx4_dev *dev, struct mlx4_uar *uar);
31
32 typedef int  (*MLX4_MR_ALLOC)(struct mlx4_dev *dev, u32 pd, u64 iova, u64 size, u32 access,
33                  int npages, int page_shift, struct mlx4_mr *mr);
34 typedef void (*MLX4_MR_FREE)(struct mlx4_dev *dev, struct mlx4_mr *mr);
35 typedef int  (*MLX4_MR_ENABLE)(struct mlx4_dev *dev, struct mlx4_mr *mr);
36
37 typedef int  (*MLX4_QP_GET_REGION) (struct mlx4_dev *dev, enum qp_region region, int *base_qpn, int *cnt);
38
39 typedef int  (*MLX4_ALLOC_HWQ_RES)(struct mlx4_dev *dev, struct mlx4_hwq_resources *wqres,
40               int size, int max_direct);
41
42 typedef void (*MLX4_FREE_HWQ_RES)(struct mlx4_dev *dev, struct mlx4_hwq_resources *wqres,
43               int size);
44
45 typedef int (*MLX4_CQ_ALLOC) (struct mlx4_dev *dev, int nent, struct mlx4_mtt *mtt,
46               struct mlx4_uar *uar, u64 db_rec, struct mlx4_cq *cq, unsigned vector, int collapsed);
47
48 typedef void (*MLX4_CQ_FREE) (struct mlx4_dev *dev, struct mlx4_cq *cq);
49
50 typedef int (*MLX4_CQ_MODIFY) (struct mlx4_dev *dev, struct mlx4_cq *cq,
51               struct mlx4_cq_context *context, int modify);
52
53 typedef void (*MLX4_CQ_ARM)(struct mlx4_cq *cq, u32 cmd,
54                                void __iomem *uar_page,
55                                spinlock_t *doorbell_lock);
56
57 typedef int (*MLX4_REGISTER_MAC)(struct mlx4_dev *dev, u8 port, u64 mac, int *index);
58
59 typedef void (*MLX4_UNREGISTER_MAC) (struct mlx4_dev *dev, u8 port, int index);
60
61 typedef int (*MLX4_REGISTER_VLAN)(struct mlx4_dev *dev, u8 port, u16 vlan, int *index);
62
63 typedef void (*MLX4_UNREGISTER_VLAN)(struct mlx4_dev *dev, u8 port, int index);
64
65
66 typedef int (*MLX4_SRQ_ALLOC) (struct mlx4_dev *dev, u32 pdn, u32 cqn, u16 xrcd, 
67            struct mlx4_mtt *mtt, u64 db_rec, struct mlx4_srq *srq);
68
69 typedef void (*MLX4_SRQ_FREE)(struct mlx4_dev *dev, struct mlx4_srq *srq);
70
71 typedef void (*MLX4_SRQ_INVALIDATE)(struct mlx4_dev *dev, struct mlx4_srq *srq);
72
73 typedef void (*MLX4_SRQ_REMOVE)(struct mlx4_dev *dev, struct mlx4_srq *srq);
74
75 typedef int (*MLX4_QP_ALLOC)(struct mlx4_dev *dev, int qpn, struct mlx4_qp *qp);
76
77 typedef void (*MLX4_QP_FREE)(struct mlx4_dev *dev, struct mlx4_qp *qp);
78
79
80 typedef int (*MLX4_QP_RESERVE_RANGE)(struct mlx4_dev *dev, int cnt, int align, u32 *base);
81
82 typedef void (*MLX4_QP_RELEASE_RANGE)(struct mlx4_dev *dev, int base_qpn, int cnt);
83
84
85 typedef void (*MLX4_QP_REMOVE)(struct mlx4_dev *dev, struct mlx4_qp *qp);
86
87 typedef int (*MLX4_QP_MODIFY)(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
88            enum mlx4_qp_state cur_state, enum mlx4_qp_state new_state,
89            struct mlx4_qp_context *context, enum mlx4_qp_optpar optpar,
90            int sqd_event, struct mlx4_qp *qp);
91
92 typedef int (*MLX4_QP_TO_READY)(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
93              struct mlx4_qp_context *context,
94              struct mlx4_qp *qp, enum mlx4_qp_state *qp_state);
95
96 typedef struct mlx4_cmd_mailbox *(*MLX4_ALLOC_CMD_MAILBOX)(struct mlx4_dev *dev);
97
98 typedef void (*MLX4_FREE_CMD_MAILBOX)(struct mlx4_dev *dev, struct mlx4_cmd_mailbox *mailbox);
99
100 typedef int (*MLX4_CMD)(struct mlx4_dev *dev, u64 in_param, u64 *out_param, int out_is_imm,
101             u32 in_modifier, u8 op_modifier, u16 op, unsigned long timeout);
102
103 typedef int (*MLX4_INIT_PORT)(struct mlx4_dev *dev, int port);
104 typedef int (*MLX4_CLOSE_PORT)(struct mlx4_dev *dev, int port);
105
106
107 typedef
108 BOOLEAN
109 (*PISR_FUNC)(   
110         IN PVOID  IsrContext
111         );
112
113
114 typedef int (*MLX4_ADD_EQ) (struct mlx4_dev *dev, int nent,
115         KAFFINITY cpu, PISR_FUNC func, PVOID func_context ,
116         u8* p_eq_num, struct mlx4_eq ** p_eq);
117
118 typedef void (*MLX4_REMOVE_EQ) (struct mlx4_dev *dev, u8 eq_num);
119
120 typedef int (*MLX4_REGISTER_EVENT_HANDLER) (struct ib_event_handler *event_handler);
121 typedef int (*MLX4_UNREGISTER_EVENT_HANDLER)(struct ib_event_handler *event_handler);
122
123 typedef int (*MLX4_RESET_REQUEST) (struct ib_event_handler *event_handler);
124 typedef int (*MLX4_RESET_EXECUTE) (struct ib_event_handler *event_handler);
125 typedef int (*MLX4_RESET_READY) (struct ib_event_handler *event_handler);
126
127 struct mlx4_interface_ex {
128         MLX4_PD_ALLOC       mlx4_pd_alloc;
129         MLX4_PD_FREE        mlx4_pd_free;
130
131         MLX4_UAR_ALLOC      mlx4_uar_alloc;
132         MLX4_UAR_FREE       mlx4_uar_free;
133
134         MLX4_MR_ALLOC       mlx4_mr_alloc;
135         MLX4_MR_FREE        mlx4_mr_free;
136         MLX4_MR_ENABLE      mlx4_mr_enable;
137         MLX4_QP_GET_REGION  mlx4_qp_get_region;
138         MLX4_ALLOC_HWQ_RES  mlx4_alloc_hwq_res;
139         MLX4_FREE_HWQ_RES   mlx4_free_hwq_res;
140
141         MLX4_CQ_ALLOC       mlx4_cq_alloc;
142         MLX4_CQ_FREE        mlx4_cq_free;
143         MLX4_CQ_MODIFY      mlx4_cq_modify;
144
145 //  Not part of the interface since it is an inlie function
146 //      MLX4_CQ_ARM         mlx4_cq_arm;
147
148         MLX4_REGISTER_MAC   mlx4_register_mac;
149         MLX4_UNREGISTER_MAC mlx4_unregister_mac;
150
151         MLX4_SRQ_ALLOC      mlx4_srq_alloc;
152         MLX4_SRQ_FREE       mlx4_srq_free;
153         MLX4_SRQ_INVALIDATE mlx4_srq_invalidate;
154         MLX4_SRQ_REMOVE     mlx4_srq_remove;
155
156         MLX4_QP_ALLOC       mlx4_qp_alloc;
157         MLX4_QP_FREE        mlx4_qp_free;
158         MLX4_QP_REMOVE      mlx4_qp_remove;
159         MLX4_QP_MODIFY      mlx4_qp_modify;
160         MLX4_QP_TO_READY    mlx4_qp_to_ready;
161         MLX4_QP_RESERVE_RANGE mlx4_qp_reserve_range;
162         MLX4_QP_RELEASE_RANGE mlx4_qp_release_range;
163
164         MLX4_ALLOC_CMD_MAILBOX mlx4_alloc_cmd_mailbox;
165         MLX4_FREE_CMD_MAILBOX  mlx4_free_cmd_mailbox;
166         MLX4_CMD               mlx4_cmd;
167
168         MLX4_INIT_PORT         mlx4_INIT_PORT;
169         MLX4_CLOSE_PORT        mlx4_CLOSE_PORT;
170
171         MLX4_ADD_EQ            mlx4_add_eq;
172         MLX4_REMOVE_EQ         mlx4_remove_eq;
173
174         MLX4_REGISTER_EVENT_HANDLER mlx4_register_ev_cb;
175         MLX4_UNREGISTER_EVENT_HANDLER mlx4_unregister_ev_cb;
176         MLX4_RESET_REQUEST mlx4_reset_request;
177         MLX4_RESET_EXECUTE mlx4_reset_execute;
178         MLX4_RESET_READY mlx4_reset_ready;
179         MLX4_REGISTER_VLAN     mlx4_register_vlan;
180         MLX4_UNREGISTER_VLAN   mlx4_unregister_vlan;
181         
182 };
183
184
185 typedef struct _MLX4_BUS_IB_INTERFACE{
186         INTERFACE i;
187         struct ib_device                *       p_ibdev;
188         struct pci_dev                  *       pdev;
189         struct mlx4_dev                 *       pmlx4_dev;
190         struct mlx4_interface_ex        mlx4_interface;
191         int                                                     is_livefish;
192         u8                                                      port_id;
193         struct VipBusIfc                        *pVipBusIfc;
194         int                                                     n_msi_vectors;
195         
196 } MLX4_BUS_IB_INTERFACE, *PMLX4_BUS_IB_INTERFACE;
197
198
199
200