lpfc 8.1.2 : Add ERROR and WARM_START modes for diagnostic purposes.
Subsystems (2)
PATCH 13/22 lpfc 8.1.2 : Add ERROR and WARM_START modes for diagnostic purposes.
Add ERROR and WARM_START modes for diagnostic purposes.
Signed-off-by James Smart <[email protected]>
Add ERROR and WARM_START modes for diagnostic purposes.
Signed-off-by James Smart <[email protected]>
drivers/scsi/lpfc/lpfc_hbadisc.c +29 -3
@@ -1,7 +1,7 @@/******************************************************************* * This file is part of the Emulex Linux Device Driver for * * Fibre Channel Host Bus Adapters. * -* Copyright (C) 2004-2005 Emulex. All rights reserved. * +* Copyright (C) 2004-2006 Emulex. All rights reserved. * * EMULEX and SLI are trademarks of Emulex. * * www.emulex.com * * Portions Copyright (C) 2004-2005 Christoph Hellwig *
@@ -120,11 +120,33 @@ lpfc_work_list_done(struct lpfc_hba * ph free_evt =0 ;break ;case LPFC_EVT_ONLINE : - *(int *)(evtp->evt_arg1) =lpfc_online (phba); +if (phba->hba_state <LPFC_LINK_DOWN ) + *(int *)(evtp->evt_arg1) =lpfc_online (phba); +else + *(int *)(evtp->evt_arg1) =0 ;complete ((struct completion *)(evtp->evt_arg2));break ;case LPFC_EVT_OFFLINE : - *(int *)(evtp->evt_arg1) =lpfc_offline (phba); +if (phba->hba_state >=LPFC_LINK_DOWN ) +lpfc_offline (phba); +lpfc_sli_brdrestart (phba); + *(int *)(evtp->evt_arg1) = +lpfc_sli_brdready (phba,HS_FFRDY |HS_MBRDY ); +complete ((struct completion *)(evtp->evt_arg2)); +break ; +case LPFC_EVT_WARM_START : +if (phba->hba_state >=LPFC_LINK_DOWN ) +lpfc_offline (phba); +lpfc_sli_brdreset (phba); +lpfc_hba_down_post (phba); + *(int *)(evtp->evt_arg1) = +lpfc_sli_brdready (phba,HS_MBRDY ); +complete ((struct completion *)(evtp->evt_arg2)); +break ; +case LPFC_EVT_KILL : +if (phba->hba_state >=LPFC_LINK_DOWN ) +lpfc_offline (phba); + *(int *)(evtp->evt_arg1) =lpfc_sli_brdkill (phba);complete ((struct completion *)(evtp->evt_arg2));break ; }
@@ -287,6 +309,10 @@ lpfc_linkdown(struct lpfc_hba * phba)LPFC_MBOXQ_t *mb;int rc, i; +if (phba->hba_state ==LPFC_LINK_DOWN ) { +return 0 ; + } + psli = &phba->sli;/* sysfs or selective reset may call this routine to clean up */
drivers/scsi/lpfc/lpfc_init.c +41 -16
98 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_mbox.c +12 -1
@@ -1,7 +1,7 @@/******************************************************************* * This file is part of the Emulex Linux Device Driver for * * Fibre Channel Host Bus Adapters. * -* Copyright (C) 2004-2005 Emulex. All rights reserved. * +* Copyright (C) 2004-2006 Emulex. All rights reserved. * * EMULEX and SLI are trademarks of Emulex. * * www.emulex.com * * Portions Copyright (C) 2004-2005 Christoph Hellwig *
@@ -637,6 +637,17 @@ lpfc_config_port(struct lpfc_hba * phba, }void +lpfc_kill_board (struct lpfc_hba * phba,LPFC_MBOXQ_t * pmb) +{ +MAILBOX_t *mb = &pmb->mb; + +memset (pmb,0 ,sizeof (LPFC_MBOXQ_t)); + mb->mbxCommand =MBX_KILL_BOARD ; + mb->mbxOwner =OWN_HOST ; +return ; +} + +void lpfc_mbox_put (struct lpfc_hba * phba,LPFC_MBOXQ_t * mbq) {struct lpfc_sli *psli;
drivers/scsi/lpfc/lpfc_attr.c +63 -1
108 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_crtn.h +8 -1
@@ -1,7 +1,7 @@/******************************************************************* * This file is part of the Emulex Linux Device Driver for * * Fibre Channel Host Bus Adapters. * -* Copyright (C) 2004-2005 Emulex. All rights reserved. * +* Copyright (C) 2004-2006 Emulex. All rights reserved. * * EMULEX and SLI are trademarks of Emulex. * * www.emulex.com * * *
@@ -107,6 +107,7 @@ void lpfc_fdmi_tmo_handler(struct lpfc_hint lpfc_config_port_prep (struct lpfc_hba *);int lpfc_config_port_post (struct lpfc_hba *);int lpfc_hba_down_prep (struct lpfc_hba *); +int lpfc_hba_down_post (struct lpfc_hba *);void lpfc_hba_init (struct lpfc_hba *,uint32_t *);int lpfc_post_buffer (struct lpfc_hba *,struct lpfc_sli_ring *,int ,int );void lpfc_decode_firmware_rev (struct lpfc_hba *,char *,int );
@@ -123,6 +124,7 @@ irqreturn_t lpfc_intr_handler(int, voidvoid lpfc_read_rev (struct lpfc_hba *,LPFC_MBOXQ_t *);void lpfc_config_ring (struct lpfc_hba *,int ,LPFC_MBOXQ_t *);void lpfc_config_port (struct lpfc_hba *,LPFC_MBOXQ_t *); +void lpfc_kill_board (struct lpfc_hba *,LPFC_MBOXQ_t *);void lpfc_mbox_put (struct lpfc_hba *,LPFC_MBOXQ_t *);LPFC_MBOXQ_t *lpfc_mbox_get (struct lpfc_hba *);
@@ -135,6 +137,11 @@ void lpfc_sli_poll_fcp_ring(struct lpfc_struct lpfc_iocbq *lpfc_sli_get_iocbq (struct lpfc_hba *);void lpfc_sli_release_iocbq (struct lpfc_hba * phba,struct lpfc_iocbq * iocb);uint16_t lpfc_sli_next_iotag (struct lpfc_hba * phba,struct lpfc_iocbq * iocb); + +int lpfc_sli_brdready (struct lpfc_hba *,uint32_t ); +int lpfc_sli_brdkill (struct lpfc_hba *); +int lpfc_sli_brdreset (struct lpfc_hba *); +int lpfc_sli_brdrestart (struct lpfc_hba *);int lpfc_sli_hba_setup (struct lpfc_hba *);int lpfc_sli_hba_down (struct lpfc_hba *);int lpfc_sli_issue_mbox (struct lpfc_hba *,LPFC_MBOXQ_t *,uint32_t );
drivers/scsi/lpfc/lpfc_hw.h +3 -1
@@ -1,7 +1,7 @@/******************************************************************* * This file is part of the Emulex Linux Device Driver for * * Fibre Channel Host Bus Adapters. * -* Copyright (C) 2004-2005 Emulex. All rights reserved. * +* Copyright (C) 2004-2006 Emulex. All rights reserved. * * EMULEX and SLI are trademarks of Emulex. * * www.emulex.com * * *
@@ -1233,7 +1233,9 @@ typedef struct { /* FireFly BIU registe#define MBX_SET_MASK 0x20#define MBX_SET_SLIM 0x21#define MBX_UNREG_D_ID 0x23 +#define MBX_KILL_BOARD 0x24#define MBX_CONFIG_FARP 0x25 +#define MBX_BEACON 0x2A#define MBX_LOAD_AREA 0x81#define MBX_RUN_BIU_DIAG64 0x84
drivers/scsi/lpfc/lpfc.h +17 -15
@@ -1,7 +1,7 @@/******************************************************************* * This file is part of the Emulex Linux Device Driver for * * Fibre Channel Host Bus Adapters. * -* Copyright (C) 2004-2005 Emulex. All rights reserved. * +* Copyright (C) 2004-2006 Emulex. All rights reserved. * * EMULEX and SLI are trademarks of Emulex. * * www.emulex.com * * Portions Copyright (C) 2004-2005 Christoph Hellwig *
@@ -175,25 +175,27 @@ struct lpfc_hba {uint16_t pci_cfg_value;struct semaphore hba_can_block; -uint32_t hba_state; +int32_t hba_state; -#define LPFC_INIT_START 1/* Initial state after board reset */ -#define LPFC_INIT_MBX_CMDS 2/* Initialize HBA with mbox commands */ -#define LPFC_LINK_DOWN 3/* HBA initialized, link is down */ -#define LPFC_LINK_UP 4/* Link is up - issue READ_LA */ -#define LPFC_LOCAL_CFG_LINK 5/* local NPORT Id configured */ -#define LPFC_FLOGI 6/* FLOGI sent to Fabric */ -#define LPFC_FABRIC_CFG_LINK 7/* Fabric assigned NPORT Id +#define LPFC_STATE_UNKNOWN 0/* HBA state is unknown */ +#define LPFC_WARM_START 1/* HBA state after selective reset */ +#define LPFC_INIT_START 2/* Initial state after board reset */ +#define LPFC_INIT_MBX_CMDS 3/* Initialize HBA with mbox commands */ +#define LPFC_LINK_DOWN 4/* HBA initialized, link is down */ +#define LPFC_LINK_UP 5/* Link is up - issue READ_LA */ +#define LPFC_LOCAL_CFG_LINK 6/* local NPORT Id configured */ +#define LPFC_FLOGI 7/* FLOGI sent to Fabric */ +#define LPFC_FABRIC_CFG_LINK 8/* Fabric assigned NPORT Id configured */ -#define LPFC_NS_REG 8/* Register with NameServer */ -#define LPFC_NS_QRY 9/* Query NameServer for NPort ID list */ -#define LPFC_BUILD_DISC_LIST 10/* Build ADISC and PLOGI lists for +#define LPFC_NS_REG 9/* Register with NameServer */ +#define LPFC_NS_QRY 10/* Query NameServer for NPort ID list */ +#define LPFC_BUILD_DISC_LIST 11/* Build ADISC and PLOGI lists for * device authentication / discovery */ -#define LPFC_DISC_AUTH 11/* Processing ADISC list */ -#define LPFC_CLEAR_LA 12/* authentication cmplt - issue +#define LPFC_DISC_AUTH 12/* Processing ADISC list */ +#define LPFC_CLEAR_LA 13/* authentication cmplt - issue CLEAR_LA */ #define LPFC_HBA_READY 32 -#define LPFC_HBA_ERROR 0xff +#define LPFC_HBA_ERROR -1uint8_t fc_linkspeed;/* Link speed after last READ_LA */
drivers/scsi/lpfc/lpfc_disc.h +12 -6
@@ -1,7 +1,7 @@/******************************************************************* * This file is part of the Emulex Linux Device Driver for * * Fibre Channel Host Bus Adapters. * -* Copyright (C) 2004-2005 Emulex. All rights reserved. * +* Copyright (C) 2004-2006 Emulex. All rights reserved. * * EMULEX and SLI are trademarks of Emulex. * * www.emulex.com * * *
@@ -28,18 +28,24 @@* This is used by Fibre Channel protocol to support FCP. */ +/* worker thread events */ +enum lpfc_work_type { +LPFC_EVT_NODEV_TMO , +LPFC_EVT_ONLINE , +LPFC_EVT_OFFLINE , +LPFC_EVT_WARM_START , +LPFC_EVT_KILL , +LPFC_EVT_ELS_RETRY , +}; +/* structure used to queue event to the discovery tasklet */ struct lpfc_work_evt {struct list_head evt_listp;void * evt_arg1;void * evt_arg2; -uint32_t evt; +enum lpfc_work_type evt; }; -#define LPFC_EVT_NODEV_TMO 0x1 -#define LPFC_EVT_ONLINE 0x2 -#define LPFC_EVT_OFFLINE 0x3 -#define LPFC_EVT_ELS_RETRY 0x4struct lpfc_nodelist {struct list_head nlp_listp;
drivers/scsi/lpfc/lpfc_sli.c +204 -107
414 lines not on this page · raw message