ehca: memory region
PATCH 7/16 ehca: memory region
Signed-off-by Heiko J Schick <[email protected]>
drivers/infiniband/hw/ehca/ehca_mrmw.c | 2474 +++++++++++++++++++++++++++++++++ drivers/infiniband/hw/ehca/ehca_mrmw.h | 143 + 2 files changed, 2617 insertions(+)
drivers/infiniband/hw/ehca/ehca_mrmw.h +143 -0
@@ -0,0 +1,143 @@ +/* +* IBM eServer eHCA Infiniband device driver for Linux on POWER +* +* MR/MW declarations and inline functions +* +* Authors: Dietmar Decker <[email protected]> +* Christoph Raisch <[email protected]> +* +* Copyright (c) 2005 IBM Corporation +* +* All rights reserved. +* +* This source code is distributed under a dual license of GPL v2.0 and OpenIB +* BSD. +* +* OpenIB BSD License +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* +* Redistributions of source code must retain the above copyright notice, this +* list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials +* provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _EHCA_MRMW_H_ +#define _EHCA_MRMW_H_ + +#undef DEB_PREFIX +#define DEB_PREFIX "mrmw" + +int ehca_reg_mr (struct ehca_shca *shca, +struct ehca_mr *e_mr, +u64 *iova_start, +u64 size, +int acl, +struct ehca_pd *e_pd, +struct ehca_mr_pginfo *pginfo, +u32 *lkey, +u32 *rkey); + +int ehca_reg_mr_rpages (struct ehca_shca *shca, +struct ehca_mr *e_mr, +struct ehca_mr_pginfo *pginfo); + +int ehca_rereg_mr (struct ehca_shca *shca, +struct ehca_mr *e_mr, +u64 *iova_start, +u64 size, +int mr_access_flags, +struct ehca_pd *e_pd, +struct ehca_mr_pginfo *pginfo, +u32 *lkey, +u32 *rkey); + +int ehca_unmap_one_fmr (struct ehca_shca *shca, +struct ehca_mr *e_fmr); + +int ehca_reg_smr (struct ehca_shca *shca, +struct ehca_mr *e_origmr, +struct ehca_mr *e_newmr, +u64 *iova_start, +int acl, +struct ehca_pd *e_pd, +u32 *lkey, +u32 *rkey); + +int ehca_reg_internal_maxmr (struct ehca_shca *shca, +struct ehca_pd *e_pd, +struct ehca_mr **maxmr); + +int ehca_reg_maxmr (struct ehca_shca *shca, +struct ehca_mr *e_newmr, +u64 *iova_start, +int acl, +struct ehca_pd *e_pd, +u32 *lkey, +u32 *rkey); + +int ehca_dereg_internal_maxmr (struct ehca_shca *shca); + +int ehca_mr_chk_buf_and_calc_size (struct ib_phys_buf *phys_buf_array, +int num_phys_buf, +u64 *iova_start, +u64 *size); + +int ehca_fmr_check_page_list (struct ehca_mr *e_fmr, +u64 *page_list, +int list_len); + +int ehca_set_pagebuf (struct ehca_mr *e_mr, +struct ehca_mr_pginfo *pginfo, +u32 number, +u64 *kpage); + +int ehca_set_pagebuf_1 (struct ehca_mr *e_mr, +struct ehca_mr_pginfo *pginfo, +u64 *rpage); + +int ehca_mr_is_maxmr (u64 size, +u64 *iova_start); + +void ehca_mrmw_map_acl (int ib_acl, +u32 *hipz_acl); + +void ehca_mrmw_set_pgsize_hipz_acl (u32 *hipz_acl); + +void ehca_mrmw_reverse_map_acl (const u32 *hipz_acl, +int *ib_acl); + +int ehca_mrmw_map_hrc_alloc (const u64 hipz_rc); + +int ehca_mrmw_map_hrc_rrpg_last (const u64 hipz_rc); + +int ehca_mrmw_map_hrc_rrpg_notlast (const u64 hipz_rc); + +int ehca_mrmw_map_hrc_query_mr (const u64 hipz_rc); + +int ehca_mrmw_map_hrc_free_mr (const u64 hipz_rc); + +int ehca_mrmw_map_hrc_free_mw (const u64 hipz_rc); + +int ehca_mrmw_map_hrc_reg_smr (const u64 hipz_rc); + +void ehca_mr_deletenew (struct ehca_mr *mr); + +#endif /*_EHCA_MRMW_H_*/
drivers/infiniband/hw/ehca/ehca_mrmw.c +2474 -0
2,474 lines not on this page · raw message