]> err.no Git - linux-2.6/commitdiff
[SCSI] lpfc 8.1.10 : Add support to post events via new FC event interfaces
authorJames Smart <James.Smart@Emulex.Com>
Fri, 18 Aug 2006 21:46:43 +0000 (17:46 -0400)
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>
Sat, 2 Sep 2006 20:35:48 +0000 (15:35 -0500)
Add support to post events via new FC event interfaces

Signed-off-by: James Smart <James.Smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/lpfc/lpfc.h
drivers/scsi/lpfc/lpfc_els.c
drivers/scsi/lpfc/lpfc_hbadisc.c
drivers/scsi/lpfc/lpfc_init.c

index d44f9aac6b8fe3c954710a070d8e136a0bebe82b..4a4048d7ba915683885775536f40115925fd4573 100644 (file)
@@ -391,3 +391,5 @@ struct rnidrsp {
        struct list_head list;
        uint32_t data;
 };
+
+#define FC_REG_DUMP_EVENT      0x10    /* Register for Dump events */
index 3567de61316215a59588a352e8679080bbc2e381..71864cdc6c71a432803a1ed9183489223e362eb7 100644 (file)
@@ -2506,6 +2506,7 @@ lpfc_els_rcv_rscn(struct lpfc_hba * phba,
        uint32_t *lp;
        IOCB_t *icmd;
        uint32_t payload_len, cmd;
+       int i;
 
        icmd = &cmdiocb->iocb;
        pcmd = (struct lpfc_dmabuf *) cmdiocb->context2;
@@ -2524,6 +2525,10 @@ lpfc_els_rcv_rscn(struct lpfc_hba * phba,
                        phba->brd_no,
                        phba->fc_flag, payload_len, *lp, phba->fc_rscn_id_cnt);
 
+       for (i = 0; i < payload_len/sizeof(uint32_t); i++)
+               fc_host_post_event(phba->host, fc_get_event_number(),
+                       FCH_EVT_RSCN, lp[i]);
+
        /* If we are about to begin discovery, just ACC the RSCN.
         * Discovery processing will satisfy it.
         */
index b2f1552f1848a988d75dea9cf2fcbf5b5a24193d..53821e5778b3a908e87aa2c718223b30455a6ab2 100644 (file)
@@ -340,6 +340,9 @@ lpfc_linkdown(struct lpfc_hba * phba)
                spin_unlock_irq(phba->host->host_lock);
        }
 
+       fc_host_post_event(phba->host, fc_get_event_number(),
+                       FCH_EVT_LINKDOWN, 0);
+
        /* Clean up any firmware default rpi's */
        if ((mb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL))) {
                lpfc_unreg_did(phba, 0xffffffff, mb);
@@ -427,6 +430,9 @@ lpfc_linkup(struct lpfc_hba * phba)
        struct list_head *listp, *node_list[7];
        int i;
 
+       fc_host_post_event(phba->host, fc_get_event_number(),
+                       FCH_EVT_LINKUP, 0);
+
        spin_lock_irq(phba->host->host_lock);
        phba->hba_state = LPFC_LINK_UP;
        phba->fc_flag &= ~(FC_PT2PT | FC_PT2PT_PLOGI | FC_ABORT_DISCOVERY |
index f6948ffe689adcea692879d4b5add8bc1c047615..84e7fc595f5e3c9201fc8f3778206f4c25827afe 100644 (file)
@@ -511,6 +511,7 @@ lpfc_handle_eratt(struct lpfc_hba * phba)
 {
        struct lpfc_sli *psli = &phba->sli;
        struct lpfc_sli_ring  *pring;
+       uint32_t event_data;
 
        if (phba->work_hs & HS_FFER6) {
                /* Re-establishing Link */
@@ -555,6 +556,11 @@ lpfc_handle_eratt(struct lpfc_hba * phba)
                                phba->brd_no, phba->work_hs,
                                phba->work_status[0], phba->work_status[1]);
 
+               event_data = FC_REG_DUMP_EVENT;
+               fc_host_post_vendor_event(phba->host, fc_get_event_number(),
+                               sizeof(event_data), (char *) &event_data,
+                               SCSI_NL_VID_TYPE_PCI | PCI_VENDOR_ID_EMULEX);
+
                psli->sli_flag &= ~LPFC_SLI2_ACTIVE;
                lpfc_offline(phba);
                phba->hba_state = LPFC_HBA_ERROR;