#include "t4fw_api.h"
 #include "t4fw_version.h"
 #include "cxgb4_dcb.h"
+#include "srq.h"
 #include "cxgb4_debugfs.h"
 #include "clip_tbl.h"
 #include "l2t.h"
                const struct cpl_abort_rpl_rss *p = (void *)rsp;
 
                hash_del_filter_rpl(q->adap, p);
+       } else if (opcode == CPL_SRQ_TABLE_RPL) {
+               const struct cpl_srq_table_rpl *p = (void *)rsp;
+
+               do_srq_table_rpl(q->adap, p);
        } else
                dev_err(q->adap->pdev_dev,
                        "unexpected CPL %#x on FW event queue\n", opcode);
                adap->vres.pbl.start = val[4];
                adap->vres.pbl.size = val[5] - val[4] + 1;
 
+               params[0] = FW_PARAM_PFVF(SRQ_START);
+               params[1] = FW_PARAM_PFVF(SRQ_END);
+               ret = t4_query_params(adap, adap->mbox, adap->pf, 0, 2,
+                                     params, val);
+               if (!ret) {
+                       adap->vres.srq.start = val[0];
+                       adap->vres.srq.size = val[1] - val[0] + 1;
+               }
+               if (adap->vres.srq.size) {
+                       adap->srq = t4_init_srq(adap->vres.srq.size);
+                       if (!adap->srq)
+                               dev_warn(&adap->pdev->dev, "could not allocate SRQ, continuing\n");
+               }
+
                params[0] = FW_PARAM_PFVF(SQRQ_START);
                params[1] = FW_PARAM_PFVF(SQRQ_END);
                params[2] = FW_PARAM_PFVF(CQ_START);
 
        kvfree(adapter->smt);
        kvfree(adapter->l2t);
+       kvfree(adapter->srq);
        t4_cleanup_sched(adapter);
        kvfree(adapter->tids.tid_tab);
        cxgb4_cleanup_tc_flower(adapter);