be16_to_cpu(ct_rsp->rsp.gpsc.speed));
        }
        memset(&ea, 0, sizeof(ea));
-       ea.event = FCME_GPSC_DONE;
        ea.rc = res;
        ea.fcport = fcport;
        ea.sp = sp;
-       qla2x00_fcport_event_handler(vha, &ea);
+       qla24xx_handle_gpsc_event(vha, &ea);
 
 done:
        sp->free(sp);
        ea.sp = sp;
        ea.id = be_to_port_id(ct_req->req.port_id.port_id);
        ea.rc = res;
-       ea.event = FCME_GPNID_DONE;
 
        spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
        list_del(&sp->elem);
                return;
        }
 
-       qla2x00_fcport_event_handler(vha, &ea);
+       qla24xx_handle_gpnid_event(vha, &ea);
 
        e = qla2x00_alloc_work(vha, QLA_EVT_UNMAP);
        if (!e) {
        ea.sp = sp;
        ea.fcport = sp->fcport;
        ea.rc = res;
-       ea.event = FCME_GFFID_DONE;
 
-       qla2x00_fcport_event_handler(vha, &ea);
+       qla24xx_handle_gffid_event(vha, &ea);
        sp->free(sp);
 }
 
        ea.fcport = fcport;
        ea.sp = sp;
        ea.rc = res;
-       ea.event = FCME_GNNID_DONE;
 
        ql_dbg(ql_dbg_disc, vha, 0x204f,
            "Async done-%s res %x, WWPN %8phC %8phC\n",
            sp->name, res, fcport->port_name, fcport->node_name);
 
-       qla2x00_fcport_event_handler(vha, &ea);
+       qla24xx_handle_gnnid_event(vha, &ea);
 
        sp->free(sp);
 }
        ea.fcport = fcport;
        ea.sp = sp;
        ea.rc = res;
-       ea.event = FCME_GFPNID_DONE;
 
        ql_dbg(ql_dbg_disc, vha, 0x204f,
            "Async done-%s res %x, WWPN %8phC %8phC\n",
            sp->name, res, fcport->port_name, fcport->fabric_port_name);
 
-       qla2x00_fcport_event_handler(vha, &ea);
+       qla24xx_handle_gfpnid_event(vha, &ea);
 
        sp->free(sp);
 }
 
 static int qla84xx_init_chip(scsi_qla_host_t *);
 static int qla25xx_init_queues(struct qla_hw_data *);
 static int qla24xx_post_prli_work(struct scsi_qla_host*, fc_port_t *);
-static void qla24xx_handle_plogi_done_event(struct scsi_qla_host *,
-    struct event_arg *);
+static void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha,
+                                     struct event_arg *ea);
 static void qla24xx_handle_prli_done_event(struct scsi_qla_host *,
     struct event_arg *);
 static void __qla24xx_handle_gpdb_event(scsi_qla_host_t *, struct event_arg *);
 
        if (!test_bit(UNLOADING, &vha->dpc_flags)) {
                memset(&ea, 0, sizeof(ea));
-               ea.event = FCME_PLOGI_DONE;
                ea.fcport = sp->fcport;
                ea.data[0] = lio->u.logio.data[0];
                ea.data[1] = lio->u.logio.data[1];
                ea.iop[0] = lio->u.logio.iop[0];
                ea.iop[1] = lio->u.logio.iop[1];
                ea.sp = sp;
-               qla2x00_fcport_event_handler(vha, &ea);
+               qla24xx_handle_plogi_done_event(vha, &ea);
        }
 
        sp->free(sp);
        sp->fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE);
 
        memset(&ea, 0, sizeof(ea));
-       ea.event = FCME_ADISC_DONE;
        ea.rc = res;
        ea.data[0] = lio->u.logio.data[0];
        ea.data[1] = lio->u.logio.data[1];
        ea.fcport = sp->fcport;
        ea.sp = sp;
 
-       qla2x00_fcport_event_handler(vha, &ea);
+       qla24xx_handle_adisc_event(vha, &ea);
 
        sp->free(sp);
 }
        memset(&ea, 0, sizeof(ea));
        ea.sp = sp;
        ea.rc = res;
-       ea.event = FCME_GNL_DONE;
 
        if (sp->u.iocb_cmd.u.mbx.in_mb[1] >=
            sizeof(struct get_name_list_extended)) {
                spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
                ea.fcport = fcport;
 
-               qla2x00_fcport_event_handler(vha, &ea);
+               qla24xx_handle_gnl_done_event(vha, &ea);
        }
 
        /* create new fcport if fw has knowledge of new sessions */
 
        fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE);
        memset(&ea, 0, sizeof(ea));
-       ea.event = FCME_GPDB_DONE;
        ea.fcport = fcport;
        ea.sp = sp;
 
-       qla2x00_fcport_event_handler(vha, &ea);
+       qla24xx_handle_gpdb_event(vha, &ea);
 
        dma_pool_free(ha->s_dma_pool, sp->u.iocb_cmd.u.mbx.in,
                sp->u.iocb_cmd.u.mbx.in_dma);
 
        if (!test_bit(UNLOADING, &vha->dpc_flags)) {
                memset(&ea, 0, sizeof(ea));
-               ea.event = FCME_PRLI_DONE;
                ea.fcport = sp->fcport;
                ea.data[0] = lio->u.logio.data[0];
                ea.data[1] = lio->u.logio.data[1];
                ea.iop[1] = lio->u.logio.iop[1];
                ea.sp = sp;
 
-               qla2x00_fcport_event_handler(vha, &ea);
+               qla24xx_handle_prli_done_event(vha, &ea);
        }
 
        sp->free(sp);
        return qla2x00_post_work(vha, e);
 }
 
