Lines Matching refs:nesqp

219 	struct nes_qp *nesqp = to_nesqp(ibqp);  in nes_bind_mw()  local
226 if (nesqp->ibqp_state > IB_QPS_RTS) in nes_bind_mw()
229 spin_lock_irqsave(&nesqp->lock, flags); in nes_bind_mw()
231 head = nesqp->hwqp.sq_head; in nes_bind_mw()
232 qsize = nesqp->hwqp.sq_tail; in nes_bind_mw()
235 if (((head + (2 * qsize) - nesqp->hwqp.sq_tail) % qsize) == (qsize - 1)) { in nes_bind_mw()
236 spin_unlock_irqrestore(&nesqp->lock, flags); in nes_bind_mw()
240 wqe = &nesqp->hwqp.sq_vbase[head]; in nes_bind_mw()
242 nes_fill_init_qp_wqe(wqe, nesqp, head); in nes_bind_mw()
271 nesqp->hwqp.sq_head = head; in nes_bind_mw()
275 (1 << 24) | 0x00800000 | nesqp->hwqp.qp_id); in nes_bind_mw()
277 spin_unlock_irqrestore(&nesqp->lock, flags); in nes_bind_mw()
700 struct nes_qp *nesqp; in nes_mmap() local
713 nesqp = nes_ucontext->mmap_nesqp[index]; in nes_mmap()
714 if (nesqp == NULL) { in nes_mmap()
719 virt_to_phys(nesqp->hwqp.sq_vbase) >> PAGE_SHIFT, in nes_mmap()
725 vma->vm_private_data = nesqp; in nes_mmap()
887 static int nes_setup_virt_qp(struct nes_qp *nesqp, struct nes_pbl *nespbl, in nes_setup_virt_qp() argument
911nesqp->hwqp.sq_pbase = (le32_to_cpu(((__le32 *)pbl)[0])) | ((u64)((le32_to_cpu(((__le32 *)pbl)[1])… in nes_setup_virt_qp()
918 nesqp->hwqp.sq_vbase = kmap(nespbl->page); in nes_setup_virt_qp()
919 nesqp->page = nespbl->page; in nes_setup_virt_qp()
920 if (!nesqp->hwqp.sq_vbase) { in nes_setup_virt_qp()
929nesqp->hwqp.rq_pbase = (le32_to_cpu(((__le32 *)pbl)[0])) | ((u64)((le32_to_cpu(((__le32 *)pbl)[1])… in nes_setup_virt_qp()
934 nesqp->hwqp.sq_vbase, (unsigned long) nesqp->hwqp.sq_pbase, in nes_setup_virt_qp()
935 nesqp->hwqp.rq_vbase, (unsigned long) nesqp->hwqp.rq_pbase); in nes_setup_virt_qp()
941 kunmap(nesqp->page); in nes_setup_virt_qp()
948 nesqp->pbl_vbase = pci_alloc_consistent(nesdev->pcidev, 256, &nesqp->pbl_pbase); in nes_setup_virt_qp()
949 pblbuffer = nesqp->pbl_vbase; in nes_setup_virt_qp()
950 if (!nesqp->pbl_vbase) { in nes_setup_virt_qp()
958 kunmap(nesqp->page); in nes_setup_virt_qp()
961 memset(nesqp->pbl_vbase, 0, 256); in nes_setup_virt_qp()
976 nesqp->qp_mem_size = in nes_setup_virt_qp()
979 nesqp->qp_mem_size += PAGE_SIZE - 1; in nes_setup_virt_qp()
980 nesqp->qp_mem_size &= ~(PAGE_SIZE - 1); in nes_setup_virt_qp()
982 mem = pci_alloc_consistent(nesdev->pcidev, nesqp->qp_mem_size, in nes_setup_virt_qp()
983 &nesqp->hwqp.q2_pbase); in nes_setup_virt_qp()
986 pci_free_consistent(nesdev->pcidev, 256, nesqp->pbl_vbase, nesqp->pbl_pbase); in nes_setup_virt_qp()
987 nesqp->pbl_vbase = NULL; in nes_setup_virt_qp()
991 kunmap(nesqp->page); in nes_setup_virt_qp()
994 nesqp->sq_kmapped = 1; in nes_setup_virt_qp()
995 nesqp->hwqp.q2_vbase = mem; in nes_setup_virt_qp()
997 memset(nesqp->hwqp.q2_vbase, 0, 256); in nes_setup_virt_qp()
998 nesqp->nesqp_context = mem; in nes_setup_virt_qp()
999 memset(nesqp->nesqp_context, 0, sizeof(*nesqp->nesqp_context)); in nes_setup_virt_qp()
1000 nesqp->nesqp_context_pbase = nesqp->hwqp.q2_pbase + 256; in nes_setup_virt_qp()
1009 static int nes_setup_mmap_qp(struct nes_qp *nesqp, struct nes_vnic *nesvnic, in nes_setup_mmap_qp() argument
1015 nesqp->qp_mem_size = (sizeof(struct nes_hw_qp_wqe) * sq_size) + in nes_setup_mmap_qp()
1020 nesqp->qp_mem_size += PAGE_SIZE - 1; in nes_setup_mmap_qp()
1021 nesqp->qp_mem_size &= ~(PAGE_SIZE - 1); in nes_setup_mmap_qp()
1023 mem = pci_alloc_consistent(nesdev->pcidev, nesqp->qp_mem_size, in nes_setup_mmap_qp()
1024 &nesqp->hwqp.sq_pbase); in nes_setup_mmap_qp()
1029 mem, (unsigned long)nesqp->hwqp.sq_pbase, nesqp->qp_mem_size); in nes_setup_mmap_qp()
1031 memset(mem, 0, nesqp->qp_mem_size); in nes_setup_mmap_qp()
1033 nesqp->hwqp.sq_vbase = mem; in nes_setup_mmap_qp()
1036 nesqp->hwqp.rq_vbase = mem; in nes_setup_mmap_qp()
1037 nesqp->hwqp.rq_pbase = nesqp->hwqp.sq_pbase + in nes_setup_mmap_qp()
1041 nesqp->hwqp.q2_vbase = mem; in nes_setup_mmap_qp()
1042 nesqp->hwqp.q2_pbase = nesqp->hwqp.rq_pbase + in nes_setup_mmap_qp()
1045 memset(nesqp->hwqp.q2_vbase, 0, 256); in nes_setup_mmap_qp()
1047 nesqp->nesqp_context = mem; in nes_setup_mmap_qp()
1048 nesqp->nesqp_context_pbase = nesqp->hwqp.q2_pbase + 256; in nes_setup_mmap_qp()
1049 memset(nesqp->nesqp_context, 0, sizeof(*nesqp->nesqp_context)); in nes_setup_mmap_qp()
1058 struct nes_qp *nesqp, int virt_wqs) in nes_free_qp_mem() argument
1063 pci_free_consistent(nesdev->pcidev, nesqp->qp_mem_size, in nes_free_qp_mem()
1064 nesqp->hwqp.sq_vbase, nesqp->hwqp.sq_pbase); in nes_free_qp_mem()
1069 …pci_free_consistent(nesdev->pcidev, nesqp->qp_mem_size, nesqp->hwqp.q2_vbase, nesqp->hwqp.q2_pbase… in nes_free_qp_mem()
1070 pci_free_consistent(nesdev->pcidev, 256, nesqp->pbl_vbase, nesqp->pbl_pbase ); in nes_free_qp_mem()
1071 nesqp->pbl_vbase = NULL; in nes_free_qp_mem()
1072 if (nesqp->sq_kmapped) { in nes_free_qp_mem()
1073 nesqp->sq_kmapped = 0; in nes_free_qp_mem()
1074 kunmap(nesqp->page); in nes_free_qp_mem()
1092 struct nes_qp *nesqp; in nes_create_qp() local
1149 mem = kzalloc(sizeof(*nesqp)+NES_SW_CONTEXT_ALIGN-1, GFP_KERNEL); in nes_create_qp()
1159 nesqp = (struct nes_qp *)(unsigned long)u64nesqp; in nes_create_qp()
1162 nesqp->allocated_buffer = mem; in nes_create_qp()
1167 kfree(nesqp->allocated_buffer); in nes_create_qp()
1175 nesqp->nesuqp_addr = req.user_qp_buffer; in nes_create_qp()
1177 nesqp->user_mode = 1; in nes_create_qp()
1194 kfree(nesqp->allocated_buffer); in nes_create_qp()
1200 nesqp->mmap_sq_db_index = in nes_create_qp()
1205 if (nesqp->mmap_sq_db_index >= NES_MAX_USER_WQ_REGIONS) { in nes_create_qp()
1214 kfree(nesqp->allocated_buffer); in nes_create_qp()
1217 set_bit(nesqp->mmap_sq_db_index, nes_ucontext->allocated_wqs); in nes_create_qp()
1218 nes_ucontext->mmap_nesqp[nesqp->mmap_sq_db_index] = nesqp; in nes_create_qp()
1219 nes_ucontext->first_free_wq = nesqp->mmap_sq_db_index + 1; in nes_create_qp()
1222 kfree(nesqp->allocated_buffer); in nes_create_qp()
1226 err = (!virt_wqs) ? nes_setup_mmap_qp(nesqp, nesvnic, sq_size, rq_size) : in nes_create_qp()
1227 nes_setup_virt_qp(nesqp, nespbl, nesvnic, sq_size, rq_size); in nes_create_qp()
1232 kfree(nesqp->allocated_buffer); in nes_create_qp()
1236 nesqp->hwqp.sq_size = sq_size; in nes_create_qp()
1237 nesqp->hwqp.sq_encoded_size = sq_encoded_size; in nes_create_qp()
1238 nesqp->hwqp.sq_head = 1; in nes_create_qp()
1239 nesqp->hwqp.rq_size = rq_size; in nes_create_qp()
1240 nesqp->hwqp.rq_encoded_size = rq_encoded_size; in nes_create_qp()
1244 nesqp->hwqp.qp_id = qp_num; in nes_create_qp()
1245 nesqp->ibqp.qp_num = nesqp->hwqp.qp_id; in nes_create_qp()
1246 nesqp->nespd = nespd; in nes_create_qp()
1249 nesqp->nesscq = nescq; in nes_create_qp()
1251 nesqp->nesrcq = nescq; in nes_create_qp()
1253 nesqp->nesqp_context->misc |= cpu_to_le32((u32)PCI_FUNC(nesdev->pcidev->devfn) << in nes_create_qp()
1255 nesqp->nesqp_context->misc |= cpu_to_le32((u32)nesqp->hwqp.rq_encoded_size << in nes_create_qp()
1257 nesqp->nesqp_context->misc |= cpu_to_le32((u32)nesqp->hwqp.sq_encoded_size << in nes_create_qp()
1260 nesqp->nesqp_context->misc |= cpu_to_le32(NES_QPCONTEXT_MISC_PRIV_EN); in nes_create_qp()
1261 nesqp->nesqp_context->misc |= cpu_to_le32(NES_QPCONTEXT_MISC_FAST_REGISTER_EN); in nes_create_qp()
1263 nesqp->nesqp_context->cqs = cpu_to_le32(nesqp->nesscq->hw_cq.cq_number + in nes_create_qp()
1264 ((u32)nesqp->nesrcq->hw_cq.cq_number << 16)); in nes_create_qp()
1265 u64temp = (u64)nesqp->hwqp.sq_pbase; in nes_create_qp()
1266 nesqp->nesqp_context->sq_addr_low = cpu_to_le32((u32)u64temp); in nes_create_qp()
1267 nesqp->nesqp_context->sq_addr_high = cpu_to_le32((u32)(u64temp >> 32)); in nes_create_qp()
1271 u64temp = (u64)nesqp->hwqp.sq_pbase; in nes_create_qp()
1272 nesqp->nesqp_context->sq_addr_low = cpu_to_le32((u32)u64temp); in nes_create_qp()
1273 nesqp->nesqp_context->sq_addr_high = cpu_to_le32((u32)(u64temp >> 32)); in nes_create_qp()
1274 u64temp = (u64)nesqp->hwqp.rq_pbase; in nes_create_qp()
1275 nesqp->nesqp_context->rq_addr_low = cpu_to_le32((u32)u64temp); in nes_create_qp()
1276 nesqp->nesqp_context->rq_addr_high = cpu_to_le32((u32)(u64temp >> 32)); in nes_create_qp()
1278 u64temp = (u64)nesqp->pbl_pbase; in nes_create_qp()
1279 nesqp->nesqp_context->rq_addr_low = cpu_to_le32((u32)u64temp); in nes_create_qp()
1280 nesqp->nesqp_context->rq_addr_high = cpu_to_le32((u32)(u64temp >> 32)); in nes_create_qp()
1287 nesqp->nesqp_context->misc2 |= cpu_to_le32( in nes_create_qp()
1297 nesqp->nesqp_context->pd_index_wscale |= cpu_to_le32((u32)nesqp->nespd->pd_id << 16); in nes_create_qp()
1298 u64temp = (u64)nesqp->hwqp.q2_pbase; in nes_create_qp()
1299 nesqp->nesqp_context->q2_addr_low = cpu_to_le32((u32)u64temp); in nes_create_qp()
1300 nesqp->nesqp_context->q2_addr_high = cpu_to_le32((u32)(u64temp >> 32)); in nes_create_qp()
1301 nesqp->nesqp_context->aeq_token_low = cpu_to_le32((u32)((unsigned long)(nesqp))); in nes_create_qp()
1302nesqp->nesqp_context->aeq_token_high = cpu_to_le32((u32)(upper_32_bits((unsigned long)(nesqp)))); in nes_create_qp()
1303 nesqp->nesqp_context->ird_ord_sizes = cpu_to_le32(NES_QPCONTEXT_ORDIRD_ALSMM | in nes_create_qp()
1309 nesqp->nesqp_context->ird_ord_sizes |= cpu_to_le32(NES_QPCONTEXT_ORDIRD_RNMC); in nes_create_qp()
1318 nes_free_qp_mem(nesdev, nesqp,virt_wqs); in nes_create_qp()
1319 kfree(nesqp->allocated_buffer); in nes_create_qp()
1335 set_wqe_32bit_value(cqp_wqe->wqe_words, NES_CQP_WQE_ID_IDX, nesqp->hwqp.qp_id); in nes_create_qp()
1337 u64temp = (u64)nesqp->nesqp_context_pbase; in nes_create_qp()
1345 nesqp->hwqp.qp_id); in nes_create_qp()
1351 nesqp->hwqp.qp_id, ret, nesdev->cqp.sq_head, nesdev->cqp.sq_tail, in nes_create_qp()
1356 nes_free_qp_mem(nesdev, nesqp,virt_wqs); in nes_create_qp()
1357 kfree(nesqp->allocated_buffer); in nes_create_qp()
1368 uresp.mmap_sq_db_index = nesqp->mmap_sq_db_index; in nes_create_qp()
1372 uresp.qp_id = nesqp->hwqp.qp_id; in nes_create_qp()
1376 nes_free_qp_mem(nesdev, nesqp,virt_wqs); in nes_create_qp()
1377 kfree(nesqp->allocated_buffer); in nes_create_qp()
1383 nesqp->hwqp.qp_id, nesqp, (u32)sizeof(*nesqp)); in nes_create_qp()
1384 spin_lock_init(&nesqp->lock); in nes_create_qp()
1385 nes_add_ref(&nesqp->ibqp); in nes_create_qp()
1392 nesqp->sig_all = (init_attr->sq_sig_type == IB_SIGNAL_ALL_WR); in nes_create_qp()
1393 init_timer(&nesqp->terminate_timer); in nes_create_qp()
1394 nesqp->terminate_timer.function = nes_terminate_timeout; in nes_create_qp()
1395 nesqp->terminate_timer.data = (unsigned long)nesqp; in nes_create_qp()
1398 nesdev->nesadapter->qp_table[nesqp->hwqp.qp_id-NES_FIRST_QPN] = nesqp; in nes_create_qp()
1402 return &nesqp->ibqp; in nes_create_qp()
1408 static void nes_clean_cq(struct nes_qp *nesqp, struct nes_cq *nescq) in nes_clean_cq() argument
1425 if (u64temp == (u64)(unsigned long)nesqp) { in nes_clean_cq()
1444 struct nes_qp *nesqp = to_nesqp(ibqp); in nes_destroy_qp() local
1452 nesqp->destroyed = 1; in nes_destroy_qp()
1455 if (nesqp->ibqp_state >= IB_QPS_INIT && nesqp->ibqp_state <= IB_QPS_RTS) { in nes_destroy_qp()
1458 nes_modify_qp(&nesqp->ibqp, &attr, IB_QP_STATE, NULL); in nes_destroy_qp()
1461 if (((nesqp->ibqp_state == IB_QPS_INIT) || in nes_destroy_qp()
1462 (nesqp->ibqp_state == IB_QPS_RTR)) && (nesqp->cm_id)) { in nes_destroy_qp()
1463 cm_id = nesqp->cm_id; in nes_destroy_qp()
1473 nesqp->hwqp.qp_id, cm_id, atomic_read(&nesqp->refcount)); in nes_destroy_qp()
1481 if (nesqp->user_mode) { in nes_destroy_qp()
1484 clear_bit(nesqp->mmap_sq_db_index, nes_ucontext->allocated_wqs); in nes_destroy_qp()
1485 nes_ucontext->mmap_nesqp[nesqp->mmap_sq_db_index] = NULL; in nes_destroy_qp()
1486 if (nes_ucontext->first_free_wq > nesqp->mmap_sq_db_index) { in nes_destroy_qp()
1487 nes_ucontext->first_free_wq = nesqp->mmap_sq_db_index; in nes_destroy_qp()
1490 if (nesqp->pbl_pbase && nesqp->sq_kmapped) { in nes_destroy_qp()
1491 nesqp->sq_kmapped = 0; in nes_destroy_qp()
1492 kunmap(nesqp->page); in nes_destroy_qp()
1496 if (nesqp->nesscq) in nes_destroy_qp()
1497 nes_clean_cq(nesqp, nesqp->nesscq); in nes_destroy_qp()
1499 if ((nesqp->nesrcq) && (nesqp->nesrcq != nesqp->nesscq)) in nes_destroy_qp()
1500 nes_clean_cq(nesqp, nesqp->nesrcq); in nes_destroy_qp()
1502 nes_rem_ref(&nesqp->ibqp); in nes_destroy_qp()
2814 struct nes_qp *nesqp = to_nesqp(ibqp); in nes_query_qp() local
2819 attr->cap.max_send_wr = nesqp->hwqp.sq_size; in nes_query_qp()
2820 attr->cap.max_recv_wr = nesqp->hwqp.rq_size; in nes_query_qp()
2827 init_attr->event_handler = nesqp->ibqp.event_handler; in nes_query_qp()
2828 init_attr->qp_context = nesqp->ibqp.qp_context; in nes_query_qp()
2829 init_attr->send_cq = nesqp->ibqp.send_cq; in nes_query_qp()
2830 init_attr->recv_cq = nesqp->ibqp.recv_cq; in nes_query_qp()
2831 init_attr->srq = nesqp->ibqp.srq; in nes_query_qp()
2841 int nes_hw_modify_qp(struct nes_device *nesdev, struct nes_qp *nesqp, in nes_hw_modify_qp() argument
2852 nesqp->hwqp.qp_id, atomic_read(&nesqp->refcount)); in nes_hw_modify_qp()
2871 set_wqe_32bit_value(cqp_wqe->wqe_words, NES_CQP_WQE_ID_IDX, nesqp->hwqp.qp_id); in nes_hw_modify_qp()
2872 …set_wqe_64bit_value(cqp_wqe->wqe_words, NES_CQP_QP_WQE_CONTEXT_LOW_IDX, (u64)nesqp->nesqp_context_… in nes_hw_modify_qp()
2892 nesqp->hwqp.qp_id, ret, cqp_request->major_code, cqp_request->minor_code); in nes_hw_modify_qp()
2897 nesqp->hwqp.qp_id, cqp_request->major_code, in nes_hw_modify_qp()
2921 struct nes_qp *nesqp = to_nesqp(ibqp); in nes_modify_qp() local
2936 nesqp->hwqp.qp_id, attr->qp_state, nesqp->ibqp_state, in nes_modify_qp()
2937 nesqp->iwarp_state, atomic_read(&nesqp->refcount)); in nes_modify_qp()
2939 spin_lock_irqsave(&nesqp->lock, qplockflags); in nes_modify_qp()
2943 nesqp->hwqp.qp_id, nesqp->hw_iwarp_state, in nes_modify_qp()
2944 nesqp->hw_tcp_state, attr->qp_access_flags, attr_mask); in nes_modify_qp()
2950 nesqp->hwqp.qp_id); in nes_modify_qp()
2951 if (nesqp->iwarp_state > (u32)NES_CQP_QP_IWARP_STATE_IDLE) { in nes_modify_qp()
2952 spin_unlock_irqrestore(&nesqp->lock, qplockflags); in nes_modify_qp()
2960 nesqp->hwqp.qp_id); in nes_modify_qp()
2961 if (nesqp->iwarp_state>(u32)NES_CQP_QP_IWARP_STATE_IDLE) { in nes_modify_qp()
2962 spin_unlock_irqrestore(&nesqp->lock, qplockflags); in nes_modify_qp()
2970 nesqp->hwqp.qp_id); in nes_modify_qp()
2971 if (nesqp->iwarp_state>(u32)NES_CQP_QP_IWARP_STATE_RTS) { in nes_modify_qp()
2972 spin_unlock_irqrestore(&nesqp->lock, qplockflags); in nes_modify_qp()
2975 if (nesqp->cm_id == NULL) { in nes_modify_qp()
2977 nesqp->hwqp.qp_id ); in nes_modify_qp()
2978 spin_unlock_irqrestore(&nesqp->lock, qplockflags); in nes_modify_qp()
2982 if (nesqp->iwarp_state != NES_CQP_QP_IWARP_STATE_RTS) in nes_modify_qp()
2986 nesqp->hw_tcp_state = NES_AEQE_TCP_STATE_ESTABLISHED; in nes_modify_qp()
2987 nesqp->hw_iwarp_state = NES_AEQE_IWARP_STATE_RTS; in nes_modify_qp()
2988 nesqp->hte_added = 1; in nes_modify_qp()
2993 nesqp->hwqp.qp_id, nesqp->hwqp.sq_head, nesqp->hwqp.sq_tail); in nes_modify_qp()
2994 if (nesqp->iwarp_state == (u32)NES_CQP_QP_IWARP_STATE_CLOSING) { in nes_modify_qp()
2995 spin_unlock_irqrestore(&nesqp->lock, qplockflags); in nes_modify_qp()
2998 if (nesqp->iwarp_state > (u32)NES_CQP_QP_IWARP_STATE_CLOSING) { in nes_modify_qp()
3001 nesqp->hwqp.qp_id); in nes_modify_qp()
3002 spin_unlock_irqrestore(&nesqp->lock, qplockflags); in nes_modify_qp()
3005 if (nesqp->hw_iwarp_state != NES_AEQE_IWARP_STATE_RTS) { in nes_modify_qp()
3008 nesqp->hwqp.qp_id); in nes_modify_qp()
3011 switch (nesqp->hw_iwarp_state) { in nes_modify_qp()
3023 nesqp->hw_iwarp_state = NES_AEQE_IWARP_STATE_CLOSING; in nes_modify_qp()
3030 nesqp->hwqp.qp_id); in nes_modify_qp()
3031 if (nesqp->iwarp_state>=(u32)NES_CQP_QP_IWARP_STATE_TERMINATE) { in nes_modify_qp()
3032 spin_unlock_irqrestore(&nesqp->lock, qplockflags); in nes_modify_qp()
3037 nesqp->hw_iwarp_state = NES_AEQE_IWARP_STATE_TERMINATE; in nes_modify_qp()
3042 if (nesqp->iwarp_state == (u32)NES_CQP_QP_IWARP_STATE_ERROR) { in nes_modify_qp()
3043 spin_unlock_irqrestore(&nesqp->lock, qplockflags); in nes_modify_qp()
3047 nesqp->hwqp.qp_id); in nes_modify_qp()
3048 if (nesqp->term_flags) in nes_modify_qp()
3049 del_timer(&nesqp->terminate_timer); in nes_modify_qp()
3053 if (nesqp->hte_added) { in nes_modify_qp()
3056 nesqp->hte_added = 0; in nes_modify_qp()
3058 if ((nesqp->hw_tcp_state > NES_AEQE_TCP_STATE_CLOSED) && in nes_modify_qp()
3060 (nesqp->hw_tcp_state != NES_AEQE_TCP_STATE_TIME_WAIT)) { in nes_modify_qp()
3064 nesqp->hwqp.qp_id, nesqp->hw_tcp_state); in nes_modify_qp()
3068 nesqp->hw_iwarp_state = NES_AEQE_IWARP_STATE_ERROR; in nes_modify_qp()
3071 spin_unlock_irqrestore(&nesqp->lock, qplockflags); in nes_modify_qp()
3076 nesqp->ibqp_state = attr->qp_state; in nes_modify_qp()
3077 nesqp->iwarp_state = next_iwarp_state & NES_CQP_QP_IWARP_STATE_MASK; in nes_modify_qp()
3079 nesqp->iwarp_state); in nes_modify_qp()
3084 nesqp->nesqp_context->misc |= cpu_to_le32(NES_QPCONTEXT_MISC_RDMA_WRITE_EN | in nes_modify_qp()
3089 nesqp->nesqp_context->misc |= cpu_to_le32(NES_QPCONTEXT_MISC_RDMA_WRITE_EN); in nes_modify_qp()
3093 nesqp->nesqp_context->misc |= cpu_to_le32(NES_QPCONTEXT_MISC_RDMA_READ_EN); in nes_modify_qp()
3097 nesqp->nesqp_context->misc |= cpu_to_le32(NES_QPCONTEXT_MISC_WBIND_EN); in nes_modify_qp()
3101 if (nesqp->user_mode) { in nes_modify_qp()
3102 nesqp->nesqp_context->misc |= cpu_to_le32(NES_QPCONTEXT_MISC_RDMA_WRITE_EN | in nes_modify_qp()
3108 original_last_aeq = nesqp->last_aeq; in nes_modify_qp()
3109 spin_unlock_irqrestore(&nesqp->lock, qplockflags); in nes_modify_qp()
3118 ret = nes_hw_modify_qp(nesdev, nesqp, next_iwarp_state, 0, 1); in nes_modify_qp()
3122 next_iwarp_state, nesqp->hwqp.qp_id); in nes_modify_qp()
3126 if ((issue_modify_qp) && (nesqp->ibqp_state > IB_QPS_RTS)) { in nes_modify_qp()
3129 nesqp->hwqp.qp_id, atomic_read(&nesqp->refcount), in nes_modify_qp()
3130 original_last_aeq, nesqp->last_aeq); in nes_modify_qp()
3133 if (nesqp->cm_id && nesqp->hw_tcp_state != 0) { in nes_modify_qp()
3136 nesqp->hwqp.qp_id, atomic_read(&nesqp->refcount), in nes_modify_qp()
3137 original_last_aeq, nesqp->last_aeq); in nes_modify_qp()
3139 spin_lock_irqsave(&nesqp->lock, qplockflags); in nes_modify_qp()
3140 nesqp->hw_tcp_state = NES_AEQE_TCP_STATE_CLOSED; in nes_modify_qp()
3141 nesqp->last_aeq = NES_AEQE_AEID_RESET_SENT; in nes_modify_qp()
3142 spin_unlock_irqrestore(&nesqp->lock, qplockflags); in nes_modify_qp()
3143 nes_cm_disconn(nesqp); in nes_modify_qp()
3146 nesqp->hwqp.qp_id, atomic_read(&nesqp->refcount)); in nes_modify_qp()
3149 spin_lock_irqsave(&nesqp->lock, qplockflags); in nes_modify_qp()
3150 if (nesqp->cm_id) { in nes_modify_qp()
3152 if (atomic_inc_return(&nesqp->close_timer_started) == 1) { in nes_modify_qp()
3153 nesqp->cm_id->add_ref(nesqp->cm_id); in nes_modify_qp()
3157 nesqp->hwqp.qp_id, atomic_read(&nesqp->refcount), in nes_modify_qp()
3158 original_last_aeq, nesqp->last_aeq); in nes_modify_qp()
3159 schedule_nes_timer(nesqp->cm_node, (struct sk_buff *) nesqp, NES_TIMER_TYPE_CLOSE, 1, 0); in nes_modify_qp()
3161 spin_unlock_irqrestore(&nesqp->lock, qplockflags); in nes_modify_qp()
3163 spin_unlock_irqrestore(&nesqp->lock, qplockflags); in nes_modify_qp()
3167 nesqp->hwqp.qp_id, atomic_read(&nesqp->refcount), in nes_modify_qp()
3168 original_last_aeq, nesqp->last_aeq); in nes_modify_qp()
3174 nesqp->hwqp.qp_id, atomic_read(&nesqp->refcount), in nes_modify_qp()
3175 original_last_aeq, nesqp->last_aeq); in nes_modify_qp()
3180 nesqp->hwqp.qp_id, atomic_read(&nesqp->refcount), in nes_modify_qp()
3181 original_last_aeq, nesqp->last_aeq); in nes_modify_qp()
3187 nesqp->hwqp.qp_id, atomic_read(&nesqp->refcount)); in nes_modify_qp()
3260 struct nes_qp *nesqp = to_nesqp(ibqp); in nes_post_send() local
3263 u32 qsize = nesqp->hwqp.sq_size; in nes_post_send()
3269 if (nesqp->ibqp_state > IB_QPS_RTS) { in nes_post_send()
3274 spin_lock_irqsave(&nesqp->lock, flags); in nes_post_send()
3276 head = nesqp->hwqp.sq_head; in nes_post_send()
3280 if (nesqp->term_flags) { in nes_post_send()
3286 if (((head + (2 * qsize) - nesqp->hwqp.sq_tail) % qsize) == (qsize - 1)) { in nes_post_send()
3291 wqe = &nesqp->hwqp.sq_vbase[head]; in nes_post_send()
3294 nes_fill_init_qp_wqe(wqe, nesqp, head); in nes_post_send()
3481 if ((ib_wr->send_flags & IB_SEND_SIGNALED) || nesqp->sig_all) in nes_post_send()
3494 nesqp->hwqp.sq_head = head; in nes_post_send()
3500 (counter << 24) | 0x00800000 | nesqp->hwqp.qp_id); in nes_post_send()
3503 spin_unlock_irqrestore(&nesqp->lock, flags); in nes_post_send()
3522 struct nes_qp *nesqp = to_nesqp(ibqp); in nes_post_recv() local
3526 u32 qsize = nesqp->hwqp.rq_size; in nes_post_recv()
3532 if (nesqp->ibqp_state > IB_QPS_RTS) { in nes_post_recv()
3537 spin_lock_irqsave(&nesqp->lock, flags); in nes_post_recv()
3539 head = nesqp->hwqp.rq_head; in nes_post_recv()
3543 if (nesqp->term_flags) { in nes_post_recv()
3553 if (((head + (2 * qsize) - nesqp->hwqp.rq_tail) % qsize) == (qsize - 1)) { in nes_post_recv()
3559 wqe = &nesqp->hwqp.rq_vbase[head]; in nes_post_recv()
3563 nes_fill_init_qp_wqe(wqe, nesqp, head); in nes_post_recv()
3588 nesqp->hwqp.rq_head = head; in nes_post_recv()
3593 nes_write32(nesdev->regs+NES_WQE_ALLOC, (counter<<24) | nesqp->hwqp.qp_id); in nes_post_recv()
3596 spin_unlock_irqrestore(&nesqp->lock, flags); in nes_post_recv()
3616 struct nes_qp *nesqp; in nes_poll_cq() local
3654 nesqp = (struct nes_qp *)(unsigned long)u64temp; in nes_poll_cq()
3671 entry->qp = &nesqp->ibqp; in nes_poll_cq()
3672 entry->src_qp = nesqp->hwqp.qp_id; in nes_poll_cq()
3675 if (nesqp->skip_lsmm) { in nes_poll_cq()
3676 nesqp->skip_lsmm = 0; in nes_poll_cq()
3677 nesqp->hwqp.sq_tail++; in nes_poll_cq()
3681 wrid = (((u64)(cpu_to_le32((u32)nesqp->hwqp.sq_vbase[wqe_index]. in nes_poll_cq()
3683 ((u64)(cpu_to_le32((u32)nesqp->hwqp.sq_vbase[wqe_index]. in nes_poll_cq()
3685 entry->byte_len = le32_to_cpu(nesqp->hwqp.sq_vbase[wqe_index]. in nes_poll_cq()
3688 switch (le32_to_cpu(nesqp->hwqp.sq_vbase[wqe_index]. in nes_poll_cq()
3697 entry->byte_len = le32_to_cpu(nesqp->hwqp.sq_vbase[wqe_index]. in nes_poll_cq()
3715 nesqp->hwqp.sq_tail = (wqe_index+1)&(nesqp->hwqp.sq_size - 1); in nes_poll_cq()
3716 if ((entry->status != IB_WC_SUCCESS) && (nesqp->hwqp.sq_tail != nesqp->hwqp.sq_head)) { in nes_poll_cq()
3718 wq_tail = nesqp->hwqp.sq_tail; in nes_poll_cq()
3723 …wrid = ((u64)(le32_to_cpu(nesqp->hwqp.rq_vbase[wqe_index].wqe_words[NES_IWARP_RQ_WQE_COMP_SCRATCH_… in nes_poll_cq()
3724 …((u64)(le32_to_cpu(nesqp->hwqp.rq_vbase[wqe_index].wqe_words[NES_IWARP_RQ_WQE_COMP_SCRATCH_HIGH_ID… in nes_poll_cq()
3727 nesqp->hwqp.rq_tail = (wqe_index+1)&(nesqp->hwqp.rq_size - 1); in nes_poll_cq()
3728 if ((entry->status != IB_WC_SUCCESS) && (nesqp->hwqp.rq_tail != nesqp->hwqp.rq_head)) { in nes_poll_cq()
3730 wq_tail = nesqp->hwqp.rq_tail; in nes_poll_cq()