]>
Commit | Line | Data |
---|---|---|
fab97220 HS |
1 | /* |
2 | * IBM eServer eHCA Infiniband device driver for Linux on POWER | |
3 | * | |
4 | * Firmware Infiniband Interface code for POWER | |
5 | * | |
6 | * Authors: Christoph Raisch <raisch@de.ibm.com> | |
7 | * Hoang-Nam Nguyen <hnguyen@de.ibm.com> | |
8 | * Gerd Bayer <gerd.bayer@de.ibm.com> | |
9 | * Waleri Fomin <fomin@de.ibm.com> | |
10 | * | |
11 | * Copyright (c) 2005 IBM Corporation | |
12 | * | |
13 | * All rights reserved. | |
14 | * | |
15 | * This source code is distributed under a dual license of GPL v2.0 and OpenIB | |
16 | * BSD. | |
17 | * | |
18 | * OpenIB BSD License | |
19 | * | |
20 | * Redistribution and use in source and binary forms, with or without | |
21 | * modification, are permitted provided that the following conditions are met: | |
22 | * | |
23 | * Redistributions of source code must retain the above copyright notice, this | |
24 | * list of conditions and the following disclaimer. | |
25 | * | |
26 | * Redistributions in binary form must reproduce the above copyright notice, | |
27 | * this list of conditions and the following disclaimer in the documentation | |
28 | * and/or other materials | |
29 | * provided with the distribution. | |
30 | * | |
31 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
32 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
33 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
34 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |
35 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
36 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
37 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR | |
38 | * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER | |
39 | * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
40 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
41 | * POSSIBILITY OF SUCH DAMAGE. | |
42 | */ | |
43 | ||
44 | #ifndef __HCP_IF_H__ | |
45 | #define __HCP_IF_H__ | |
46 | ||
47 | #include "ehca_classes.h" | |
48 | #include "ehca_tools.h" | |
49 | #include "hipz_hw.h" | |
50 | ||
51 | /* | |
421f91d2 | 52 | * hipz_h_alloc_resource_eq allocates EQ resources in HW and FW, initialize |
fab97220 HS |
53 | * resources, create the empty EQPT (ring). |
54 | */ | |
55 | u64 hipz_h_alloc_resource_eq(const struct ipz_adapter_handle adapter_handle, | |
56 | struct ehca_pfeq *pfeq, | |
57 | const u32 neq_control, | |
58 | const u32 number_of_entries, | |
59 | struct ipz_eq_handle *eq_handle, | |
60 | u32 * act_nr_of_entries, | |
61 | u32 * act_pages, | |
62 | u32 * eq_ist); | |
63 | ||
64 | u64 hipz_h_reset_event(const struct ipz_adapter_handle adapter_handle, | |
65 | struct ipz_eq_handle eq_handle, | |
66 | const u64 event_mask); | |
67 | /* | |
68 | * hipz_h_allocate_resource_cq allocates CQ resources in HW and FW, initialize | |
69 | * resources, create the empty CQPT (ring). | |
70 | */ | |
71 | u64 hipz_h_alloc_resource_cq(const struct ipz_adapter_handle adapter_handle, | |
72 | struct ehca_cq *cq, | |
73 | struct ehca_alloc_cq_parms *param); | |
74 | ||
75 | ||
76 | /* | |
77 | * hipz_h_alloc_resource_qp allocates QP resources in HW and FW, | |
78 | * initialize resources, create empty QPPTs (2 rings). | |
79 | */ | |
80 | u64 hipz_h_alloc_resource_qp(const struct ipz_adapter_handle adapter_handle, | |
1988d1fa | 81 | struct ehca_alloc_qp_parms *parms, int is_user); |
fab97220 HS |
82 | |
83 | u64 hipz_h_query_port(const struct ipz_adapter_handle adapter_handle, | |
84 | const u8 port_id, | |
85 | struct hipz_query_port *query_port_response_block); | |
86 | ||
c4ed790d JF |
87 | u64 hipz_h_modify_port(const struct ipz_adapter_handle adapter_handle, |
88 | const u8 port_id, const u32 port_cap, | |
89 | const u8 init_type, const int modify_mask); | |
90 | ||
fab97220 HS |
91 | u64 hipz_h_query_hca(const struct ipz_adapter_handle adapter_handle, |
92 | struct hipz_query_hca *query_hca_rblock); | |
93 | ||
94 | /* | |
95 | * hipz_h_register_rpage internal function in hcp_if.h for all | |
96 | * hcp_H_REGISTER_RPAGE calls. | |
97 | */ | |
98 | u64 hipz_h_register_rpage(const struct ipz_adapter_handle adapter_handle, | |
99 | const u8 pagesize, | |
100 | const u8 queue_type, | |
101 | const u64 resource_handle, | |
102 | const u64 logical_address_of_page, | |
103 | u64 count); | |
104 | ||
105 | u64 hipz_h_register_rpage_eq(const struct ipz_adapter_handle adapter_handle, | |
106 | const struct ipz_eq_handle eq_handle, | |
107 | struct ehca_pfeq *pfeq, | |
108 | const u8 pagesize, | |
109 | const u8 queue_type, | |
110 | const u64 logical_address_of_page, | |
111 | const u64 count); | |
112 | ||
113 | u64 hipz_h_query_int_state(const struct ipz_adapter_handle | |
114 | hcp_adapter_handle, | |
115 | u32 ist); | |
116 | ||
117 | u64 hipz_h_register_rpage_cq(const struct ipz_adapter_handle adapter_handle, | |
118 | const struct ipz_cq_handle cq_handle, | |
119 | struct ehca_pfcq *pfcq, | |
120 | const u8 pagesize, | |
121 | const u8 queue_type, | |
122 | const u64 logical_address_of_page, | |
123 | const u64 count, | |
124 | const struct h_galpa gal); | |
125 | ||
126 | u64 hipz_h_register_rpage_qp(const struct ipz_adapter_handle adapter_handle, | |
127 | const struct ipz_qp_handle qp_handle, | |
128 | struct ehca_pfqp *pfqp, | |
129 | const u8 pagesize, | |
130 | const u8 queue_type, | |
131 | const u64 logical_address_of_page, | |
132 | const u64 count, | |
133 | const struct h_galpa galpa); | |
134 | ||
135 | u64 hipz_h_disable_and_get_wqe(const struct ipz_adapter_handle adapter_handle, | |
136 | const struct ipz_qp_handle qp_handle, | |
137 | struct ehca_pfqp *pfqp, | |
138 | void **log_addr_next_sq_wqe_tb_processed, | |
139 | void **log_addr_next_rq_wqe_tb_processed, | |
140 | int dis_and_get_function_code); | |
141 | enum hcall_sigt { | |
142 | HCALL_SIGT_NO_CQE = 0, | |
143 | HCALL_SIGT_BY_WQE = 1, | |
144 | HCALL_SIGT_EVERY = 2 | |
145 | }; | |
146 | ||
147 | u64 hipz_h_modify_qp(const struct ipz_adapter_handle adapter_handle, | |
148 | const struct ipz_qp_handle qp_handle, | |
149 | struct ehca_pfqp *pfqp, | |
150 | const u64 update_mask, | |
151 | struct hcp_modify_qp_control_block *mqpcb, | |
152 | struct h_galpa gal); | |
153 | ||
154 | u64 hipz_h_query_qp(const struct ipz_adapter_handle adapter_handle, | |
155 | const struct ipz_qp_handle qp_handle, | |
156 | struct ehca_pfqp *pfqp, | |
157 | struct hcp_modify_qp_control_block *qqpcb, | |
158 | struct h_galpa gal); | |
159 | ||
160 | u64 hipz_h_destroy_qp(const struct ipz_adapter_handle adapter_handle, | |
161 | struct ehca_qp *qp); | |
162 | ||
163 | u64 hipz_h_define_aqp0(const struct ipz_adapter_handle adapter_handle, | |
164 | const struct ipz_qp_handle qp_handle, | |
165 | struct h_galpa gal, | |
166 | u32 port); | |
167 | ||
168 | u64 hipz_h_define_aqp1(const struct ipz_adapter_handle adapter_handle, | |
169 | const struct ipz_qp_handle qp_handle, | |
170 | struct h_galpa gal, | |
171 | u32 port, u32 * pma_qp_nr, | |
172 | u32 * bma_qp_nr); | |
173 | ||
174 | u64 hipz_h_attach_mcqp(const struct ipz_adapter_handle adapter_handle, | |
175 | const struct ipz_qp_handle qp_handle, | |
176 | struct h_galpa gal, | |
177 | u16 mcg_dlid, | |
178 | u64 subnet_prefix, u64 interface_id); | |
179 | ||
180 | u64 hipz_h_detach_mcqp(const struct ipz_adapter_handle adapter_handle, | |
181 | const struct ipz_qp_handle qp_handle, | |
182 | struct h_galpa gal, | |
183 | u16 mcg_dlid, | |
184 | u64 subnet_prefix, u64 interface_id); | |
185 | ||
186 | u64 hipz_h_destroy_cq(const struct ipz_adapter_handle adapter_handle, | |
187 | struct ehca_cq *cq, | |
188 | u8 force_flag); | |
189 | ||
190 | u64 hipz_h_destroy_eq(const struct ipz_adapter_handle adapter_handle, | |
191 | struct ehca_eq *eq); | |
192 | ||
193 | /* | |
194 | * hipz_h_alloc_resource_mr allocates MR resources in HW and FW, initialize | |
195 | * resources. | |
196 | */ | |
197 | u64 hipz_h_alloc_resource_mr(const struct ipz_adapter_handle adapter_handle, | |
198 | const struct ehca_mr *mr, | |
199 | const u64 vaddr, | |
200 | const u64 length, | |
201 | const u32 access_ctrl, | |
202 | const struct ipz_pd pd, | |
203 | struct ehca_mr_hipzout_parms *outparms); | |
204 | ||
205 | /* hipz_h_register_rpage_mr registers MR resource pages in HW and FW */ | |
206 | u64 hipz_h_register_rpage_mr(const struct ipz_adapter_handle adapter_handle, | |
207 | const struct ehca_mr *mr, | |
208 | const u8 pagesize, | |
209 | const u8 queue_type, | |
210 | const u64 logical_address_of_page, | |
211 | const u64 count); | |
212 | ||
213 | /* hipz_h_query_mr queries MR in HW and FW */ | |
214 | u64 hipz_h_query_mr(const struct ipz_adapter_handle adapter_handle, | |
215 | const struct ehca_mr *mr, | |
216 | struct ehca_mr_hipzout_parms *outparms); | |
217 | ||
218 | /* hipz_h_free_resource_mr frees MR resources in HW and FW */ | |
219 | u64 hipz_h_free_resource_mr(const struct ipz_adapter_handle adapter_handle, | |
220 | const struct ehca_mr *mr); | |
221 | ||
222 | /* hipz_h_reregister_pmr reregisters MR in HW and FW */ | |
223 | u64 hipz_h_reregister_pmr(const struct ipz_adapter_handle adapter_handle, | |
224 | const struct ehca_mr *mr, | |
225 | const u64 vaddr_in, | |
226 | const u64 length, | |
227 | const u32 access_ctrl, | |
228 | const struct ipz_pd pd, | |
229 | const u64 mr_addr_cb, | |
230 | struct ehca_mr_hipzout_parms *outparms); | |
231 | ||
232 | /* hipz_h_register_smr register shared MR in HW and FW */ | |
233 | u64 hipz_h_register_smr(const struct ipz_adapter_handle adapter_handle, | |
234 | const struct ehca_mr *mr, | |
235 | const struct ehca_mr *orig_mr, | |
236 | const u64 vaddr_in, | |
237 | const u32 access_ctrl, | |
238 | const struct ipz_pd pd, | |
239 | struct ehca_mr_hipzout_parms *outparms); | |
240 | ||
241 | /* | |
242 | * hipz_h_alloc_resource_mw allocates MW resources in HW and FW, initialize | |
243 | * resources. | |
244 | */ | |
245 | u64 hipz_h_alloc_resource_mw(const struct ipz_adapter_handle adapter_handle, | |
246 | const struct ehca_mw *mw, | |
247 | const struct ipz_pd pd, | |
248 | struct ehca_mw_hipzout_parms *outparms); | |
249 | ||
250 | /* hipz_h_query_mw queries MW in HW and FW */ | |
251 | u64 hipz_h_query_mw(const struct ipz_adapter_handle adapter_handle, | |
252 | const struct ehca_mw *mw, | |
253 | struct ehca_mw_hipzout_parms *outparms); | |
254 | ||
255 | /* hipz_h_free_resource_mw frees MW resources in HW and FW */ | |
256 | u64 hipz_h_free_resource_mw(const struct ipz_adapter_handle adapter_handle, | |
257 | const struct ehca_mw *mw); | |
258 | ||
259 | u64 hipz_h_error_data(const struct ipz_adapter_handle adapter_handle, | |
260 | const u64 ressource_handle, | |
261 | void *rblock, | |
262 | unsigned long *byte_count); | |
6f7bc01a | 263 | u64 hipz_h_eoi(int irq); |
fab97220 HS |
264 | |
265 | #endif /* __HCP_IF_H__ */ |