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