return -ENOMEM;
        cmd->num_pbl_pdid =
            pdid | (hwmr->num_pbls << OCRDMA_REG_NSMR_NUM_PBL_SHIFT);
+       cmd->fr_mr = hwmr->fr_mr;
 
        cmd->flags_hpage_pbe_sz |= (hwmr->remote_wr <<
                                    OCRDMA_REG_NSMR_REMOTE_WR_SHIFT);
            (ah_attr->grh.traffic_class << OCRDMA_QP_PARAMS_TCLASS_SHIFT);
        cmd->params.rnt_rc_sl_fl |=
            (ah_attr->grh.flow_label & OCRDMA_QP_PARAMS_FLOW_LABEL_MASK);
+       cmd->params.rnt_rc_sl_fl |= (ah_attr->sl << OCRDMA_QP_PARAMS_SL_SHIFT);
        cmd->params.hop_lmt_rq_psn |=
            (ah_attr->grh.hop_limit << OCRDMA_QP_PARAMS_HOP_LMT_SHIFT);
        cmd->flags |= OCRDMA_QP_PARA_FLOW_LBL_VALID;
 
 # 2: 16K Bytes
 # 3: 32K Bytes
 # 4: 64K Bytes
+# 5: 128K Bytes
+# 6: 256K Bytes
+# 7: 512K Bytes
 */
-#define OCRDMA_MAX_Q_PAGE_SIZE_CNT (5)
+#define OCRDMA_MAX_Q_PAGE_SIZE_CNT (8)
 #define OCRDMA_Q_PAGE_BASE_SIZE (OCRDMA_MIN_Q_PAGE_SIZE * OCRDMA_MAX_Q_PAGES)
 
 #define MAX_OCRDMA_QP_PAGES      (8)
        struct ocrdma_mqe_hdr hdr;
        struct ocrdma_mbx_hdr cmd;
 
-       u32 lrkey_key_index;
+       u32 fr_mr;
        u32 num_pbl_pdid;
        u32 flags_hpage_pbe_sz;
        u32 totlen_low;
        u32 rsvd;
 };
 
-#define OCRDMA_MAX_FR_PBES 11
-struct ocrdma_fr_pbe {
-       u32 pa_hi;
-       u32 pa_lo;
-};
-
 /* extended wqe followed by hdr_wqe for Fast Memory register */
 struct ocrdma_ewqe_fr {
        u32 va_hi;
        u32 fbo_lo;
        u32 size_sge;
        u32 num_sges;
-       struct ocrdma_fr_pbe pbe[0];
+       u32 rsvd;
+       u32 rsvd2;
 };
 
 struct ocrdma_eth_basic {
 
                                        IB_DEVICE_RC_RNR_NAK_GEN |
                                        IB_DEVICE_SHUTDOWN_PORT |
                                        IB_DEVICE_SYS_IMAGE_GUID |
-                                       IB_DEVICE_LOCAL_DMA_LKEY;
+                                       IB_DEVICE_LOCAL_DMA_LKEY |
+                                       IB_DEVICE_MEM_MGT_EXTENSIONS;
        attr->max_sge = min(dev->attr.max_send_sge, dev->attr.max_srq_sge);
        attr->max_sge_rd = dev->attr.max_rdma_sge;
        attr->max_cq = dev->attr.max_cq;
        qp->sq.max_sges = attrs->cap.max_send_sge;
        qp->rq.max_sges = attrs->cap.max_recv_sge;
        qp->state = OCRDMA_QPS_RST;
+       qp->signaled = (attrs->sq_sig_type == IB_SIGNAL_ALL_WR) ? true : false;
 }
 
 
                }
                hdr = ocrdma_hwq_head(&qp->sq);
                hdr->cw = 0;
-               if (wr->send_flags & IB_SEND_SIGNALED)
+               if (wr->send_flags & IB_SEND_SIGNALED || qp->signaled)
                        hdr->cw |= (OCRDMA_FLAG_SIG << OCRDMA_WQE_FLAGS_SHIFT);
                if (wr->send_flags & IB_SEND_FENCE)
                        hdr->cw |=
                        *bad_wr = wr;
                        break;
                }
-               if (wr->send_flags & IB_SEND_SIGNALED)
+               if (wr->send_flags & IB_SEND_SIGNALED || qp->signaled)
                        qp->wqe_wr_id_tbl[qp->sq.head].signaled = 1;
                else
                        qp->wqe_wr_id_tbl[qp->sq.head].signaled = 0;