uint32_t cfg_enable_da_id;
        uint32_t cfg_max_scsicmpl_time;
        uint32_t cfg_tgt_queue_depth;
+       uint32_t cfg_first_burst_size;
 
        uint32_t dev_loss_tmo_changed;
 
 
 LPFC_VPORT_ATTR_RW(use_adisc, 0, 0, 1,
                   "Use ADISC on rediscovery to authenticate FCP devices");
 
+/*
+# lpfc_first_burst_size: First burst size to use on the NPorts
+# that support first burst.
+# Value range is [0,65536]. Default value is 0.
+*/
+LPFC_VPORT_ATTR_RW(first_burst_size, 0, 0, 65536,
+                  "First burst size for Targets that support first burst");
+
 /*
 # lpfc_max_scsicmpl_time: Use scsi command completion time to control I/O queue
 # depth. Default value is 0. When the value of this parameter is zero the
        &dev_attr_lpfc_devloss_tmo,
        &dev_attr_lpfc_fcp_class,
        &dev_attr_lpfc_use_adisc,
+       &dev_attr_lpfc_first_burst_size,
        &dev_attr_lpfc_ack0,
        &dev_attr_lpfc_topology,
        &dev_attr_lpfc_scan_down,
        &dev_attr_lpfc_restrict_login,
        &dev_attr_lpfc_fcp_class,
        &dev_attr_lpfc_use_adisc,
+       &dev_attr_lpfc_first_burst_size,
        &dev_attr_lpfc_fdmi_on,
        &dev_attr_lpfc_max_luns,
        &dev_attr_nport_evt_cnt,
        lpfc_restrict_login_init(vport, lpfc_restrict_login);
        lpfc_fcp_class_init(vport, lpfc_fcp_class);
        lpfc_use_adisc_init(vport, lpfc_use_adisc);
+       lpfc_first_burst_size_init(vport, lpfc_first_burst_size);
        lpfc_max_scsicmpl_time_init(vport, lpfc_max_scsicmpl_time);
        lpfc_fdmi_on_init(vport, lpfc_fdmi_on);
        lpfc_discovery_threads_init(vport, lpfc_discovery_threads);
 
 #define NLP_NODEV_REMOVE   0x08000000  /* Defer removal till discovery ends */
 #define NLP_TARGET_REMOVE  0x10000000   /* Target remove in process */
 #define NLP_SC_REQ         0x20000000  /* Target requires authentication */
+#define NLP_FIRSTBURST     0x40000000  /* Target supports FirstBurst */
 #define NLP_RPI_REGISTERED 0x80000000  /* nlp_rpi is valid */
 
 /* ndlp usage management macros */
 
        }
        npr->estabImagePair = 1;
        npr->readXferRdyDis = 1;
+        if (vport->cfg_first_burst_size)
+               npr->writeXferRdyDis = 1;
 
        /* For FCP support */
        npr->prliType = PRLI_FCP_TYPE;
 
 
        ndlp->nlp_type &= ~(NLP_FCP_TARGET | NLP_FCP_INITIATOR);
        ndlp->nlp_fcp_info &= ~NLP_FCP_2_DEVICE;
+       ndlp->nlp_flag &= ~NLP_FIRSTBURST;
        if (npr->prliType == PRLI_FCP_TYPE) {
                if (npr->initiatorFunc)
                        ndlp->nlp_type |= NLP_FCP_INITIATOR;
-               if (npr->targetFunc)
+               if (npr->targetFunc) {
                        ndlp->nlp_type |= NLP_FCP_TARGET;
+                       if (npr->writeXferRdyDis)
+                               ndlp->nlp_flag |= NLP_FIRSTBURST;
+               }
                if (npr->Retry)
                        ndlp->nlp_fcp_info |= NLP_FCP_2_DEVICE;
        }
        /* Check out PRLI rsp */
        ndlp->nlp_type &= ~(NLP_FCP_TARGET | NLP_FCP_INITIATOR);
        ndlp->nlp_fcp_info &= ~NLP_FCP_2_DEVICE;
+       ndlp->nlp_flag &= ~NLP_FIRSTBURST;
        if ((npr->acceptRspCode == PRLI_REQ_EXECUTED) &&
            (npr->prliType == PRLI_FCP_TYPE)) {
                if (npr->initiatorFunc)
                        ndlp->nlp_type |= NLP_FCP_INITIATOR;
-               if (npr->targetFunc)
+               if (npr->targetFunc) {
                        ndlp->nlp_type |= NLP_FCP_TARGET;
+                       if (npr->writeXferRdyDis)
+                               ndlp->nlp_flag |= NLP_FIRSTBURST;
+               }
                if (npr->Retry)
                        ndlp->nlp_fcp_info |= NLP_FCP_2_DEVICE;
        }
 
                if (datadir == DMA_TO_DEVICE) {
                        iocb_cmd->ulpCommand = CMD_FCP_IWRITE64_CR;
                        iocb_cmd->ulpPU = PARM_READ_CHECK;
+                       if (vport->cfg_first_burst_size &&
+                           (pnode->nlp_flag & NLP_FIRSTBURST)) {
+                               piocbq->iocb.un.fcpi.fcpi_XRdy =
+                                       vport->cfg_first_burst_size;
+                       }
                        fcp_cmnd->fcpCntl3 = WRITE_DATA;
                        phba->fc4OutputRequests++;
                } else {