lpfc 8.3.4: Consistently Implement persistent port disable
Subsystems (2)
PATCH 2/8 lpfc 8.3.4: Consistently Implement persistent port disable
Consistently implement persistent port disable.
Ability was to be managed in the adapter via firmware via flash settings. However, not all firmware images supported it. Uniformly support it everywhere.
Signed-off-by James Smart <[email protected]>
---
drivers/scsi/lpfc/lpfc.h | 1 drivers/scsi/lpfc/lpfc_attr.c | 7 ++ drivers/scsi/lpfc/lpfc_crtn.h | 5 + drivers/scsi/lpfc/lpfc_hw.h | 4 + drivers/scsi/lpfc/lpfc_init.c | 59 +++++++++++---- drivers/scsi/lpfc/lpfc_mbox.c | 36 +++++++-- drivers/scsi/lpfc/lpfc_sli.c | 158 +++++++++++++++++++++++++++++++++++++++++ drivers/scsi/lpfc/lpfc_sli4.h | 4 + 8 files changed, 242 insertions(+), 32 deletions(-)
drivers/scsi/lpfc/lpfc.h +1 -0
@@ -525,6 +525,7 @@ struct lpfc_hba {#define FCP_XRI_ABORT_EVENT 0x20#define ELS_XRI_ABORT_EVENT 0x40#define ASYNC_EVENT 0x80 +#define LINK_DISABLED 0x100/* Link disabled by user */ struct lpfc_dmabuf slim2p;MAILBOX_t *mbox;
drivers/scsi/lpfc/lpfc_attr.c +6 -1
@@ -394,7 +394,12 @@ lpfc_link_state_show(struct device *dev, struct device_attribute *attr,case LPFC_INIT_MBX_CMDS :case LPFC_LINK_DOWN :case LPFC_HBA_ERROR : - len +=snprintf (buf + len,PAGE_SIZE -len,"Link Down\n" ); +if (phba->hba_flag &LINK_DISABLED ) + len +=snprintf (buf + len,PAGE_SIZE -len, +"Link Down - User disabled\n" ); +else + len +=snprintf (buf + len,PAGE_SIZE -len, +"Link Down\n" );break ;case LPFC_LINK_UP :case LPFC_CLEAR_LA :
drivers/scsi/lpfc/lpfc_crtn.h +4 -1
@@ -21,7 +21,9 @@typedef int (*node_filter )(struct lpfc_nodelist *,void *);struct fc_rport ; -void lpfc_dump_mem (struct lpfc_hba *,LPFC_MBOXQ_t *,uint16_t ); +void lpfc_down_link (struct lpfc_hba *,LPFC_MBOXQ_t *); +void lpfc_sli_read_link_ste (struct lpfc_hba *); +void lpfc_dump_mem (struct lpfc_hba *,LPFC_MBOXQ_t *,uint16_t ,uint16_t );void lpfc_dump_wakeup_param (struct lpfc_hba *,LPFC_MBOXQ_t *);void lpfc_dump_static_vport (struct lpfc_hba *,LPFC_MBOXQ_t *,uint16_t );int lpfc_dump_fcoe_param (struct lpfc_hba *,struct lpfcMboxq *);
@@ -234,6 +236,7 @@ void lpfc_sli_def_mbox_cmpl(struct lpfc_hba *, LPFC_MBOXQ_t *);int lpfc_sli_issue_iocb (struct lpfc_hba *,uint32_t ,struct lpfc_iocbq *,uint32_t );void lpfc_sli_pcimem_bcopy (void *,void *,uint32_t ); +void lpfc_sli_bemem_bcopy (void *,void *,uint32_t );void lpfc_sli_abort_iocb_ring (struct lpfc_hba *,struct lpfc_sli_ring *);void lpfc_sli_flush_fcp_rings (struct lpfc_hba *); int lpfc_sli_ringpostbuf_put(struct lpfc_hba *, struct lpfc_sli_ring *,
drivers/scsi/lpfc/lpfc_hw.h +2 -2
@@ -2496,8 +2496,8 @@ typedef struct {#define DMP_VPORT_REGION_SIZE 0x200#define DMP_MBOX_OFFSET_WORD 0x5 -#define DMP_REGION_FCOEPARAM 0x17/* fcoe param region */ -#define DMP_FCOEPARAM_RGN_SIZE 0x400 +#define DMP_REGION_23 0x17/* fcoe param and port state region */ +#define DMP_RGN23_SIZE 0x400#define WAKE_UP_PARMS_REGION_ID 4#define WAKE_UP_PARMS_WORD_SIZE 15
drivers/scsi/lpfc/lpfc_init.c +42 -17
82 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_mbox.c +26 -10
@@ -79,21 +79,37 @@ lpfc_dump_static_vport(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb, }/** -* lpfc_dump_mem - Prepare a mailbox command for retrieving HBA's VPD memory +* lpfc_down_link - Bring down HBAs link. * @phba: pointer to lpfc hba data structure. * @pmb: pointer to the driver internal queue element for mailbox command. -* @offset: offset for dumping VPD memory mailbox command. +* +* This routine prepares a mailbox command to bring down HBA link. +**/ +void +lpfc_down_link (struct lpfc_hba *phba,LPFC_MBOXQ_t *pmb) +{ +MAILBOX_t *mb; +memset (pmb,0 ,sizeof (LPFC_MBOXQ_t)); + mb = &pmb->u.mb; + mb->mbxCommand =MBX_DOWN_LINK ; + mb->mbxOwner =OWN_HOST ; +} + +/** +* lpfc_dump_mem - Prepare a mailbox command for reading a region. +* @phba: pointer to lpfc hba data structure. +* @pmb: pointer to the driver internal queue element for mailbox command. +* @offset: offset into the region. +* @region_id: config region id. * * The dump mailbox command provides a method for the device driver to obtain * various types of information from the HBA device. * -* This routine prepares the mailbox command for dumping HBA Vital Product -* Data (VPD) memory. This mailbox command is to be used for retrieving a -* portion (DMP_RSP_SIZE bytes) of a HBA's VPD from the HBA at an address -* offset specified by the offset parameter. +* This routine prepares the mailbox command for dumping HBA's config region. **/ void -lpfc_dump_mem (struct lpfc_hba * phba,LPFC_MBOXQ_t * pmb,uint16_t offset) +lpfc_dump_mem (struct lpfc_hba *phba,LPFC_MBOXQ_t *pmb,uint16_t offset, +uint16_t region_id) {MAILBOX_t *mb;void *ctx;
@@ -107,7 +123,7 @@ lpfc_dump_mem(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb, uint16_t offset) mb->un.varDmp.cv =1 ; mb->un.varDmp.type =DMP_NV_PARAMS ; mb->un.varDmp.entry_index = offset; - mb->un.varDmp.region_id =DMP_REGION_VPD ; + mb->un.varDmp.region_id = region_id; mb->un.varDmp.word_cnt = (DMP_RSP_SIZE /sizeof (uint32_t )); mb->un.varDmp.co =0 ; mb->un.varDmp.resp_offset =0 ;
@@ -1864,8 +1880,8 @@ lpfc_dump_fcoe_param(struct lpfc_hba *phba, mb->mbxCommand =MBX_DUMP_MEMORY ; mb->un.varDmp.type =DMP_NV_PARAMS ; - mb->un.varDmp.region_id =DMP_REGION_FCOEPARAM ; - mb->un.varDmp.sli4_length =DMP_FCOEPARAM_RGN_SIZE ; + mb->un.varDmp.region_id =DMP_REGION_23 ; + mb->un.varDmp.sli4_length =DMP_RGN23_SIZE ; mb->un.varWords[3 ] =putPaddrLow (mp->phys); mb->un.varWords[4 ] =putPaddrHigh (mp->phys);return 0 ;
drivers/scsi/lpfc/lpfc_sli.c +157 -1
173 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_sli4.h +4 -0
@@ -151,6 +151,10 @@ struct lpfc_fcf {#define LPFC_REGION23_SIGNATURE "RG23"#define LPFC_REGION23_VERSION 1#define LPFC_REGION23_LAST_REC 0xff +#define DRIVER_SPECIFIC_TYPE 0xA2 +#define LINUX_DRIVER_ID 0x20 +#define PORT_STE_TYPE 0x1 +struct lpfc_fip_param_hdr {uint8_t type;#define FCOE_PARAM_TYPE 0xA0