1fe2caefcSParav Pandit /******************************************************************* 2fe2caefcSParav Pandit * This file is part of the Emulex RoCE Device Driver for * 3fe2caefcSParav Pandit * RoCE (RDMA over Converged Ethernet) CNA Adapters. * 4fe2caefcSParav Pandit * Copyright (C) 2008-2012 Emulex. All rights reserved. * 5fe2caefcSParav Pandit * EMULEX and SLI are trademarks of Emulex. * 6fe2caefcSParav Pandit * www.emulex.com * 7fe2caefcSParav Pandit * * 8fe2caefcSParav Pandit * This program is free software; you can redistribute it and/or * 9fe2caefcSParav Pandit * modify it under the terms of version 2 of the GNU General * 10fe2caefcSParav Pandit * Public License as published by the Free Software Foundation. * 11fe2caefcSParav Pandit * This program is distributed in the hope that it will be useful. * 12fe2caefcSParav Pandit * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND * 13fe2caefcSParav Pandit * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, * 14fe2caefcSParav Pandit * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE * 15fe2caefcSParav Pandit * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD * 16fe2caefcSParav Pandit * TO BE LEGALLY INVALID. See the GNU General Public License for * 17fe2caefcSParav Pandit * more details, a copy of which can be found in the file COPYING * 18fe2caefcSParav Pandit * included with this package. * 19fe2caefcSParav Pandit * 20fe2caefcSParav Pandit * Contact Information: 21fe2caefcSParav Pandit * linux-drivers@emulex.com 22fe2caefcSParav Pandit * 23fe2caefcSParav Pandit * Emulex 24fe2caefcSParav Pandit * 3333 Susan Street 25fe2caefcSParav Pandit * Costa Mesa, CA 92626 26fe2caefcSParav Pandit *******************************************************************/ 27fe2caefcSParav Pandit 28fe2caefcSParav Pandit #ifndef __OCRDMA_HW_H__ 29fe2caefcSParav Pandit #define __OCRDMA_HW_H__ 30fe2caefcSParav Pandit 31fe2caefcSParav Pandit #include "ocrdma_sli.h" 32fe2caefcSParav Pandit 33fe2caefcSParav Pandit static inline void ocrdma_cpu_to_le32(void *dst, u32 len) 34fe2caefcSParav Pandit { 35fe2caefcSParav Pandit #ifdef __BIG_ENDIAN 36fe2caefcSParav Pandit int i = 0; 37fe2caefcSParav Pandit u32 *src_ptr = dst; 38fe2caefcSParav Pandit u32 *dst_ptr = dst; 39fe2caefcSParav Pandit for (; i < (len / 4); i++) 40fe2caefcSParav Pandit *(dst_ptr + i) = cpu_to_le32p(src_ptr + i); 41fe2caefcSParav Pandit #endif 42fe2caefcSParav Pandit } 43fe2caefcSParav Pandit 44fe2caefcSParav Pandit static inline void ocrdma_le32_to_cpu(void *dst, u32 len) 45fe2caefcSParav Pandit { 46fe2caefcSParav Pandit #ifdef __BIG_ENDIAN 47fe2caefcSParav Pandit int i = 0; 48fe2caefcSParav Pandit u32 *src_ptr = dst; 49fe2caefcSParav Pandit u32 *dst_ptr = dst; 50fe2caefcSParav Pandit for (; i < (len / sizeof(u32)); i++) 51fe2caefcSParav Pandit *(dst_ptr + i) = le32_to_cpu(*(src_ptr + i)); 52fe2caefcSParav Pandit #endif 53fe2caefcSParav Pandit } 54fe2caefcSParav Pandit 55fe2caefcSParav Pandit static inline void ocrdma_copy_cpu_to_le32(void *dst, void *src, u32 len) 56fe2caefcSParav Pandit { 57fe2caefcSParav Pandit #ifdef __BIG_ENDIAN 58fe2caefcSParav Pandit int i = 0; 59fe2caefcSParav Pandit u32 *src_ptr = src; 60fe2caefcSParav Pandit u32 *dst_ptr = dst; 61fe2caefcSParav Pandit for (; i < (len / sizeof(u32)); i++) 62fe2caefcSParav Pandit *(dst_ptr + i) = cpu_to_le32p(src_ptr + i); 63fe2caefcSParav Pandit #else 64fe2caefcSParav Pandit memcpy(dst, src, len); 65fe2caefcSParav Pandit #endif 66fe2caefcSParav Pandit } 67fe2caefcSParav Pandit 68fe2caefcSParav Pandit static inline void ocrdma_copy_le32_to_cpu(void *dst, void *src, u32 len) 69fe2caefcSParav Pandit { 70fe2caefcSParav Pandit #ifdef __BIG_ENDIAN 71fe2caefcSParav Pandit int i = 0; 72fe2caefcSParav Pandit u32 *src_ptr = src; 73fe2caefcSParav Pandit u32 *dst_ptr = dst; 74fe2caefcSParav Pandit for (; i < len / sizeof(u32); i++) 75fe2caefcSParav Pandit *(dst_ptr + i) = le32_to_cpu(*(src_ptr + i)); 76fe2caefcSParav Pandit #else 77fe2caefcSParav Pandit memcpy(dst, src, len); 78fe2caefcSParav Pandit #endif 79fe2caefcSParav Pandit } 80fe2caefcSParav Pandit 81fe2caefcSParav Pandit int ocrdma_init_hw(struct ocrdma_dev *); 82fe2caefcSParav Pandit void ocrdma_cleanup_hw(struct ocrdma_dev *); 83fe2caefcSParav Pandit 84fe2caefcSParav Pandit enum ib_qp_state get_ibqp_state(enum ocrdma_qp_state qps); 85fe2caefcSParav Pandit void ocrdma_ring_cq_db(struct ocrdma_dev *, u16 cq_id, bool armed, 86fe2caefcSParav Pandit bool solicited, u16 cqe_popped); 87fe2caefcSParav Pandit 88fe2caefcSParav Pandit /* verbs specific mailbox commands */ 89fe2caefcSParav Pandit int ocrdma_query_config(struct ocrdma_dev *, 90fe2caefcSParav Pandit struct ocrdma_mbx_query_config *config); 91fe2caefcSParav Pandit int ocrdma_resolve_dgid(struct ocrdma_dev *, union ib_gid *dgid, u8 *mac_addr); 92fe2caefcSParav Pandit 93fe2caefcSParav Pandit int ocrdma_mbx_alloc_pd(struct ocrdma_dev *, struct ocrdma_pd *); 94fe2caefcSParav Pandit int ocrdma_mbx_dealloc_pd(struct ocrdma_dev *, struct ocrdma_pd *); 95fe2caefcSParav Pandit 96fe2caefcSParav Pandit int ocrdma_mbx_alloc_lkey(struct ocrdma_dev *, struct ocrdma_hw_mr *hwmr, 97fe2caefcSParav Pandit u32 pd_id, int addr_check); 98fe2caefcSParav Pandit int ocrdma_mbx_dealloc_lkey(struct ocrdma_dev *, int fmr, u32 lkey); 99fe2caefcSParav Pandit 100fe2caefcSParav Pandit int ocrdma_reg_mr(struct ocrdma_dev *, struct ocrdma_hw_mr *hwmr, 101fe2caefcSParav Pandit u32 pd_id, int acc); 102fe2caefcSParav Pandit int ocrdma_mbx_create_cq(struct ocrdma_dev *, struct ocrdma_cq *, 103fe2caefcSParav Pandit int entries, int dpp_cq); 104fe2caefcSParav Pandit int ocrdma_mbx_destroy_cq(struct ocrdma_dev *, struct ocrdma_cq *); 105fe2caefcSParav Pandit 106fe2caefcSParav Pandit int ocrdma_mbx_create_qp(struct ocrdma_qp *, struct ib_qp_init_attr *attrs, 107fe2caefcSParav Pandit u8 enable_dpp_cq, u16 dpp_cq_id, u16 *dpp_offset, 108fe2caefcSParav Pandit u16 *dpp_credit_lmt); 109fe2caefcSParav Pandit int ocrdma_mbx_modify_qp(struct ocrdma_dev *, struct ocrdma_qp *, 110fe2caefcSParav Pandit struct ib_qp_attr *attrs, int attr_mask, 111fe2caefcSParav Pandit enum ib_qp_state old_qps); 112fe2caefcSParav Pandit int ocrdma_mbx_query_qp(struct ocrdma_dev *, struct ocrdma_qp *, 113fe2caefcSParav Pandit struct ocrdma_qp_params *param); 114fe2caefcSParav Pandit int ocrdma_mbx_destroy_qp(struct ocrdma_dev *, struct ocrdma_qp *); 1151afc0454SNaresh Gottumukkala int ocrdma_mbx_create_srq(struct ocrdma_dev *, struct ocrdma_srq *, 116fe2caefcSParav Pandit struct ib_srq_init_attr *, 117fe2caefcSParav Pandit struct ocrdma_pd *); 118fe2caefcSParav Pandit int ocrdma_mbx_modify_srq(struct ocrdma_srq *, struct ib_srq_attr *); 119fe2caefcSParav Pandit int ocrdma_mbx_query_srq(struct ocrdma_srq *, struct ib_srq_attr *); 120fe2caefcSParav Pandit int ocrdma_mbx_destroy_srq(struct ocrdma_dev *, struct ocrdma_srq *); 121fe2caefcSParav Pandit 122fe2caefcSParav Pandit int ocrdma_alloc_av(struct ocrdma_dev *, struct ocrdma_ah *); 123fe2caefcSParav Pandit int ocrdma_free_av(struct ocrdma_dev *, struct ocrdma_ah *); 124fe2caefcSParav Pandit 125*057729cbSNaresh Gottumukkala int ocrdma_qp_state_change(struct ocrdma_qp *, enum ib_qp_state new_state, 126fe2caefcSParav Pandit enum ib_qp_state *old_ib_state); 127fe2caefcSParav Pandit bool ocrdma_is_qp_in_sq_flushlist(struct ocrdma_cq *, struct ocrdma_qp *); 128fe2caefcSParav Pandit bool ocrdma_is_qp_in_rq_flushlist(struct ocrdma_cq *, struct ocrdma_qp *); 129fe2caefcSParav Pandit void ocrdma_flush_qp(struct ocrdma_qp *); 130fe2caefcSParav Pandit 131fe2caefcSParav Pandit #endif /* __OCRDMA_HW_H__ */ 132