diff options
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_sli4.h')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_sli4.h | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/drivers/scsi/lpfc/lpfc_sli4.h b/drivers/scsi/lpfc/lpfc_sli4.h index 86308836600f..4a35e7b9bc5b 100644 --- a/drivers/scsi/lpfc/lpfc_sli4.h +++ b/drivers/scsi/lpfc/lpfc_sli4.h | |||
@@ -153,15 +153,27 @@ struct lpfc_fcf { | |||
153 | #define FCF_REGISTERED 0x02 /* FCF registered with FW */ | 153 | #define FCF_REGISTERED 0x02 /* FCF registered with FW */ |
154 | #define FCF_SCAN_DONE 0x04 /* FCF table scan done */ | 154 | #define FCF_SCAN_DONE 0x04 /* FCF table scan done */ |
155 | #define FCF_IN_USE 0x08 /* Atleast one discovery completed */ | 155 | #define FCF_IN_USE 0x08 /* Atleast one discovery completed */ |
156 | #define FCF_REDISC_PEND 0x10 /* FCF rediscovery pending */ | 156 | #define FCF_INIT_DISC 0x10 /* Initial FCF discovery */ |
157 | #define FCF_REDISC_EVT 0x20 /* FCF rediscovery event to worker thread */ | 157 | #define FCF_DEAD_DISC 0x20 /* FCF DEAD fast FCF failover discovery */ |
158 | #define FCF_REDISC_FOV 0x40 /* Post FCF rediscovery fast failover */ | 158 | #define FCF_ACVL_DISC 0x40 /* All CVL fast FCF failover discovery */ |
159 | #define FCF_DISCOVERY (FCF_INIT_DISC | FCF_DEAD_DISC | FCF_ACVL_DISC) | ||
160 | #define FCF_REDISC_PEND 0x80 /* FCF rediscovery pending */ | ||
161 | #define FCF_REDISC_EVT 0x100 /* FCF rediscovery event to worker thread */ | ||
162 | #define FCF_REDISC_FOV 0x200 /* Post FCF rediscovery fast failover */ | ||
159 | uint32_t addr_mode; | 163 | uint32_t addr_mode; |
164 | uint16_t fcf_rr_init_indx; | ||
160 | struct lpfc_fcf_rec current_rec; | 165 | struct lpfc_fcf_rec current_rec; |
161 | struct lpfc_fcf_rec failover_rec; | 166 | struct lpfc_fcf_rec failover_rec; |
162 | struct timer_list redisc_wait; | 167 | struct timer_list redisc_wait; |
168 | unsigned long *fcf_rr_bmask; /* Eligible FCF indexes for RR failover */ | ||
163 | }; | 169 | }; |
164 | 170 | ||
171 | /* | ||
172 | * Maximum FCF table index, it is for driver internal book keeping, it | ||
173 | * just needs to be no less than the supported HBA's FCF table size. | ||
174 | */ | ||
175 | #define LPFC_SLI4_FCF_TBL_INDX_MAX 32 | ||
176 | |||
165 | #define LPFC_REGION23_SIGNATURE "RG23" | 177 | #define LPFC_REGION23_SIGNATURE "RG23" |
166 | #define LPFC_REGION23_VERSION 1 | 178 | #define LPFC_REGION23_VERSION 1 |
167 | #define LPFC_REGION23_LAST_REC 0xff | 179 | #define LPFC_REGION23_LAST_REC 0xff |
@@ -431,11 +443,18 @@ enum lpfc_sge_type { | |||
431 | SCSI_BUFF_TYPE | 443 | SCSI_BUFF_TYPE |
432 | }; | 444 | }; |
433 | 445 | ||
446 | enum lpfc_sgl_state { | ||
447 | SGL_FREED, | ||
448 | SGL_ALLOCATED, | ||
449 | SGL_XRI_ABORTED | ||
450 | }; | ||
451 | |||
434 | struct lpfc_sglq { | 452 | struct lpfc_sglq { |
435 | /* lpfc_sglqs are used in double linked lists */ | 453 | /* lpfc_sglqs are used in double linked lists */ |
436 | struct list_head list; | 454 | struct list_head list; |
437 | struct list_head clist; | 455 | struct list_head clist; |
438 | enum lpfc_sge_type buff_type; /* is this a scsi sgl */ | 456 | enum lpfc_sge_type buff_type; /* is this a scsi sgl */ |
457 | enum lpfc_sgl_state state; | ||
439 | uint16_t iotag; /* pre-assigned IO tag */ | 458 | uint16_t iotag; /* pre-assigned IO tag */ |
440 | uint16_t sli4_xritag; /* pre-assigned XRI, (OXID) tag. */ | 459 | uint16_t sli4_xritag; /* pre-assigned XRI, (OXID) tag. */ |
441 | struct sli4_sge *sgl; /* pre-assigned SGL */ | 460 | struct sli4_sge *sgl; /* pre-assigned SGL */ |
@@ -463,8 +482,8 @@ void lpfc_sli4_mbox_cmd_free(struct lpfc_hba *, struct lpfcMboxq *); | |||
463 | void lpfc_sli4_mbx_sge_set(struct lpfcMboxq *, uint32_t, dma_addr_t, uint32_t); | 482 | void lpfc_sli4_mbx_sge_set(struct lpfcMboxq *, uint32_t, dma_addr_t, uint32_t); |
464 | void lpfc_sli4_mbx_sge_get(struct lpfcMboxq *, uint32_t, | 483 | void lpfc_sli4_mbx_sge_get(struct lpfcMboxq *, uint32_t, |
465 | struct lpfc_mbx_sge *); | 484 | struct lpfc_mbx_sge *); |
466 | int lpfc_sli4_mbx_read_fcf_record(struct lpfc_hba *, struct lpfcMboxq *, | 485 | int lpfc_sli4_mbx_read_fcf_rec(struct lpfc_hba *, struct lpfcMboxq *, |
467 | uint16_t); | 486 | uint16_t); |
468 | 487 | ||
469 | void lpfc_sli4_hba_reset(struct lpfc_hba *); | 488 | void lpfc_sli4_hba_reset(struct lpfc_hba *); |
470 | struct lpfc_queue *lpfc_sli4_queue_alloc(struct lpfc_hba *, uint32_t, | 489 | struct lpfc_queue *lpfc_sli4_queue_alloc(struct lpfc_hba *, uint32_t, |
@@ -523,8 +542,13 @@ int lpfc_sli4_init_vpi(struct lpfc_hba *, uint16_t); | |||
523 | uint32_t lpfc_sli4_cq_release(struct lpfc_queue *, bool); | 542 | uint32_t lpfc_sli4_cq_release(struct lpfc_queue *, bool); |
524 | uint32_t lpfc_sli4_eq_release(struct lpfc_queue *, bool); | 543 | uint32_t lpfc_sli4_eq_release(struct lpfc_queue *, bool); |
525 | void lpfc_sli4_fcfi_unreg(struct lpfc_hba *, uint16_t); | 544 | void lpfc_sli4_fcfi_unreg(struct lpfc_hba *, uint16_t); |
526 | int lpfc_sli4_read_fcf_record(struct lpfc_hba *, uint16_t); | 545 | int lpfc_sli4_fcf_scan_read_fcf_rec(struct lpfc_hba *, uint16_t); |
527 | void lpfc_mbx_cmpl_read_fcf_record(struct lpfc_hba *, LPFC_MBOXQ_t *); | 546 | int lpfc_sli4_fcf_rr_read_fcf_rec(struct lpfc_hba *, uint16_t); |
547 | int lpfc_sli4_read_fcf_rec(struct lpfc_hba *, uint16_t); | ||
548 | void lpfc_mbx_cmpl_fcf_scan_read_fcf_rec(struct lpfc_hba *, LPFC_MBOXQ_t *); | ||
549 | void lpfc_mbx_cmpl_fcf_rr_read_fcf_rec(struct lpfc_hba *, LPFC_MBOXQ_t *); | ||
550 | void lpfc_mbx_cmpl_read_fcf_rec(struct lpfc_hba *, LPFC_MBOXQ_t *); | ||
551 | int lpfc_sli4_unregister_fcf(struct lpfc_hba *); | ||
528 | int lpfc_sli4_post_status_check(struct lpfc_hba *); | 552 | int lpfc_sli4_post_status_check(struct lpfc_hba *); |
529 | uint8_t lpfc_sli4_mbox_opcode_get(struct lpfc_hba *, struct lpfcMboxq *); | 553 | uint8_t lpfc_sli4_mbox_opcode_get(struct lpfc_hba *, struct lpfcMboxq *); |
530 | 554 | ||