aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/message/fusion/mptbase.h
diff options
context:
space:
mode:
authorkashyap.desai@lsi.com <kashyap.desai@lsi.com>2011-08-04 07:12:15 -0400
committerJames Bottomley <JBottomley@Parallels.com>2011-08-27 10:35:16 -0400
commite62cca19a9bbfc72c62632d95a7c01cd6476708c (patch)
treead6f84c9423b950772669fc15de938e2be484387 /drivers/message/fusion/mptbase.h
parent3850b14e51d32fc0d4297ceb30f3f7bb2c2b4779 (diff)
[SCSI] mptfusion: Better handling of DEAD IOC PCI-E Link down error condition
Find Non-Operation IOC and remove it from OS: Detecting dead(non-functional) ioc will be done reading doorbell register value from fault reset thread, which has been called from work thread context after each specific interval. If doorbell value is 0xFFFFFFFF, it will be considered as IOC is non-operational and marked as dead ioc. Once Dead IOC has been detected, it will be removed at pci layer using "pci_remove_bus_device" API. Signed-off-by: Kashyap Desai <kashyap.desai@lsi.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/message/fusion/mptbase.h')
-rw-r--r--drivers/message/fusion/mptbase.h66
1 files changed, 38 insertions, 28 deletions
diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h
index fe902338539b..69ddabd51958 100644
--- a/drivers/message/fusion/mptbase.h
+++ b/drivers/message/fusion/mptbase.h
@@ -554,10 +554,47 @@ struct mptfc_rport_info
554 u8 flags; 554 u8 flags;
555}; 555};
556 556
557/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
558
559/*
560 * MPT_SCSI_HOST defines - Used by the IOCTL and the SCSI drivers
561 * Private to the driver.
562 */
563
564#define MPT_HOST_BUS_UNKNOWN (0xFF)
565#define MPT_HOST_TOO_MANY_TM (0x05)
566#define MPT_HOST_NVRAM_INVALID (0xFFFFFFFF)
567#define MPT_HOST_NO_CHAIN (0xFFFFFFFF)
568#define MPT_NVRAM_MASK_TIMEOUT (0x000000FF)
569#define MPT_NVRAM_SYNC_MASK (0x0000FF00)
570#define MPT_NVRAM_SYNC_SHIFT (8)
571#define MPT_NVRAM_DISCONNECT_ENABLE (0x00010000)
572#define MPT_NVRAM_ID_SCAN_ENABLE (0x00020000)
573#define MPT_NVRAM_LUN_SCAN_ENABLE (0x00040000)
574#define MPT_NVRAM_TAG_QUEUE_ENABLE (0x00080000)
575#define MPT_NVRAM_WIDE_DISABLE (0x00100000)
576#define MPT_NVRAM_BOOT_CHOICE (0x00200000)
577
578typedef enum {
579 FC,
580 SPI,
581 SAS
582} BUS_TYPE;
583
584typedef struct _MPT_SCSI_HOST {
585 struct _MPT_ADAPTER *ioc;
586 ushort sel_timeout[MPT_MAX_FC_DEVICES];
587 char *info_kbuf;
588 long last_queue_full;
589 u16 spi_pending;
590 struct list_head target_reset_list;
591} MPT_SCSI_HOST;
592
557typedef void (*MPT_ADD_SGE)(void *pAddr, u32 flagslength, dma_addr_t dma_addr); 593typedef void (*MPT_ADD_SGE)(void *pAddr, u32 flagslength, dma_addr_t dma_addr);
558typedef void (*MPT_ADD_CHAIN)(void *pAddr, u8 next, u16 length, 594typedef void (*MPT_ADD_CHAIN)(void *pAddr, u8 next, u16 length,
559 dma_addr_t dma_addr); 595 dma_addr_t dma_addr);
560typedef void (*MPT_SCHEDULE_TARGET_RESET)(void *ioc); 596typedef void (*MPT_SCHEDULE_TARGET_RESET)(void *ioc);
597typedef void (*MPT_FLUSH_RUNNING_CMDS)(MPT_SCSI_HOST *hd);
561 598
562/* 599/*
563 * Adapter Structure - pci_dev specific. Maximum: MPT_MAX_ADAPTERS 600 * Adapter Structure - pci_dev specific. Maximum: MPT_MAX_ADAPTERS
@@ -717,6 +754,7 @@ typedef struct _MPT_ADAPTER
717 u8 taskmgmt_quiesce_io; 754 u8 taskmgmt_quiesce_io;
718 u8 ioc_reset_in_progress; 755 u8 ioc_reset_in_progress;
719 MPT_SCHEDULE_TARGET_RESET schedule_target_reset; 756 MPT_SCHEDULE_TARGET_RESET schedule_target_reset;
757 MPT_FLUSH_RUNNING_CMDS schedule_dead_ioc_flush_running_cmds;
720 struct work_struct sas_persist_task; 758 struct work_struct sas_persist_task;
721 759
722 struct work_struct fc_setup_reset_work; 760 struct work_struct fc_setup_reset_work;
@@ -830,19 +868,6 @@ typedef struct _MPT_LOCAL_REPLY {
830 u32 pad; 868 u32 pad;
831} MPT_LOCAL_REPLY; 869} MPT_LOCAL_REPLY;
832 870
833#define MPT_HOST_BUS_UNKNOWN (0xFF)
834#define MPT_HOST_TOO_MANY_TM (0x05)
835#define MPT_HOST_NVRAM_INVALID (0xFFFFFFFF)
836#define MPT_HOST_NO_CHAIN (0xFFFFFFFF)
837#define MPT_NVRAM_MASK_TIMEOUT (0x000000FF)
838#define MPT_NVRAM_SYNC_MASK (0x0000FF00)
839#define MPT_NVRAM_SYNC_SHIFT (8)
840#define MPT_NVRAM_DISCONNECT_ENABLE (0x00010000)
841#define MPT_NVRAM_ID_SCAN_ENABLE (0x00020000)
842#define MPT_NVRAM_LUN_SCAN_ENABLE (0x00040000)
843#define MPT_NVRAM_TAG_QUEUE_ENABLE (0x00080000)
844#define MPT_NVRAM_WIDE_DISABLE (0x00100000)
845#define MPT_NVRAM_BOOT_CHOICE (0x00200000)
846 871
847/* The TM_STATE variable is used to provide strict single threading of TM 872/* The TM_STATE variable is used to provide strict single threading of TM
848 * requests as well as communicate TM error conditions. 873 * requests as well as communicate TM error conditions.
@@ -851,21 +876,6 @@ typedef struct _MPT_LOCAL_REPLY {
851#define TM_STATE_IN_PROGRESS (1) 876#define TM_STATE_IN_PROGRESS (1)
852#define TM_STATE_ERROR (2) 877#define TM_STATE_ERROR (2)
853 878
854typedef enum {
855 FC,
856 SPI,
857 SAS
858} BUS_TYPE;
859
860typedef struct _MPT_SCSI_HOST {
861 MPT_ADAPTER *ioc;
862 ushort sel_timeout[MPT_MAX_FC_DEVICES];
863 char *info_kbuf;
864 long last_queue_full;
865 u16 spi_pending;
866 struct list_head target_reset_list;
867} MPT_SCSI_HOST;
868
869/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 879/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
870/* 880/*
871 * More Dynamic Multi-Pathing stuff... 881 * More Dynamic Multi-Pathing stuff...