Commit | Line | Data |
---|---|---|
fab97220 HS |
1 | /* |
2 | * IBM eServer eHCA Infiniband device driver for Linux on POWER | |
3 | * | |
4 | * Function definitions for internal functions | |
5 | * | |
6 | * Authors: Heiko J Schick <schickhj@de.ibm.com> | |
7 | * Dietmar Decker <ddecker@de.ibm.com> | |
8 | * | |
9 | * Copyright (c) 2005 IBM Corporation | |
10 | * | |
11 | * All rights reserved. | |
12 | * | |
13 | * This source code is distributed under a dual license of GPL v2.0 and OpenIB | |
14 | * BSD. | |
15 | * | |
16 | * OpenIB BSD License | |
17 | * | |
18 | * Redistribution and use in source and binary forms, with or without | |
19 | * modification, are permitted provided that the following conditions are met: | |
20 | * | |
21 | * Redistributions of source code must retain the above copyright notice, this | |
22 | * list of conditions and the following disclaimer. | |
23 | * | |
24 | * Redistributions in binary form must reproduce the above copyright notice, | |
25 | * this list of conditions and the following disclaimer in the documentation | |
26 | * and/or other materials | |
27 | * provided with the distribution. | |
28 | * | |
29 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
30 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
31 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
32 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |
33 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
34 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
35 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR | |
36 | * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER | |
37 | * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
38 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
39 | * POSSIBILITY OF SUCH DAMAGE. | |
40 | */ | |
41 | ||
42 | #ifndef __EHCA_IVERBS_H__ | |
43 | #define __EHCA_IVERBS_H__ | |
44 | ||
45 | #include "ehca_classes.h" | |
46 | ||
2528e33e MB |
47 | int ehca_query_device(struct ib_device *ibdev, struct ib_device_attr *props, |
48 | struct ib_udata *uhw); | |
fab97220 HS |
49 | |
50 | int ehca_query_port(struct ib_device *ibdev, u8 port, | |
51 | struct ib_port_attr *props); | |
52 | ||
6b90a6d6 MW |
53 | enum rdma_protocol_type |
54 | ehca_query_protocol(struct ib_device *device, u8 port_num); | |
55 | ||
8705ce5b JF |
56 | int ehca_query_sma_attr(struct ehca_shca *shca, u8 port, |
57 | struct ehca_sma_attr *attr); | |
58 | ||
fab97220 HS |
59 | int ehca_query_pkey(struct ib_device *ibdev, u8 port, u16 index, u16 * pkey); |
60 | ||
61 | int ehca_query_gid(struct ib_device *ibdev, u8 port, int index, | |
62 | union ib_gid *gid); | |
63 | ||
64 | int ehca_modify_port(struct ib_device *ibdev, u8 port, int port_modify_mask, | |
65 | struct ib_port_modify *props); | |
66 | ||
67 | struct ib_pd *ehca_alloc_pd(struct ib_device *device, | |
68 | struct ib_ucontext *context, | |
69 | struct ib_udata *udata); | |
70 | ||
71 | int ehca_dealloc_pd(struct ib_pd *pd); | |
72 | ||
73 | struct ib_ah *ehca_create_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr); | |
74 | ||
75 | int ehca_modify_ah(struct ib_ah *ah, struct ib_ah_attr *ah_attr); | |
76 | ||
77 | int ehca_query_ah(struct ib_ah *ah, struct ib_ah_attr *ah_attr); | |
78 | ||
79 | int ehca_destroy_ah(struct ib_ah *ah); | |
80 | ||
81 | struct ib_mr *ehca_get_dma_mr(struct ib_pd *pd, int mr_access_flags); | |
82 | ||
83 | struct ib_mr *ehca_reg_phys_mr(struct ib_pd *pd, | |
84 | struct ib_phys_buf *phys_buf_array, | |
85 | int num_phys_buf, | |
86 | int mr_access_flags, u64 *iova_start); | |
87 | ||
2b94397a HNN |
88 | struct ib_mr *ehca_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, |
89 | u64 virt, int mr_access_flags, | |
90 | struct ib_udata *udata); | |
fab97220 HS |
91 | |
92 | int ehca_rereg_phys_mr(struct ib_mr *mr, | |
93 | int mr_rereg_mask, | |
94 | struct ib_pd *pd, | |
95 | struct ib_phys_buf *phys_buf_array, | |
96 | int num_phys_buf, int mr_access_flags, u64 *iova_start); | |
97 | ||
98 | int ehca_query_mr(struct ib_mr *mr, struct ib_mr_attr *mr_attr); | |
99 | ||
100 | int ehca_dereg_mr(struct ib_mr *mr); | |
101 | ||
7083e42e | 102 | struct ib_mw *ehca_alloc_mw(struct ib_pd *pd, enum ib_mw_type type); |
fab97220 HS |
103 | |
104 | int ehca_bind_mw(struct ib_qp *qp, struct ib_mw *mw, | |
105 | struct ib_mw_bind *mw_bind); | |
106 | ||
107 | int ehca_dealloc_mw(struct ib_mw *mw); | |
108 | ||
109 | struct ib_fmr *ehca_alloc_fmr(struct ib_pd *pd, | |
110 | int mr_access_flags, | |
111 | struct ib_fmr_attr *fmr_attr); | |
112 | ||
113 | int ehca_map_phys_fmr(struct ib_fmr *fmr, | |
114 | u64 *page_list, int list_len, u64 iova); | |
115 | ||
116 | int ehca_unmap_fmr(struct list_head *fmr_list); | |
117 | ||
118 | int ehca_dealloc_fmr(struct ib_fmr *fmr); | |
119 | ||
120 | enum ehca_eq_type { | |
121 | EHCA_EQ = 0, /* Event Queue */ | |
122 | EHCA_NEQ /* Notification Event Queue */ | |
123 | }; | |
124 | ||
125 | int ehca_create_eq(struct ehca_shca *shca, struct ehca_eq *eq, | |
126 | enum ehca_eq_type type, const u32 length); | |
127 | ||
128 | int ehca_destroy_eq(struct ehca_shca *shca, struct ehca_eq *eq); | |
129 | ||
130 | void *ehca_poll_eq(struct ehca_shca *shca, struct ehca_eq *eq); | |
131 | ||
132 | ||
bcf4c1ea MB |
133 | struct ib_cq *ehca_create_cq(struct ib_device *device, |
134 | const struct ib_cq_init_attr *attr, | |
fab97220 HS |
135 | struct ib_ucontext *context, |
136 | struct ib_udata *udata); | |
137 | ||
138 | int ehca_destroy_cq(struct ib_cq *cq); | |
139 | ||
140 | int ehca_resize_cq(struct ib_cq *cq, int cqe, struct ib_udata *udata); | |
141 | ||
142 | int ehca_poll_cq(struct ib_cq *cq, int num_entries, struct ib_wc *wc); | |
143 | ||
144 | int ehca_peek_cq(struct ib_cq *cq, int wc_cnt); | |
145 | ||
ed23a727 | 146 | int ehca_req_notify_cq(struct ib_cq *cq, enum ib_cq_notify_flags notify_flags); |
fab97220 HS |
147 | |
148 | struct ib_qp *ehca_create_qp(struct ib_pd *pd, | |
149 | struct ib_qp_init_attr *init_attr, | |
150 | struct ib_udata *udata); | |
151 | ||
152 | int ehca_destroy_qp(struct ib_qp *qp); | |
153 | ||
9bc57e2d RC |
154 | int ehca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask, |
155 | struct ib_udata *udata); | |
fab97220 HS |
156 | |
157 | int ehca_query_qp(struct ib_qp *qp, struct ib_qp_attr *qp_attr, | |
158 | int qp_attr_mask, struct ib_qp_init_attr *qp_init_attr); | |
159 | ||
160 | int ehca_post_send(struct ib_qp *qp, struct ib_send_wr *send_wr, | |
161 | struct ib_send_wr **bad_send_wr); | |
162 | ||
163 | int ehca_post_recv(struct ib_qp *qp, struct ib_recv_wr *recv_wr, | |
164 | struct ib_recv_wr **bad_recv_wr); | |
165 | ||
a6a12947 JF |
166 | int ehca_post_srq_recv(struct ib_srq *srq, |
167 | struct ib_recv_wr *recv_wr, | |
168 | struct ib_recv_wr **bad_recv_wr); | |
169 | ||
170 | struct ib_srq *ehca_create_srq(struct ib_pd *pd, | |
171 | struct ib_srq_init_attr *init_attr, | |
172 | struct ib_udata *udata); | |
173 | ||
174 | int ehca_modify_srq(struct ib_srq *srq, struct ib_srq_attr *attr, | |
175 | enum ib_srq_attr_mask attr_mask, struct ib_udata *udata); | |
176 | ||
177 | int ehca_query_srq(struct ib_srq *srq, struct ib_srq_attr *srq_attr); | |
178 | ||
179 | int ehca_destroy_srq(struct ib_srq *srq); | |
180 | ||
fab97220 HS |
181 | u64 ehca_define_sqp(struct ehca_shca *shca, struct ehca_qp *ibqp, |
182 | struct ib_qp_init_attr *qp_init_attr); | |
183 | ||
184 | int ehca_attach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid); | |
185 | ||
186 | int ehca_detach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid); | |
187 | ||
188 | struct ib_ucontext *ehca_alloc_ucontext(struct ib_device *device, | |
189 | struct ib_udata *udata); | |
190 | ||
191 | int ehca_dealloc_ucontext(struct ib_ucontext *context); | |
192 | ||
193 | int ehca_mmap(struct ib_ucontext *context, struct vm_area_struct *vma); | |
194 | ||
2b5e6b12 | 195 | int ehca_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num, |
a97e2d86 | 196 | const struct ib_wc *in_wc, const struct ib_grh *in_grh, |
4cd7c947 IW |
197 | const struct ib_mad_hdr *in, size_t in_mad_size, |
198 | struct ib_mad_hdr *out, size_t *out_mad_size, | |
199 | u16 *out_mad_pkey_index); | |
2b5e6b12 | 200 | |
fab97220 HS |
201 | void ehca_poll_eqs(unsigned long data); |
202 | ||
51aaa54e JF |
203 | int ehca_calc_ipd(struct ehca_shca *shca, int port, |
204 | enum ib_rate path_rate, u32 *ipd); | |
205 | ||
b9012e0a AS |
206 | void ehca_add_to_err_list(struct ehca_qp *qp, int on_sq); |
207 | ||
7e28db5d | 208 | #ifdef CONFIG_PPC_64K_PAGES |
f2d91361 | 209 | void *ehca_alloc_fw_ctrlblock(gfp_t flags); |
7e28db5d HNN |
210 | void ehca_free_fw_ctrlblock(void *ptr); |
211 | #else | |
2b94397a | 212 | #define ehca_alloc_fw_ctrlblock(flags) ((void *)get_zeroed_page(flags)) |
7e28db5d HNN |
213 | #define ehca_free_fw_ctrlblock(ptr) free_page((unsigned long)(ptr)) |
214 | #endif | |
215 | ||
bbdd267e HNN |
216 | void ehca_recover_sqp(struct ib_qp *sqp); |
217 | ||
fab97220 | 218 | #endif |