-static
+void qla2x00_handle_rscn(scsi_qla_host_t *vha, struct event_arg *ea)
+{
+       fc_port_t *fcport;
+       unsigned long flags;
+
+       fcport = qla2x00_find_fcport_by_nportid(vha, &ea->id, 1);
+       if (fcport) {
+               fcport->scan_needed = 1;
+               fcport->rscn_gen++;
+       }
+
+       spin_lock_irqsave(&vha->work_lock, flags);
+       if (vha->scan.scan_flags == 0) {
+               ql_dbg(ql_dbg_disc, vha, 0xffff, "%s: schedule\n", __func__);
+               vha->scan.scan_flags |= SF_QUEUED;
+               schedule_delayed_work(&vha->scan.scan_work, 5);
+       }
+       spin_unlock_irqrestore(&vha->work_lock, flags);
+}
+
 void qla24xx_handle_relogin_event(scsi_qla_host_t *vha,
        struct event_arg *ea)
 {
        fc_port_t *fcport = ea->fcport;
 
+       if (test_bit(UNLOADING, &vha->dpc_flags))
+               return;
+
        ql_dbg(ql_dbg_disc, vha, 0x2102,
            "%s %8phC DS %d LS %d P %d del %d cnfl %p rscn %d|%d login %d|%d fl %x\n",
            __func__, fcport->port_name, fcport->disc_state,
        qla24xx_fcport_handle_login(vha, fcport);
 }
 
-
-static void qla_handle_els_plogi_done(scsi_qla_host_t *vha,
-                                     struct event_arg *ea)
-{
-       ql_dbg(ql_dbg_disc, vha, 0x2118,
-           "%s %d %8phC post PRLI\n",
-           __func__, __LINE__, ea->fcport->port_name);
-       qla24xx_post_prli_work(vha, ea->fcport);
-}
-
-void qla2x00_fcport_event_handler(scsi_qla_host_t *vha, struct event_arg *ea)
-{
-       fc_port_t *fcport;
-
-       switch (ea->event) {
-       case FCME_RELOGIN:
-               if (test_bit(UNLOADING, &vha->dpc_flags))
-                       return;
-
-               qla24xx_handle_relogin_event(vha, ea);
-               break;
-       case FCME_RSCN:
-               if (test_bit(UNLOADING, &vha->dpc_flags))
-                       return;
-               {
-                       unsigned long flags;
-
-                       fcport = qla2x00_find_fcport_by_nportid
-                               (vha, &ea->id, 1);
-                       if (fcport) {
-                               fcport->scan_needed = 1;
-                               fcport->rscn_gen++;
-                       }
-
-                       spin_lock_irqsave(&vha->work_lock, flags);
-                       if (vha->scan.scan_flags == 0) {
-                               ql_dbg(ql_dbg_disc, vha, 0xffff,
-                                   "%s: schedule\n", __func__);
-                               vha->scan.scan_flags |= SF_QUEUED;
-                               schedule_delayed_work(&vha->scan.scan_work, 5);
-                       }
-                       spin_unlock_irqrestore(&vha->work_lock, flags);
-               }
-               break;
-       case FCME_GNL_DONE:
-               qla24xx_handle_gnl_done_event(vha, ea);
-               break;
-       case FCME_GPSC_DONE:
-               qla24xx_handle_gpsc_event(vha, ea);
-               break;
-       case FCME_PLOGI_DONE:   /* Initiator side sent LLIOCB */
-               qla24xx_handle_plogi_done_event(vha, ea);
-               break;
-       case FCME_PRLI_DONE:
-               qla24xx_handle_prli_done_event(vha, ea);
-               break;
-       case FCME_GPDB_DONE:
-               qla24xx_handle_gpdb_event(vha, ea);
-               break;
-       case FCME_GPNID_DONE:
-               qla24xx_handle_gpnid_event(vha, ea);
-               break;
-       case FCME_GFFID_DONE:
-               qla24xx_handle_gffid_event(vha, ea);
-               break;
-       case FCME_ADISC_DONE:
-               qla24xx_handle_adisc_event(vha, ea);
-               break;
-       case FCME_GNNID_DONE:
-               qla24xx_handle_gnnid_event(vha, ea);
-               break;
-       case FCME_GFPNID_DONE:
-               qla24xx_handle_gfpnid_event(vha, ea);
-               break;
-       case FCME_ELS_PLOGI_DONE:
-               qla_handle_els_plogi_done(vha, ea);
-               break;
-       default:
-               BUG_ON(1);
-               break;
-       }
-}
-
 /*
  * RSCN(s) came in for this fcport, but the RSCN(s) was not able
  * to be consumed by the fcport
 
        if (fcport->scan_needed) {
                memset(&ea, 0, sizeof(ea));
-               ea.event = FCME_RSCN;
                ea.id = fcport->d_id;
                ea.id.b.rsvd_1 = RSCN_PORT_ADDR;
-               qla2x00_fcport_event_handler(fcport->vha, &ea);
+               qla2x00_handle_rscn(fcport->vha, &ea);
        }
 }
 
        }
 }
 
-static void
+void
 qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
 {
        port_id_t cid;  /* conflict Nport id */