diff options
Diffstat (limited to 'drivers/scsi/pmcraid.h')
| -rw-r--r-- | drivers/scsi/pmcraid.h | 305 | 
1 files changed, 179 insertions, 126 deletions
| diff --git a/drivers/scsi/pmcraid.h b/drivers/scsi/pmcraid.h index b8ad07c3449e..6cfa0145a1d7 100644 --- a/drivers/scsi/pmcraid.h +++ b/drivers/scsi/pmcraid.h @@ -40,10 +40,12 @@   * Driver version: version string in major_version.minor_version.patch format   * Driver date   : date information in "Mon dd yyyy" format   */ -#define PMCRAID_DRIVER_NAME       	"PMC MaxRAID" +#define PMCRAID_DRIVER_NAME		"PMC MaxRAID"  #define PMCRAID_DEVFILE			"pmcsas" -#define PMCRAID_DRIVER_VERSION    	"1.0.2" -#define PMCRAID_DRIVER_DATE       	__DATE__ +#define PMCRAID_DRIVER_VERSION		"2.0.2" +#define PMCRAID_DRIVER_DATE		__DATE__ + +#define PMCRAID_FW_VERSION_1		0x002  /* Maximum number of adapters supported by current version of the driver */  #define PMCRAID_MAX_ADAPTERS		1024 @@ -85,17 +87,17 @@  #define PMCRAID_IOARCB_ALIGNMENT                 32  #define PMCRAID_IOADL_ALIGNMENT                  16  #define PMCRAID_IOASA_ALIGNMENT                  4 -#define PMCRAID_NUM_MSIX_VECTORS                 1 +#define PMCRAID_NUM_MSIX_VECTORS                 16  /* various other limits */ -#define PMCRAID_VENDOR_ID_LEN           	 8 -#define PMCRAID_PRODUCT_ID_LEN            	 16 -#define PMCRAID_SERIAL_NUM_LEN          	 8 -#define PMCRAID_LUN_LEN			         8 -#define PMCRAID_MAX_CDB_LEN                      16 -#define PMCRAID_DEVICE_ID_LEN			 8 -#define PMCRAID_SENSE_DATA_LEN			 256 -#define PMCRAID_ADD_CMD_PARAM_LEN		 48 +#define PMCRAID_VENDOR_ID_LEN			8 +#define PMCRAID_PRODUCT_ID_LEN			16 +#define PMCRAID_SERIAL_NUM_LEN			8 +#define PMCRAID_LUN_LEN				8 +#define PMCRAID_MAX_CDB_LEN			16 +#define PMCRAID_DEVICE_ID_LEN			8 +#define PMCRAID_SENSE_DATA_LEN			256 +#define PMCRAID_ADD_CMD_PARAM_LEN		48  #define PMCRAID_MAX_BUS_TO_SCAN                  1  #define PMCRAID_MAX_NUM_TARGETS_PER_BUS          256 @@ -116,17 +118,10 @@  #define PMCRAID_VSET_MAX_SECTORS                 512  #define PMCRAID_MAX_CMD_PER_LUN                  254 -/* Number of configuration table entries (resources) */ -#define PMCRAID_MAX_NUM_OF_VSETS                 240 - -/* Todo : Check max limit for Phase 1 */ -#define PMCRAID_MAX_NUM_OF_PHY_DEVS              256 - -/* MAX_NUM_OF_DEVS includes 1 FP, 1 Dummy Enclosure device */ -#define PMCRAID_MAX_NUM_OF_DEVS                        \ -    (PMCRAID_MAX_NUM_OF_VSETS + PMCRAID_MAX_NUM_OF_PHY_DEVS + 2) - -#define PMCRAID_MAX_RESOURCES                    PMCRAID_MAX_NUM_OF_DEVS +/* Number of configuration table entries (resources), includes 1 FP, + * 1 Enclosure device + */ +#define PMCRAID_MAX_RESOURCES                    256  /* Adapter Commands used by driver */  #define PMCRAID_QUERY_RESOURCE_STATE             0xC2 @@ -177,6 +172,7 @@  #define PMCRAID_IOASC_SENSE_STATUS(ioasc)        ((ioasc) & 0x000000ff)  #define PMCRAID_IOASC_GOOD_COMPLETION			0x00000000 +#define PMCRAID_IOASC_GC_IOARCB_NOTFOUND		0x005A0000  #define PMCRAID_IOASC_NR_INIT_CMD_REQUIRED		0x02040200  #define PMCRAID_IOASC_NR_IOA_RESET_REQUIRED		0x02048000  #define PMCRAID_IOASC_NR_SYNC_REQUIRED			0x023F0000 @@ -187,12 +183,12 @@  #define PMCRAID_IOASC_HW_IOA_RESET_REQUIRED		0x04448600  #define PMCRAID_IOASC_IR_INVALID_RESOURCE_HANDLE        0x05250000  #define PMCRAID_IOASC_AC_TERMINATED_BY_HOST		0x0B5A0000 -#define PMCRAID_IOASC_UA_BUS_WAS_RESET           	0x06290000 -#define PMCRAID_IOASC_UA_BUS_WAS_RESET_BY_OTHER  	0x06298000 +#define PMCRAID_IOASC_UA_BUS_WAS_RESET			0x06290000 +#define PMCRAID_IOASC_UA_BUS_WAS_RESET_BY_OTHER		0x06298000  /* Driver defined IOASCs */ -#define PMCRAID_IOASC_IOA_WAS_RESET              	0x10000001 -#define PMCRAID_IOASC_PCI_ACCESS_ERROR           	0x10000002 +#define PMCRAID_IOASC_IOA_WAS_RESET			0x10000001 +#define PMCRAID_IOASC_PCI_ACCESS_ERROR			0x10000002  /* Various timeout values (in milliseconds) used. If any of these are chip   * specific, move them to pmcraid_chip_details structure. @@ -336,6 +332,13 @@ struct pmcraid_config_table_entry {  	__u8  lun[PMCRAID_LUN_LEN];  } __attribute__((packed, aligned(4))); +/* extended configuration table sizes are of 64 bytes in size */ +#define PMCRAID_CFGTE_EXT_SIZE	32 +struct pmcraid_config_table_entry_ext { +	struct pmcraid_config_table_entry cfgte; +	__u8  cfgte_ext[PMCRAID_CFGTE_EXT_SIZE]; +}; +  /* resource types (config_table_entry.resource_type values) */  #define RES_TYPE_AF_DASD     0x00  #define RES_TYPE_GSCSI       0x01 @@ -376,7 +379,12 @@ struct pmcraid_config_table {  	__u8  reserved1;  	__u8  flags;  	__u8  reserved2[11]; -	struct pmcraid_config_table_entry entries[PMCRAID_MAX_RESOURCES]; +	union { +		struct pmcraid_config_table_entry +				entries[PMCRAID_MAX_RESOURCES]; +		struct pmcraid_config_table_entry_ext +				entries_ext[PMCRAID_MAX_RESOURCES]; +	};  } __attribute__((packed, aligned(4)));  /* config_table.flags value */ @@ -385,7 +393,7 @@ struct pmcraid_config_table {  /*   * HCAM format   */ -#define PMCRAID_HOSTRCB_LDNSIZE 		4056 +#define PMCRAID_HOSTRCB_LDNSIZE			4056  /* Error log notification format */  struct pmcraid_hostrcb_error { @@ -416,6 +424,15 @@ struct pmcraid_hcam_hdr {  struct pmcraid_hcam_ccn {  	struct pmcraid_hcam_hdr header;  	struct pmcraid_config_table_entry cfg_entry; +	struct pmcraid_config_table_entry cfg_entry_old; +} __attribute__((packed, aligned(4))); + +#define PMCRAID_CCN_EXT_SIZE	3944 +struct pmcraid_hcam_ccn_ext { +	struct pmcraid_hcam_hdr header; +	struct pmcraid_config_table_entry_ext cfg_entry; +	struct pmcraid_config_table_entry_ext cfg_entry_old; +	__u8   reserved[PMCRAID_CCN_EXT_SIZE];  } __attribute__((packed, aligned(4)));  struct pmcraid_hcam_ldn { @@ -431,6 +448,8 @@ struct pmcraid_hcam_ldn {  #define NOTIFICATION_TYPE_ENTRY_CHANGED		0x0  #define NOTIFICATION_TYPE_ENTRY_NEW		0x1  #define NOTIFICATION_TYPE_ENTRY_DELETED		0x2 +#define NOTIFICATION_TYPE_STATE_CHANGE		0x3 +#define NOTIFICATION_TYPE_ENTRY_STATECHANGED	0x4  #define NOTIFICATION_TYPE_ERROR_LOG		0x10  #define NOTIFICATION_TYPE_INFORMATION_LOG	0x11 @@ -460,6 +479,7 @@ struct pmcraid_chip_details {  	unsigned long  mailbox;  	unsigned long  global_intr_mask;  	unsigned long  ioa_host_intr; +	unsigned long  ioa_host_msix_intr;  	unsigned long  ioa_host_intr_clr;  	unsigned long  ioa_host_mask;  	unsigned long  ioa_host_mask_clr; @@ -482,6 +502,7 @@ struct pmcraid_chip_details {  #define INTRS_IOA_PROCESSOR_ERROR		PMC_BIT32(29)  #define INTRS_HRRQ_VALID			PMC_BIT32(30)  #define INTRS_OPERATIONAL_STATUS		PMC_BIT32(0) +#define INTRS_ALLOW_MSIX_VECTOR0		PMC_BIT32(31)  /* Host to IOA Doorbells */  #define DOORBELL_RUNTIME_RESET			PMC_BIT32(1) @@ -489,10 +510,12 @@ struct pmcraid_chip_details {  #define DOORBELL_IOA_DEBUG_ALERT		PMC_BIT32(9)  #define DOORBELL_ENABLE_DESTRUCTIVE_DIAGS	PMC_BIT32(8)  #define DOORBELL_IOA_START_BIST			PMC_BIT32(23) +#define DOORBELL_INTR_MODE_MSIX			PMC_BIT32(25) +#define DOORBELL_INTR_MSIX_CLR			PMC_BIT32(26)  #define DOORBELL_RESET_IOA			PMC_BIT32(31)  /* Global interrupt mask register value */ -#define GLOBAL_INTERRUPT_MASK			0x4ULL +#define GLOBAL_INTERRUPT_MASK			0x5ULL  #define PMCRAID_ERROR_INTERRUPTS	(INTRS_IOARCB_TRANSFER_FAILED | \  					 INTRS_IOA_UNIT_CHECK | \ @@ -503,8 +526,8 @@ struct pmcraid_chip_details {  #define PMCRAID_PCI_INTERRUPTS		(PMCRAID_ERROR_INTERRUPTS | \  					 INTRS_HRRQ_VALID | \ -					 INTRS_CRITICAL_OP_IN_PROGRESS |\ -					 INTRS_TRANSITION_TO_OPERATIONAL) +					 INTRS_TRANSITION_TO_OPERATIONAL |\ +					 INTRS_ALLOW_MSIX_VECTOR0)  /* control_block, associated with each of the commands contains IOARCB, IOADLs   * memory for IOASA. Additional 3 * 16 bytes are allocated in order to support @@ -526,17 +549,24 @@ struct pmcraid_sglist {  	struct scatterlist scatterlist[1];  }; +/* page D0 inquiry data of focal point resource */ +struct pmcraid_inquiry_data { +	__u8	ph_dev_type; +	__u8	page_code; +	__u8	reserved1; +	__u8	add_page_len; +	__u8	length; +	__u8	reserved2; +	__le16	fw_version; +	__u8	reserved3[16]; +}; +  /* pmcraid_cmd - LLD representation of SCSI command */  struct pmcraid_cmd {  	/* Ptr and bus address of DMA.able control block for this command */  	struct pmcraid_control_block *ioa_cb;  	dma_addr_t ioa_cb_bus_addr; - -	/* sense buffer for REQUEST SENSE command if firmware is not sending -	 * auto sense data -	 */ -	dma_addr_t sense_buffer_dma;  	dma_addr_t dma_handle;  	u8 *sense_buffer; @@ -556,11 +586,22 @@ struct pmcraid_cmd {  	struct pmcraid_sglist *sglist; /* used for passthrough IOCTLs */ -	/* scratch used during reset sequence */ +	/* scratch used */  	union { +		/* during reset sequence */  		unsigned long time_left;  		struct pmcraid_resource_entry *res; -	} u; +		int hrrq_index; + +		/* used during IO command error handling. Sense buffer +		 * for REQUEST SENSE command if firmware is not sending +		 * auto sense data +		 */ +		struct  { +			u8 *sense_buffer; +			dma_addr_t sense_buffer_dma; +		}; +	};  };  /* @@ -568,6 +609,7 @@ struct pmcraid_cmd {   */  struct pmcraid_interrupts {  	void __iomem *ioa_host_interrupt_reg; +	void __iomem *ioa_host_msix_interrupt_reg;  	void __iomem *ioa_host_interrupt_clr_reg;  	void __iomem *ioa_host_interrupt_mask_reg;  	void __iomem *ioa_host_interrupt_mask_clr_reg; @@ -578,11 +620,12 @@ struct pmcraid_interrupts {  /* ISR parameters LLD allocates (one for each MSI-X if enabled) vectors */  struct pmcraid_isr_param { -	u8 hrrq_id;			/* hrrq entry index */ -	u16 vector;			/* allocated msi-x vector */  	struct pmcraid_instance *drv_inst; +	u16 vector;			/* allocated msi-x vector */ +	u8 hrrq_id;			/* hrrq entry index */  }; +  /* AEN message header sent as part of event data to applications */  struct pmcraid_aen_msg {  	u32 hostno; @@ -591,6 +634,19 @@ struct pmcraid_aen_msg {  	u8  data[0];  }; +/* Controller state event message type */ +struct pmcraid_state_msg { +	struct pmcraid_aen_msg msg; +	u32 ioa_state; +}; + +#define PMC_DEVICE_EVENT_RESET_START		0x11000000 +#define PMC_DEVICE_EVENT_RESET_SUCCESS		0x11000001 +#define PMC_DEVICE_EVENT_RESET_FAILED		0x11000002 +#define PMC_DEVICE_EVENT_SHUTDOWN_START		0x11000003 +#define PMC_DEVICE_EVENT_SHUTDOWN_SUCCESS	0x11000004 +#define PMC_DEVICE_EVENT_SHUTDOWN_FAILED	0x11000005 +  struct pmcraid_hostrcb {  	struct pmcraid_instance *drv_inst;  	struct pmcraid_aen_msg *msg; @@ -628,6 +684,7 @@ struct pmcraid_instance {  	/* HostRCBs needed for HCAM */  	struct pmcraid_hostrcb ldn;  	struct pmcraid_hostrcb ccn; +	struct pmcraid_state_msg scn;	/* controller state change msg */  	/* Bus address of start of HRRQ */ @@ -645,12 +702,15 @@ struct pmcraid_instance {  	/* Lock for HRRQ access */  	spinlock_t hrrq_lock[PMCRAID_NUM_MSIX_VECTORS]; +	struct pmcraid_inquiry_data *inq_data; +	dma_addr_t  inq_data_baddr; + +	/* size of configuration table entry, varies based on the firmware */ +	u32	config_table_entry_size; +  	/* Expected toggle bit at host */  	u8 host_toggle_bit[PMCRAID_NUM_MSIX_VECTORS]; -	/* No of Reset IOA retries . IOA marked dead if threshold exceeds */ -	u8 ioa_reset_attempts; -#define PMCRAID_RESET_ATTEMPTS 3  	/* Wait Q for  threads to wait for Reset IOA completion */  	wait_queue_head_t reset_wait_q; @@ -664,14 +724,22 @@ struct pmcraid_instance {  	struct Scsi_Host *host;	/* mid layer interface structure handle */  	struct pci_dev *pdev;	/* PCI device structure handle */ +	/* No of Reset IOA retries . IOA marked dead if threshold exceeds */ +	u8 ioa_reset_attempts; +#define PMCRAID_RESET_ATTEMPTS 3 +  	u8  current_log_level;	/* default level for logging IOASC errors */  	u8  num_hrrq;		/* Number of interrupt vectors allocated */ +	u8  interrupt_mode;	/* current interrupt mode legacy or msix */  	dev_t dev;		/* Major-Minor numbers for Char device */  	/* Used as ISR handler argument */  	struct pmcraid_isr_param hrrq_vector[PMCRAID_NUM_MSIX_VECTORS]; +	/* Message id as filled in last fired IOARCB, used to identify HRRQ */ +	atomic_t last_message_id; +  	/* configuration table */  	struct pmcraid_config_table *cfg_table;  	dma_addr_t cfg_table_bus_addr; @@ -686,8 +754,14 @@ struct pmcraid_instance {  	struct list_head free_cmd_pool;  	struct list_head pending_cmd_pool; -	spinlock_t free_pool_lock;	 	/* free pool lock */ -	spinlock_t pending_pool_lock;	 	/* pending pool lock */ +	spinlock_t free_pool_lock;		/* free pool lock */ +	spinlock_t pending_pool_lock;		/* pending pool lock */ + +	/* Tasklet to handle deferred processing */ +	struct tasklet_struct isr_tasklet[PMCRAID_NUM_MSIX_VECTORS]; + +	/* Work-queue (Shared) for deferred reset processing */ +	struct work_struct worker_q;  	/* No of IO commands pending with FW */  	atomic_t outstanding_cmds; @@ -695,11 +769,6 @@ struct pmcraid_instance {  	/* should add/delete resources to mid-layer now ?*/  	atomic_t expose_resources; -	/* Tasklet to handle deferred processing */ -	struct tasklet_struct isr_tasklet[PMCRAID_NUM_MSIX_VECTORS]; - -	/* Work-queue (Shared) for deferred reset processing */ -	struct work_struct worker_q;  	u32 ioa_state:4;	/* For IOA Reset sequence FSM */ @@ -728,7 +797,10 @@ struct pmcraid_instance {  /* LLD maintained resource entry structure */  struct pmcraid_resource_entry {  	struct list_head queue;	/* link to "to be exposed" resources */ -	struct pmcraid_config_table_entry cfg_entry; +	union { +		struct pmcraid_config_table_entry cfg_entry; +		struct pmcraid_config_table_entry_ext cfg_entry_ext; +	};  	struct scsi_device *scsi_dev;	/* Link scsi_device structure */  	atomic_t read_failures;		/* count of failed READ commands */  	atomic_t write_failures;	/* count of failed WRITE commands */ @@ -771,73 +843,75 @@ struct pmcraid_ioasc_error {   * statically.   */  static struct pmcraid_ioasc_error pmcraid_ioasc_error_table[] = { -	{0x01180600, IOASC_LOG_LEVEL_MUST, +	{0x01180600, IOASC_LOG_LEVEL_HARD,  	 "Recovered Error, soft media error, sector reassignment suggested"}, -	{0x015D0000, IOASC_LOG_LEVEL_MUST, -	 "Recovered Error, failure prediction threshold exceeded"}, -	{0x015D9200, IOASC_LOG_LEVEL_MUST, -	 "Recovered Error, soft Cache Card Battery error threshold"}, -	{0x015D9200, IOASC_LOG_LEVEL_MUST, -	 "Recovered Error, soft Cache Card Battery error threshold"}, -	{0x02048000, IOASC_LOG_LEVEL_MUST, +	{0x015D0000, IOASC_LOG_LEVEL_HARD, +	 "Recovered Error, failure prediction thresold exceeded"}, +	{0x015D9200, IOASC_LOG_LEVEL_HARD, +	 "Recovered Error, soft Cache Card Battery error thresold"}, +	{0x015D9200, IOASC_LOG_LEVEL_HARD, +	 "Recovered Error, soft Cache Card Battery error thresold"}, +	{0x02048000, IOASC_LOG_LEVEL_HARD,  	 "Not Ready, IOA Reset Required"}, -	{0x02408500, IOASC_LOG_LEVEL_MUST, +	{0x02408500, IOASC_LOG_LEVEL_HARD,  	 "Not Ready, IOA microcode download required"}, -	{0x03110B00, IOASC_LOG_LEVEL_MUST, +	{0x03110B00, IOASC_LOG_LEVEL_HARD,  	 "Medium Error, data unreadable, reassignment suggested"},  	{0x03110C00, IOASC_LOG_LEVEL_MUST,  	 "Medium Error, data unreadable do not reassign"}, -	{0x03310000, IOASC_LOG_LEVEL_MUST, +	{0x03310000, IOASC_LOG_LEVEL_HARD,  	 "Medium Error, media corrupted"}, -	{0x04050000, IOASC_LOG_LEVEL_MUST, +	{0x04050000, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, IOA can't communicate with device"},  	{0x04080000, IOASC_LOG_LEVEL_MUST,  	 "Hardware Error, device bus error"}, -	{0x04080000, IOASC_LOG_LEVEL_MUST, +	{0x04088000, IOASC_LOG_LEVEL_MUST,  	 "Hardware Error, device bus is not functioning"}, -	{0x04118000, IOASC_LOG_LEVEL_MUST, +	{0x04118000, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, IOA reserved area data check"}, -	{0x04118100, IOASC_LOG_LEVEL_MUST, +	{0x04118100, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, IOA reserved area invalid data pattern"}, -	{0x04118200, IOASC_LOG_LEVEL_MUST, +	{0x04118200, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, IOA reserved area LRC error"}, -	{0x04320000, IOASC_LOG_LEVEL_MUST, +	{0x04320000, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, reassignment space exhausted"}, -	{0x04330000, IOASC_LOG_LEVEL_MUST, +	{0x04330000, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, data transfer underlength error"}, -	{0x04330000, IOASC_LOG_LEVEL_MUST, +	{0x04330000, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, data transfer overlength error"},  	{0x04418000, IOASC_LOG_LEVEL_MUST,  	 "Hardware Error, PCI bus error"}, -	{0x04440000, IOASC_LOG_LEVEL_MUST, +	{0x04440000, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, device error"}, -	{0x04448300, IOASC_LOG_LEVEL_MUST, +	{0x04448200, IOASC_LOG_LEVEL_MUST, +	 "Hardware Error, IOA error"}, +	{0x04448300, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, undefined device response"}, -	{0x04448400, IOASC_LOG_LEVEL_MUST, +	{0x04448400, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, IOA microcode error"}, -	{0x04448600, IOASC_LOG_LEVEL_MUST, +	{0x04448600, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, IOA reset required"}, -	{0x04449200, IOASC_LOG_LEVEL_MUST, +	{0x04449200, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, hard Cache Fearuee Card Battery error"}, -	{0x0444A000, IOASC_LOG_LEVEL_MUST, +	{0x0444A000, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, failed device altered"}, -	{0x0444A200, IOASC_LOG_LEVEL_MUST, +	{0x0444A200, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, data check after reassignment"}, -	{0x0444A300, IOASC_LOG_LEVEL_MUST, +	{0x0444A300, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, LRC error after reassignment"}, -	{0x044A0000, IOASC_LOG_LEVEL_MUST, +	{0x044A0000, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, device bus error (msg/cmd phase)"}, -	{0x04670400, IOASC_LOG_LEVEL_MUST, +	{0x04670400, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, new device can't be used"}, -	{0x04678000, IOASC_LOG_LEVEL_MUST, +	{0x04678000, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, invalid multiadapter configuration"}, -	{0x04678100, IOASC_LOG_LEVEL_MUST, +	{0x04678100, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, incorrect connection between enclosures"}, -	{0x04678200, IOASC_LOG_LEVEL_MUST, +	{0x04678200, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, connections exceed IOA design limits"}, -	{0x04678300, IOASC_LOG_LEVEL_MUST, +	{0x04678300, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, incorrect multipath connection"}, -	{0x04679000, IOASC_LOG_LEVEL_MUST, +	{0x04679000, IOASC_LOG_LEVEL_HARD,  	 "Hardware Error, command to LUN failed"},  	{0x064C8000, IOASC_LOG_LEVEL_HARD,  	 "Unit Attention, cache exists for missing/failed device"}, @@ -845,15 +919,15 @@ static struct pmcraid_ioasc_error pmcraid_ioasc_error_table[] = {  	 "Unit Attention, incompatible exposed mode device"},  	{0x06670600, IOASC_LOG_LEVEL_HARD,  	 "Unit Attention, attachment of logical unit failed"}, -	{0x06678000, IOASC_LOG_LEVEL_MUST, +	{0x06678000, IOASC_LOG_LEVEL_HARD,  	 "Unit Attention, cables exceed connective design limit"}, -	{0x06678300, IOASC_LOG_LEVEL_MUST, +	{0x06678300, IOASC_LOG_LEVEL_HARD,  	 "Unit Attention, incomplete multipath connection between" \  	 "IOA and enclosure"}, -	{0x06678400, IOASC_LOG_LEVEL_MUST, +	{0x06678400, IOASC_LOG_LEVEL_HARD,  	 "Unit Attention, incomplete multipath connection between" \  	 "device and enclosure"}, -	{0x06678500, IOASC_LOG_LEVEL_MUST, +	{0x06678500, IOASC_LOG_LEVEL_HARD,  	 "Unit Attention, incomplete multipath connection between" \  	 "IOA and remote IOA"},  	{0x06678600, IOASC_LOG_LEVEL_HARD, @@ -863,11 +937,11 @@ static struct pmcraid_ioasc_error pmcraid_ioasc_error_table[] = {  	 "function"},  	{0x06698200, IOASC_LOG_LEVEL_HARD,  	 "Unit Attention, corrupt array parity detected on device"}, -	{0x066B0200, IOASC_LOG_LEVEL_MUST, +	{0x066B0200, IOASC_LOG_LEVEL_HARD,  	 "Unit Attention, array exposed"},  	{0x066B8200, IOASC_LOG_LEVEL_HARD,  	 "Unit Attention, exposed array is still protected"}, -	{0x066B9200, IOASC_LOG_LEVEL_MUST, +	{0x066B9200, IOASC_LOG_LEVEL_HARD,  	 "Unit Attention, Multipath redundancy level got worse"},  	{0x07270000, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, device is read/write protected by IOA"}, @@ -875,37 +949,37 @@ static struct pmcraid_ioasc_error pmcraid_ioasc_error_table[] = {  	 "Data Protect, IOA doesn't support device attribute"},  	{0x07278100, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, NVRAM mirroring prohibited"}, -	{0x07278400, IOASC_LOG_LEVEL_MUST, +	{0x07278400, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, array is short 2 or more devices"}, -	{0x07278600, IOASC_LOG_LEVEL_MUST, +	{0x07278600, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, exposed array is short a required device"}, -	{0x07278700, IOASC_LOG_LEVEL_MUST, +	{0x07278700, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, array members not at required addresses"}, -	{0x07278800, IOASC_LOG_LEVEL_MUST, +	{0x07278800, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, exposed mode device resource address conflict"}, -	{0x07278900, IOASC_LOG_LEVEL_MUST, +	{0x07278900, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, incorrect resource address of exposed mode device"}, -	{0x07278A00, IOASC_LOG_LEVEL_MUST, +	{0x07278A00, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, Array is missing a device and parity is out of sync"}, -	{0x07278B00, IOASC_LOG_LEVEL_MUST, +	{0x07278B00, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, maximum number of arrays already exist"},  	{0x07278C00, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, cannot locate cache data for device"},  	{0x07278D00, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, cache data exits for a changed device"}, -	{0x07279100, IOASC_LOG_LEVEL_MUST, +	{0x07279100, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, detection of a device requiring format"}, -	{0x07279200, IOASC_LOG_LEVEL_MUST, +	{0x07279200, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, IOA exceeds maximum number of devices"}, -	{0x07279600, IOASC_LOG_LEVEL_MUST, +	{0x07279600, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, missing array, volume set is not functional"}, -	{0x07279700, IOASC_LOG_LEVEL_MUST, +	{0x07279700, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, single device for a volume set"}, -	{0x07279800, IOASC_LOG_LEVEL_MUST, +	{0x07279800, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, missing multiple devices for a volume set"},  	{0x07279900, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, maximum number of volument sets already exists"}, -	{0x07279A00, IOASC_LOG_LEVEL_MUST, +	{0x07279A00, IOASC_LOG_LEVEL_HARD,  	 "Data Protect, other volume set problem"},  }; @@ -952,27 +1026,6 @@ struct pmcraid_ioctl_header {  #define PMCRAID_IOCTL_SIGNATURE      "PMCRAID" - -/* - * pmcraid_event_details - defines AEN details that apps can retrieve from LLD - * - * .rcb_ccn - complete RCB of CCN - * .rcb_ldn - complete RCB of CCN - */ -struct pmcraid_event_details { -	struct pmcraid_hcam_ccn rcb_ccn; -	struct pmcraid_hcam_ldn rcb_ldn; -}; - -/* - * pmcraid_driver_ioctl_buffer - structure passed as argument to most of the - * PMC driver handled ioctls. - */ -struct pmcraid_driver_ioctl_buffer { -	struct pmcraid_ioctl_header ioctl_header; -	struct pmcraid_event_details event_details; -}; -  /*   * pmcraid_passthrough_ioctl_buffer - structure given as argument to   * passthrough(or firmware handled) IOCTL commands. Note that ioarcb requires |