1 /* 2 * Copyright (c) 2006 - 2008 NetEffect, Inc. All rights reserved. 3 * Copyright (c) 2005 Open Grid Computing, Inc. All rights reserved. 4 * 5 * This software is available to you under a choice of one of two 6 * licenses. You may choose to be licensed under the terms of the GNU 7 * General Public License (GPL) Version 2, available from the file 8 * COPYING in the main directory of this source tree, or the 9 * OpenIB.org BSD license below: 10 * 11 * Redistribution and use in source and binary forms, with or 12 * without modification, are permitted provided that the following 13 * conditions are met: 14 * 15 * - Redistributions of source code must retain the above 16 * copyright notice, this list of conditions and the following 17 * disclaimer. 18 * 19 * - Redistributions in binary form must reproduce the above 20 * copyright notice, this list of conditions and the following 21 * disclaimer in the documentation and/or other materials 22 * provided with the distribution. 23 * 24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 28 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 29 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 30 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 31 * SOFTWARE. 32 * 33 */ 34 35 #ifndef NES_VERBS_H 36 #define NES_VERBS_H 37 38 struct nes_device; 39 40 #define NES_MAX_USER_DB_REGIONS 4096 41 #define NES_MAX_USER_WQ_REGIONS 4096 42 43 struct nes_ucontext { 44 struct ib_ucontext ibucontext; 45 struct nes_device *nesdev; 46 unsigned long mmap_wq_offset; 47 unsigned long mmap_cq_offset; /* to be removed */ 48 int index; /* rnic index (minor) */ 49 unsigned long allocated_doorbells[BITS_TO_LONGS(NES_MAX_USER_DB_REGIONS)]; 50 u16 mmap_db_index[NES_MAX_USER_DB_REGIONS]; 51 u16 first_free_db; 52 unsigned long allocated_wqs[BITS_TO_LONGS(NES_MAX_USER_WQ_REGIONS)]; 53 struct nes_qp *mmap_nesqp[NES_MAX_USER_WQ_REGIONS]; 54 u16 first_free_wq; 55 struct list_head cq_reg_mem_list; 56 struct list_head qp_reg_mem_list; 57 u32 mcrqf; 58 atomic_t usecnt; 59 }; 60 61 struct nes_pd { 62 struct ib_pd ibpd; 63 u16 pd_id; 64 atomic_t sqp_count; 65 u16 mmap_db_index; 66 }; 67 68 struct nes_mr { 69 union { 70 struct ib_mr ibmr; 71 struct ib_mw ibmw; 72 struct ib_fmr ibfmr; 73 }; 74 struct ib_umem *region; 75 u16 pbls_used; 76 u8 mode; 77 u8 pbl_4k; 78 }; 79 80 struct nes_hw_pb { 81 __le32 pa_low; 82 __le32 pa_high; 83 }; 84 85 struct nes_vpbl { 86 dma_addr_t pbl_pbase; 87 struct nes_hw_pb *pbl_vbase; 88 }; 89 90 struct nes_root_vpbl { 91 dma_addr_t pbl_pbase; 92 struct nes_hw_pb *pbl_vbase; 93 struct nes_vpbl *leaf_vpbl; 94 }; 95 96 struct nes_fmr { 97 struct nes_mr nesmr; 98 u32 leaf_pbl_cnt; 99 struct nes_root_vpbl root_vpbl; 100 struct ib_qp *ib_qp; 101 int access_rights; 102 struct ib_fmr_attr attr; 103 }; 104 105 struct nes_av; 106 107 struct nes_cq { 108 struct ib_cq ibcq; 109 struct nes_hw_cq hw_cq; 110 u32 polled_completions; 111 u32 cq_mem_size; 112 spinlock_t lock; 113 u8 virtual_cq; 114 u8 pad[3]; 115 }; 116 117 struct nes_wq { 118 spinlock_t lock; 119 }; 120 121 struct iw_cm_id; 122 struct ietf_mpa_frame; 123 124 struct nes_qp { 125 struct ib_qp ibqp; 126 void *allocated_buffer; 127 struct iw_cm_id *cm_id; 128 struct workqueue_struct *wq; 129 struct work_struct disconn_work; 130 struct nes_cq *nesscq; 131 struct nes_cq *nesrcq; 132 struct nes_pd *nespd; 133 void *cm_node; /* handle of the node this QP is associated with */ 134 struct ietf_mpa_frame *ietf_frame; 135 dma_addr_t ietf_frame_pbase; 136 wait_queue_head_t state_waitq; 137 struct ib_mr *lsmm_mr; 138 unsigned long socket; 139 struct nes_hw_qp hwqp; 140 struct work_struct work; 141 struct work_struct ae_work; 142 enum ib_qp_state ibqp_state; 143 u32 iwarp_state; 144 u32 hte_index; 145 u32 last_aeq; 146 u32 qp_mem_size; 147 atomic_t refcount; 148 atomic_t close_timer_started; 149 u32 mmap_sq_db_index; 150 u32 mmap_rq_db_index; 151 spinlock_t lock; 152 struct nes_qp_context *nesqp_context; 153 dma_addr_t nesqp_context_pbase; 154 void *pbl_vbase; 155 dma_addr_t pbl_pbase; 156 struct page *page; 157 wait_queue_head_t kick_waitq; 158 u16 in_disconnect; 159 u16 private_data_len; 160 u8 active_conn; 161 u8 skip_lsmm; 162 u8 user_mode; 163 u8 hte_added; 164 u8 hw_iwarp_state; 165 u8 flush_issued; 166 u8 hw_tcp_state; 167 u8 disconn_pending; 168 u8 destroyed; 169 }; 170 #endif /* NES_VERBS_H */ 171