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/* 52 * hipz_h_alloc_resource_eq allocates EQ resources in HW and FW, initalize 53 * resources, create the empty EQPT (ring). 54 */ 55u64 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 64u64 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 */ 71u64 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 */ 80u64 hipz_h_alloc_resource_qp(const struct ipz_adapter_handle adapter_handle, 81 struct ehca_qp *qp, 82 struct ehca_alloc_qp_parms *parms); 83 84u64 hipz_h_query_port(const struct ipz_adapter_handle adapter_handle, 85 const u8 port_id, 86 struct hipz_query_port *query_port_response_block); 87 88u64 hipz_h_modify_port(const struct ipz_adapter_handle adapter_handle, 89 const u8 port_id, const u32 port_cap, 90 const u8 init_type, const int modify_mask); 91 92u64 hipz_h_query_hca(const struct ipz_adapter_handle adapter_handle, 93 struct hipz_query_hca *query_hca_rblock); 94 95/* 96 * hipz_h_register_rpage internal function in hcp_if.h for all 97 * hcp_H_REGISTER_RPAGE calls. 98 */ 99u64 hipz_h_register_rpage(const struct ipz_adapter_handle adapter_handle, 100 const u8 pagesize, 101 const u8 queue_type, 102 const u64 resource_handle, 103 const u64 logical_address_of_page, 104 u64 count); 105 106u64 hipz_h_register_rpage_eq(const struct ipz_adapter_handle adapter_handle, 107 const struct ipz_eq_handle eq_handle, 108 struct ehca_pfeq *pfeq, 109 const u8 pagesize, 110 const u8 queue_type, 111 const u64 logical_address_of_page, 112 const u64 count); 113 114u64 hipz_h_query_int_state(const struct ipz_adapter_handle 115 hcp_adapter_handle, 116 u32 ist); 117 118u64 hipz_h_register_rpage_cq(const struct ipz_adapter_handle adapter_handle, 119 const struct ipz_cq_handle cq_handle, 120 struct ehca_pfcq *pfcq, 121 const u8 pagesize, 122 const u8 queue_type, 123 const u64 logical_address_of_page, 124 const u64 count, 125 const struct h_galpa gal); 126 127u64 hipz_h_register_rpage_qp(const struct ipz_adapter_handle adapter_handle, 128 const struct ipz_qp_handle qp_handle, 129 struct ehca_pfqp *pfqp, 130 const u8 pagesize, 131 const u8 queue_type, 132 const u64 logical_address_of_page, 133 const u64 count, 134 const struct h_galpa galpa); 135 136u64 hipz_h_disable_and_get_wqe(const struct ipz_adapter_handle adapter_handle, 137 const struct ipz_qp_handle qp_handle, 138 struct ehca_pfqp *pfqp, 139 void **log_addr_next_sq_wqe_tb_processed, 140 void **log_addr_next_rq_wqe_tb_processed, 141 int dis_and_get_function_code); 142enum hcall_sigt { 143 HCALL_SIGT_NO_CQE = 0, 144 HCALL_SIGT_BY_WQE = 1, 145 HCALL_SIGT_EVERY = 2 146}; 147 148u64 hipz_h_modify_qp(const struct ipz_adapter_handle adapter_handle, 149 const struct ipz_qp_handle qp_handle, 150 struct ehca_pfqp *pfqp, 151 const u64 update_mask, 152 struct hcp_modify_qp_control_block *mqpcb, 153 struct h_galpa gal); 154 155u64 hipz_h_query_qp(const struct ipz_adapter_handle adapter_handle, 156 const struct ipz_qp_handle qp_handle, 157 struct ehca_pfqp *pfqp, 158 struct hcp_modify_qp_control_block *qqpcb, 159 struct h_galpa gal); 160 161u64 hipz_h_destroy_qp(const struct ipz_adapter_handle adapter_handle, 162 struct ehca_qp *qp); 163 164u64 hipz_h_define_aqp0(const struct ipz_adapter_handle adapter_handle, 165 const struct ipz_qp_handle qp_handle, 166 struct h_galpa gal, 167 u32 port); 168 169u64 hipz_h_define_aqp1(const struct ipz_adapter_handle adapter_handle, 170 const struct ipz_qp_handle qp_handle, 171 struct h_galpa gal, 172 u32 port, u32 * pma_qp_nr, 173 u32 * bma_qp_nr); 174 175u64 hipz_h_attach_mcqp(const struct ipz_adapter_handle adapter_handle, 176 const struct ipz_qp_handle qp_handle, 177 struct h_galpa gal, 178 u16 mcg_dlid, 179 u64 subnet_prefix, u64 interface_id); 180 181u64 hipz_h_detach_mcqp(const struct ipz_adapter_handle adapter_handle, 182 const struct ipz_qp_handle qp_handle, 183 struct h_galpa gal, 184 u16 mcg_dlid, 185 u64 subnet_prefix, u64 interface_id); 186 187u64 hipz_h_destroy_cq(const struct ipz_adapter_handle adapter_handle, 188 struct ehca_cq *cq, 189 u8 force_flag); 190 191u64 hipz_h_destroy_eq(const struct ipz_adapter_handle adapter_handle, 192 struct ehca_eq *eq); 193 194/* 195 * hipz_h_alloc_resource_mr allocates MR resources in HW and FW, initialize 196 * resources. 197 */ 198u64 hipz_h_alloc_resource_mr(const struct ipz_adapter_handle adapter_handle, 199 const struct ehca_mr *mr, 200 const u64 vaddr, 201 const u64 length, 202 const u32 access_ctrl, 203 const struct ipz_pd pd, 204 struct ehca_mr_hipzout_parms *outparms); 205 206/* hipz_h_register_rpage_mr registers MR resource pages in HW and FW */ 207u64 hipz_h_register_rpage_mr(const struct ipz_adapter_handle adapter_handle, 208 const struct ehca_mr *mr, 209 const u8 pagesize, 210 const u8 queue_type, 211 const u64 logical_address_of_page, 212 const u64 count); 213 214/* hipz_h_query_mr queries MR in HW and FW */ 215u64 hipz_h_query_mr(const struct ipz_adapter_handle adapter_handle, 216 const struct ehca_mr *mr, 217 struct ehca_mr_hipzout_parms *outparms); 218 219/* hipz_h_free_resource_mr frees MR resources in HW and FW */ 220u64 hipz_h_free_resource_mr(const struct ipz_adapter_handle adapter_handle, 221 const struct ehca_mr *mr); 222 223/* hipz_h_reregister_pmr reregisters MR in HW and FW */ 224u64 hipz_h_reregister_pmr(const struct ipz_adapter_handle adapter_handle, 225 const struct ehca_mr *mr, 226 const u64 vaddr_in, 227 const u64 length, 228 const u32 access_ctrl, 229 const struct ipz_pd pd, 230 const u64 mr_addr_cb, 231 struct ehca_mr_hipzout_parms *outparms); 232 233/* hipz_h_register_smr register shared MR in HW and FW */ 234u64 hipz_h_register_smr(const struct ipz_adapter_handle adapter_handle, 235 const struct ehca_mr *mr, 236 const struct ehca_mr *orig_mr, 237 const u64 vaddr_in, 238 const u32 access_ctrl, 239 const struct ipz_pd pd, 240 struct ehca_mr_hipzout_parms *outparms); 241 242/* 243 * hipz_h_alloc_resource_mw allocates MW resources in HW and FW, initialize 244 * resources. 245 */ 246u64 hipz_h_alloc_resource_mw(const struct ipz_adapter_handle adapter_handle, 247 const struct ehca_mw *mw, 248 const struct ipz_pd pd, 249 struct ehca_mw_hipzout_parms *outparms); 250 251/* hipz_h_query_mw queries MW in HW and FW */ 252u64 hipz_h_query_mw(const struct ipz_adapter_handle adapter_handle, 253 const struct ehca_mw *mw, 254 struct ehca_mw_hipzout_parms *outparms); 255 256/* hipz_h_free_resource_mw frees MW resources in HW and FW */ 257u64 hipz_h_free_resource_mw(const struct ipz_adapter_handle adapter_handle, 258 const struct ehca_mw *mw); 259 260u64 hipz_h_error_data(const struct ipz_adapter_handle adapter_handle, 261 const u64 ressource_handle, 262 void *rblock, 263 unsigned long *byte_count); 264 265#endif /* __HCP_IF_H__ */ 266