cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

smartpqi.h (46416B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 *    driver for Microchip PQI-based storage controllers
      4 *    Copyright (c) 2019-2021 Microchip Technology Inc. and its subsidiaries
      5 *    Copyright (c) 2016-2018 Microsemi Corporation
      6 *    Copyright (c) 2016 PMC-Sierra, Inc.
      7 *
      8 *    Questions/Comments/Bugfixes to storagedev@microchip.com
      9 *
     10 */
     11
     12#include <linux/io-64-nonatomic-lo-hi.h>
     13
     14#if !defined(_SMARTPQI_H)
     15#define _SMARTPQI_H
     16
     17#include <scsi/scsi_host.h>
     18#include <linux/bsg-lib.h>
     19
     20#pragma pack(1)
     21
     22#define PQI_DEVICE_SIGNATURE	"PQI DREG"
     23
     24/* This structure is defined by the PQI specification. */
     25struct pqi_device_registers {
     26	__le64	signature;
     27	u8	function_and_status_code;
     28	u8	reserved[7];
     29	u8	max_admin_iq_elements;
     30	u8	max_admin_oq_elements;
     31	u8	admin_iq_element_length;	/* in 16-byte units */
     32	u8	admin_oq_element_length;	/* in 16-byte units */
     33	__le16	max_reset_timeout;		/* in 100-millisecond units */
     34	u8	reserved1[2];
     35	__le32	legacy_intx_status;
     36	__le32	legacy_intx_mask_set;
     37	__le32	legacy_intx_mask_clear;
     38	u8	reserved2[28];
     39	__le32	device_status;
     40	u8	reserved3[4];
     41	__le64	admin_iq_pi_offset;
     42	__le64	admin_oq_ci_offset;
     43	__le64	admin_iq_element_array_addr;
     44	__le64	admin_oq_element_array_addr;
     45	__le64	admin_iq_ci_addr;
     46	__le64	admin_oq_pi_addr;
     47	u8	admin_iq_num_elements;
     48	u8	admin_oq_num_elements;
     49	__le16	admin_queue_int_msg_num;
     50	u8	reserved4[4];
     51	__le32	device_error;
     52	u8	reserved5[4];
     53	__le64	error_details;
     54	__le32	device_reset;
     55	__le32	power_action;
     56	u8	reserved6[104];
     57};
     58
     59/*
     60 * controller registers
     61 *
     62 * These are defined by the Microchip implementation.
     63 *
     64 * Some registers (those named sis_*) are only used when in
     65 * legacy SIS mode before we transition the controller into
     66 * PQI mode.  There are a number of other SIS mode registers,
     67 * but we don't use them, so only the SIS registers that we
     68 * care about are defined here.  The offsets mentioned in the
     69 * comments are the offsets from the PCIe BAR 0.
     70 */
     71struct pqi_ctrl_registers {
     72	u8	reserved[0x20];
     73	__le32	sis_host_to_ctrl_doorbell;		/* 20h */
     74	u8	reserved1[0x34 - (0x20 + sizeof(__le32))];
     75	__le32	sis_interrupt_mask;			/* 34h */
     76	u8	reserved2[0x9c - (0x34 + sizeof(__le32))];
     77	__le32	sis_ctrl_to_host_doorbell;		/* 9Ch */
     78	u8	reserved3[0xa0 - (0x9c + sizeof(__le32))];
     79	__le32	sis_ctrl_to_host_doorbell_clear;	/* A0h */
     80	u8	reserved4[0xb0 - (0xa0 + sizeof(__le32))];
     81	__le32	sis_driver_scratch;			/* B0h */
     82	__le32  sis_product_identifier;			/* B4h */
     83	u8	reserved5[0xbc - (0xb4 + sizeof(__le32))];
     84	__le32	sis_firmware_status;			/* BCh */
     85	u8	reserved6[0xcc - (0xbc + sizeof(__le32))];
     86	__le32	sis_ctrl_shutdown_reason_code;		/* CCh */
     87	u8	reserved7[0x1000 - (0xcc + sizeof(__le32))];
     88	__le32	sis_mailbox[8];				/* 1000h */
     89	u8	reserved8[0x4000 - (0x1000 + (sizeof(__le32) * 8))];
     90	/*
     91	 * The PQI spec states that the PQI registers should be at
     92	 * offset 0 from the PCIe BAR 0.  However, we can't map
     93	 * them at offset 0 because that would break compatibility
     94	 * with the SIS registers.  So we map them at offset 4000h.
     95	 */
     96	struct pqi_device_registers pqi_registers;	/* 4000h */
     97};
     98
     99#define PQI_DEVICE_REGISTERS_OFFSET	0x4000
    100
    101/* shutdown reasons for taking the controller offline */
    102enum pqi_ctrl_shutdown_reason {
    103	PQI_IQ_NOT_DRAINED_TIMEOUT = 1,
    104	PQI_LUN_RESET_TIMEOUT = 2,
    105	PQI_IO_PENDING_POST_LUN_RESET_TIMEOUT = 3,
    106	PQI_NO_HEARTBEAT = 4,
    107	PQI_FIRMWARE_KERNEL_NOT_UP = 5,
    108	PQI_OFA_RESPONSE_TIMEOUT = 6,
    109	PQI_INVALID_REQ_ID = 7,
    110	PQI_UNMATCHED_REQ_ID = 8,
    111	PQI_IO_PI_OUT_OF_RANGE = 9,
    112	PQI_EVENT_PI_OUT_OF_RANGE = 10,
    113	PQI_UNEXPECTED_IU_TYPE = 11
    114};
    115
    116enum pqi_io_path {
    117	RAID_PATH = 0,
    118	AIO_PATH = 1
    119};
    120
    121enum pqi_irq_mode {
    122	IRQ_MODE_NONE,
    123	IRQ_MODE_INTX,
    124	IRQ_MODE_MSIX
    125};
    126
    127struct pqi_sg_descriptor {
    128	__le64	address;
    129	__le32	length;
    130	__le32	flags;
    131};
    132
    133/* manifest constants for the flags field of pqi_sg_descriptor */
    134#define CISS_SG_LAST	0x40000000
    135#define CISS_SG_CHAIN	0x80000000
    136
    137struct pqi_iu_header {
    138	u8	iu_type;
    139	u8	reserved;
    140	__le16	iu_length;	/* in bytes - does not include the length */
    141				/* of this header */
    142	__le16	response_queue_id;	/* specifies the OQ where the */
    143					/* response IU is to be delivered */
    144	u16	driver_flags;	/* reserved for driver use */
    145};
    146
    147/* manifest constants for pqi_iu_header.driver_flags */
    148#define PQI_DRIVER_NONBLOCKABLE_REQUEST		0x1
    149
    150/*
    151 * According to the PQI spec, the IU header is only the first 4 bytes of our
    152 * pqi_iu_header structure.
    153 */
    154#define PQI_REQUEST_HEADER_LENGTH	4
    155
    156struct pqi_general_admin_request {
    157	struct pqi_iu_header header;
    158	__le16	request_id;
    159	u8	function_code;
    160	union {
    161		struct {
    162			u8	reserved[33];
    163			__le32	buffer_length;
    164			struct pqi_sg_descriptor sg_descriptor;
    165		} report_device_capability;
    166
    167		struct {
    168			u8	reserved;
    169			__le16	queue_id;
    170			u8	reserved1[2];
    171			__le64	element_array_addr;
    172			__le64	ci_addr;
    173			__le16	num_elements;
    174			__le16	element_length;
    175			u8	queue_protocol;
    176			u8	reserved2[23];
    177			__le32	vendor_specific;
    178		} create_operational_iq;
    179
    180		struct {
    181			u8	reserved;
    182			__le16	queue_id;
    183			u8	reserved1[2];
    184			__le64	element_array_addr;
    185			__le64	pi_addr;
    186			__le16	num_elements;
    187			__le16	element_length;
    188			u8	queue_protocol;
    189			u8	reserved2[3];
    190			__le16	int_msg_num;
    191			__le16	coalescing_count;
    192			__le32	min_coalescing_time;
    193			__le32	max_coalescing_time;
    194			u8	reserved3[8];
    195			__le32	vendor_specific;
    196		} create_operational_oq;
    197
    198		struct {
    199			u8	reserved;
    200			__le16	queue_id;
    201			u8	reserved1[50];
    202		} delete_operational_queue;
    203
    204		struct {
    205			u8	reserved;
    206			__le16	queue_id;
    207			u8	reserved1[46];
    208			__le32	vendor_specific;
    209		} change_operational_iq_properties;
    210
    211	} data;
    212};
    213
    214struct pqi_general_admin_response {
    215	struct pqi_iu_header header;
    216	__le16	request_id;
    217	u8	function_code;
    218	u8	status;
    219	union {
    220		struct {
    221			u8	status_descriptor[4];
    222			__le64	iq_pi_offset;
    223			u8	reserved[40];
    224		} create_operational_iq;
    225
    226		struct {
    227			u8	status_descriptor[4];
    228			__le64	oq_ci_offset;
    229			u8	reserved[40];
    230		} create_operational_oq;
    231	} data;
    232};
    233
    234struct pqi_iu_layer_descriptor {
    235	u8	inbound_spanning_supported : 1;
    236	u8	reserved : 7;
    237	u8	reserved1[5];
    238	__le16	max_inbound_iu_length;
    239	u8	outbound_spanning_supported : 1;
    240	u8	reserved2 : 7;
    241	u8	reserved3[5];
    242	__le16	max_outbound_iu_length;
    243};
    244
    245struct pqi_device_capability {
    246	__le16	data_length;
    247	u8	reserved[6];
    248	u8	iq_arbitration_priority_support_bitmask;
    249	u8	maximum_aw_a;
    250	u8	maximum_aw_b;
    251	u8	maximum_aw_c;
    252	u8	max_arbitration_burst : 3;
    253	u8	reserved1 : 4;
    254	u8	iqa : 1;
    255	u8	reserved2[2];
    256	u8	iq_freeze : 1;
    257	u8	reserved3 : 7;
    258	__le16	max_inbound_queues;
    259	__le16	max_elements_per_iq;
    260	u8	reserved4[4];
    261	__le16	max_iq_element_length;
    262	__le16	min_iq_element_length;
    263	u8	reserved5[2];
    264	__le16	max_outbound_queues;
    265	__le16	max_elements_per_oq;
    266	__le16	intr_coalescing_time_granularity;
    267	__le16	max_oq_element_length;
    268	__le16	min_oq_element_length;
    269	u8	reserved6[24];
    270	struct pqi_iu_layer_descriptor iu_layer_descriptors[32];
    271};
    272
    273#define PQI_MAX_EMBEDDED_SG_DESCRIPTORS		4
    274#define PQI_MAX_EMBEDDED_R56_SG_DESCRIPTORS	3
    275
    276struct pqi_raid_path_request {
    277	struct pqi_iu_header header;
    278	__le16	request_id;
    279	__le16	nexus_id;
    280	__le32	buffer_length;
    281	u8	lun_number[8];
    282	__le16	protocol_specific;
    283	u8	data_direction : 2;
    284	u8	partial : 1;
    285	u8	reserved1 : 4;
    286	u8	fence : 1;
    287	__le16	error_index;
    288	u8	reserved2;
    289	u8	task_attribute : 3;
    290	u8	command_priority : 4;
    291	u8	reserved3 : 1;
    292	u8	reserved4 : 2;
    293	u8	additional_cdb_bytes_usage : 3;
    294	u8	reserved5 : 3;
    295	u8	cdb[16];
    296	u8	reserved6[12];
    297	__le32	timeout;
    298	struct pqi_sg_descriptor sg_descriptors[PQI_MAX_EMBEDDED_SG_DESCRIPTORS];
    299};
    300
    301struct pqi_aio_path_request {
    302	struct pqi_iu_header header;
    303	__le16	request_id;
    304	u8	reserved1[2];
    305	__le32	nexus_id;
    306	__le32	buffer_length;
    307	u8	data_direction : 2;
    308	u8	partial : 1;
    309	u8	memory_type : 1;
    310	u8	fence : 1;
    311	u8	encryption_enable : 1;
    312	u8	reserved2 : 2;
    313	u8	task_attribute : 3;
    314	u8	command_priority : 4;
    315	u8	reserved3 : 1;
    316	__le16	data_encryption_key_index;
    317	__le32	encrypt_tweak_lower;
    318	__le32	encrypt_tweak_upper;
    319	u8	cdb[16];
    320	__le16	error_index;
    321	u8	num_sg_descriptors;
    322	u8	cdb_length;
    323	u8	lun_number[8];
    324	u8	reserved4[4];
    325	struct pqi_sg_descriptor sg_descriptors[PQI_MAX_EMBEDDED_SG_DESCRIPTORS];
    326};
    327
    328#define PQI_RAID1_NVME_XFER_LIMIT	(32 * 1024)	/* 32 KiB */
    329
    330struct pqi_aio_r1_path_request {
    331	struct pqi_iu_header header;
    332	__le16	request_id;
    333	__le16	volume_id;	/* ID of the RAID volume */
    334	__le32	it_nexus_1;	/* IT nexus of the 1st drive in the RAID volume */
    335	__le32	it_nexus_2;	/* IT nexus of the 2nd drive in the RAID volume */
    336	__le32	it_nexus_3;	/* IT nexus of the 3rd drive in the RAID volume */
    337	__le32	data_length;	/* total bytes to read/write */
    338	u8	data_direction : 2;
    339	u8	partial : 1;
    340	u8	memory_type : 1;
    341	u8	fence : 1;
    342	u8	encryption_enable : 1;
    343	u8	reserved : 2;
    344	u8	task_attribute : 3;
    345	u8	command_priority : 4;
    346	u8	reserved2 : 1;
    347	__le16	data_encryption_key_index;
    348	u8	cdb[16];
    349	__le16	error_index;
    350	u8	num_sg_descriptors;
    351	u8	cdb_length;
    352	u8	num_drives;	/* number of drives in the RAID volume (2 or 3) */
    353	u8	reserved3[3];
    354	__le32	encrypt_tweak_lower;
    355	__le32	encrypt_tweak_upper;
    356	struct pqi_sg_descriptor sg_descriptors[PQI_MAX_EMBEDDED_SG_DESCRIPTORS];
    357};
    358
    359#define PQI_DEFAULT_MAX_WRITE_RAID_5_6			(8 * 1024U)
    360#define PQI_DEFAULT_MAX_TRANSFER_ENCRYPTED_SAS_SATA	(~0U)
    361#define PQI_DEFAULT_MAX_TRANSFER_ENCRYPTED_NVME		(32 * 1024U)
    362
    363struct pqi_aio_r56_path_request {
    364	struct pqi_iu_header header;
    365	__le16	request_id;
    366	__le16	volume_id;		/* ID of the RAID volume */
    367	__le32	data_it_nexus;		/* IT nexus for the data drive */
    368	__le32	p_parity_it_nexus;	/* IT nexus for the P parity drive */
    369	__le32	q_parity_it_nexus;	/* IT nexus for the Q parity drive */
    370	__le32	data_length;		/* total bytes to read/write */
    371	u8	data_direction : 2;
    372	u8	partial : 1;
    373	u8	mem_type : 1;		/* 0 = PCIe, 1 = DDR */
    374	u8	fence : 1;
    375	u8	encryption_enable : 1;
    376	u8	reserved : 2;
    377	u8	task_attribute : 3;
    378	u8	command_priority : 4;
    379	u8	reserved1 : 1;
    380	__le16	data_encryption_key_index;
    381	u8	cdb[16];
    382	__le16	error_index;
    383	u8	num_sg_descriptors;
    384	u8	cdb_length;
    385	u8	xor_multiplier;
    386	u8	reserved2[3];
    387	__le32	encrypt_tweak_lower;
    388	__le32	encrypt_tweak_upper;
    389	__le64	row;			/* row = logical LBA/blocks per row */
    390	u8	reserved3[8];
    391	struct pqi_sg_descriptor sg_descriptors[PQI_MAX_EMBEDDED_R56_SG_DESCRIPTORS];
    392};
    393
    394struct pqi_io_response {
    395	struct pqi_iu_header header;
    396	__le16	request_id;
    397	__le16	error_index;
    398	u8	reserved2[4];
    399};
    400
    401struct pqi_general_management_request {
    402	struct pqi_iu_header header;
    403	__le16	request_id;
    404	union {
    405		struct {
    406			u8	reserved[2];
    407			__le32	buffer_length;
    408			struct pqi_sg_descriptor sg_descriptors[3];
    409		} report_event_configuration;
    410
    411		struct {
    412			__le16	global_event_oq_id;
    413			__le32	buffer_length;
    414			struct pqi_sg_descriptor sg_descriptors[3];
    415		} set_event_configuration;
    416	} data;
    417};
    418
    419struct pqi_event_descriptor {
    420	u8	event_type;
    421	u8	reserved;
    422	__le16	oq_id;
    423};
    424
    425struct pqi_event_config {
    426	u8	reserved[2];
    427	u8	num_event_descriptors;
    428	u8	reserved1;
    429	struct pqi_event_descriptor descriptors[];
    430};
    431
    432#define PQI_MAX_EVENT_DESCRIPTORS	255
    433
    434#define PQI_EVENT_OFA_MEMORY_ALLOCATION	0x0
    435#define PQI_EVENT_OFA_QUIESCE		0x1
    436#define PQI_EVENT_OFA_CANCELED		0x2
    437
    438struct pqi_event_response {
    439	struct pqi_iu_header header;
    440	u8	event_type;
    441	u8	reserved2 : 7;
    442	u8	request_acknowledge : 1;
    443	__le16	event_id;
    444	__le32	additional_event_id;
    445	union {
    446		struct {
    447			__le32	bytes_requested;
    448			u8	reserved[12];
    449		} ofa_memory_allocation;
    450
    451		struct {
    452			__le16	reason;		/* reason for cancellation */
    453			u8	reserved[14];
    454		} ofa_cancelled;
    455	} data;
    456};
    457
    458struct pqi_event_acknowledge_request {
    459	struct pqi_iu_header header;
    460	u8	event_type;
    461	u8	reserved2;
    462	__le16	event_id;
    463	__le32	additional_event_id;
    464};
    465
    466struct pqi_task_management_request {
    467	struct pqi_iu_header header;
    468	__le16	request_id;
    469	__le16	nexus_id;
    470	u8	reserved[2];
    471	__le16  timeout;
    472	u8	lun_number[8];
    473	__le16	protocol_specific;
    474	__le16	outbound_queue_id_to_manage;
    475	__le16	request_id_to_manage;
    476	u8	task_management_function;
    477	u8	reserved2 : 7;
    478	u8	fence : 1;
    479};
    480
    481#define SOP_TASK_MANAGEMENT_LUN_RESET	0x8
    482
    483struct pqi_task_management_response {
    484	struct pqi_iu_header header;
    485	__le16	request_id;
    486	__le16	nexus_id;
    487	u8	additional_response_info[3];
    488	u8	response_code;
    489};
    490
    491struct pqi_vendor_general_request {
    492	struct pqi_iu_header header;
    493	__le16	request_id;
    494	__le16	function_code;
    495	union {
    496		struct {
    497			__le16	first_section;
    498			__le16	last_section;
    499			u8	reserved[48];
    500		} config_table_update;
    501
    502		struct {
    503			__le64	buffer_address;
    504			__le32	buffer_length;
    505			u8	reserved[40];
    506		} ofa_memory_allocation;
    507	} data;
    508};
    509
    510struct pqi_vendor_general_response {
    511	struct pqi_iu_header header;
    512	__le16	request_id;
    513	__le16	function_code;
    514	__le16	status;
    515	u8	reserved[2];
    516};
    517
    518#define PQI_VENDOR_GENERAL_CONFIG_TABLE_UPDATE	0
    519#define PQI_VENDOR_GENERAL_HOST_MEMORY_UPDATE	1
    520
    521#define PQI_OFA_VERSION			1
    522#define PQI_OFA_SIGNATURE		"OFA_QRM"
    523#define PQI_OFA_MAX_SG_DESCRIPTORS	64
    524
    525struct pqi_ofa_memory {
    526	__le64	signature;	/* "OFA_QRM" */
    527	__le16	version;	/* version of this struct (1 = 1st version) */
    528	u8	reserved[62];
    529	__le32	bytes_allocated;	/* total allocated memory in bytes */
    530	__le16	num_memory_descriptors;
    531	u8	reserved1[2];
    532	struct pqi_sg_descriptor sg_descriptor[PQI_OFA_MAX_SG_DESCRIPTORS];
    533};
    534
    535struct pqi_aio_error_info {
    536	u8	status;
    537	u8	service_response;
    538	u8	data_present;
    539	u8	reserved;
    540	__le32	residual_count;
    541	__le16	data_length;
    542	__le16	reserved1;
    543	u8	data[256];
    544};
    545
    546struct pqi_raid_error_info {
    547	u8	data_in_result;
    548	u8	data_out_result;
    549	u8	reserved[3];
    550	u8	status;
    551	__le16	status_qualifier;
    552	__le16	sense_data_length;
    553	__le16	response_data_length;
    554	__le32	data_in_transferred;
    555	__le32	data_out_transferred;
    556	u8	data[256];
    557};
    558
    559#define PQI_REQUEST_IU_TASK_MANAGEMENT			0x13
    560#define PQI_REQUEST_IU_RAID_PATH_IO			0x14
    561#define PQI_REQUEST_IU_AIO_PATH_IO			0x15
    562#define PQI_REQUEST_IU_AIO_PATH_RAID5_IO		0x18
    563#define PQI_REQUEST_IU_AIO_PATH_RAID6_IO		0x19
    564#define PQI_REQUEST_IU_AIO_PATH_RAID1_IO		0x1A
    565#define PQI_REQUEST_IU_GENERAL_ADMIN			0x60
    566#define PQI_REQUEST_IU_REPORT_VENDOR_EVENT_CONFIG	0x72
    567#define PQI_REQUEST_IU_SET_VENDOR_EVENT_CONFIG		0x73
    568#define PQI_REQUEST_IU_VENDOR_GENERAL			0x75
    569#define PQI_REQUEST_IU_ACKNOWLEDGE_VENDOR_EVENT		0xf6
    570
    571#define PQI_RESPONSE_IU_GENERAL_MANAGEMENT		0x81
    572#define PQI_RESPONSE_IU_TASK_MANAGEMENT			0x93
    573#define PQI_RESPONSE_IU_GENERAL_ADMIN			0xe0
    574#define PQI_RESPONSE_IU_RAID_PATH_IO_SUCCESS		0xf0
    575#define PQI_RESPONSE_IU_AIO_PATH_IO_SUCCESS		0xf1
    576#define PQI_RESPONSE_IU_RAID_PATH_IO_ERROR		0xf2
    577#define PQI_RESPONSE_IU_AIO_PATH_IO_ERROR		0xf3
    578#define PQI_RESPONSE_IU_AIO_PATH_DISABLED		0xf4
    579#define PQI_RESPONSE_IU_VENDOR_EVENT			0xf5
    580#define PQI_RESPONSE_IU_VENDOR_GENERAL			0xf7
    581
    582#define PQI_GENERAL_ADMIN_FUNCTION_REPORT_DEVICE_CAPABILITY	0x0
    583#define PQI_GENERAL_ADMIN_FUNCTION_CREATE_IQ			0x10
    584#define PQI_GENERAL_ADMIN_FUNCTION_CREATE_OQ			0x11
    585#define PQI_GENERAL_ADMIN_FUNCTION_DELETE_IQ			0x12
    586#define PQI_GENERAL_ADMIN_FUNCTION_DELETE_OQ			0x13
    587#define PQI_GENERAL_ADMIN_FUNCTION_CHANGE_IQ_PROPERTY		0x14
    588
    589#define PQI_GENERAL_ADMIN_STATUS_SUCCESS	0x0
    590
    591#define PQI_IQ_PROPERTY_IS_AIO_QUEUE	0x1
    592
    593#define PQI_GENERAL_ADMIN_IU_LENGTH		0x3c
    594#define PQI_PROTOCOL_SOP			0x0
    595
    596#define PQI_DATA_IN_OUT_GOOD					0x0
    597#define PQI_DATA_IN_OUT_UNDERFLOW				0x1
    598#define PQI_DATA_IN_OUT_BUFFER_ERROR				0x40
    599#define PQI_DATA_IN_OUT_BUFFER_OVERFLOW				0x41
    600#define PQI_DATA_IN_OUT_BUFFER_OVERFLOW_DESCRIPTOR_AREA		0x42
    601#define PQI_DATA_IN_OUT_BUFFER_OVERFLOW_BRIDGE			0x43
    602#define PQI_DATA_IN_OUT_PCIE_FABRIC_ERROR			0x60
    603#define PQI_DATA_IN_OUT_PCIE_COMPLETION_TIMEOUT			0x61
    604#define PQI_DATA_IN_OUT_PCIE_COMPLETER_ABORT_RECEIVED		0x62
    605#define PQI_DATA_IN_OUT_PCIE_UNSUPPORTED_REQUEST_RECEIVED	0x63
    606#define PQI_DATA_IN_OUT_PCIE_ECRC_CHECK_FAILED			0x64
    607#define PQI_DATA_IN_OUT_PCIE_UNSUPPORTED_REQUEST		0x65
    608#define PQI_DATA_IN_OUT_PCIE_ACS_VIOLATION			0x66
    609#define PQI_DATA_IN_OUT_PCIE_TLP_PREFIX_BLOCKED			0x67
    610#define PQI_DATA_IN_OUT_PCIE_POISONED_MEMORY_READ		0x6F
    611#define PQI_DATA_IN_OUT_ERROR					0xf0
    612#define PQI_DATA_IN_OUT_PROTOCOL_ERROR				0xf1
    613#define PQI_DATA_IN_OUT_HARDWARE_ERROR				0xf2
    614#define PQI_DATA_IN_OUT_UNSOLICITED_ABORT			0xf3
    615#define PQI_DATA_IN_OUT_ABORTED					0xf4
    616#define PQI_DATA_IN_OUT_TIMEOUT					0xf5
    617
    618#define CISS_CMD_STATUS_SUCCESS			0x0
    619#define CISS_CMD_STATUS_TARGET_STATUS		0x1
    620#define CISS_CMD_STATUS_DATA_UNDERRUN		0x2
    621#define CISS_CMD_STATUS_DATA_OVERRUN		0x3
    622#define CISS_CMD_STATUS_INVALID			0x4
    623#define CISS_CMD_STATUS_PROTOCOL_ERROR		0x5
    624#define CISS_CMD_STATUS_HARDWARE_ERROR		0x6
    625#define CISS_CMD_STATUS_CONNECTION_LOST		0x7
    626#define CISS_CMD_STATUS_ABORTED			0x8
    627#define CISS_CMD_STATUS_ABORT_FAILED		0x9
    628#define CISS_CMD_STATUS_UNSOLICITED_ABORT	0xa
    629#define CISS_CMD_STATUS_TIMEOUT			0xb
    630#define CISS_CMD_STATUS_UNABORTABLE		0xc
    631#define CISS_CMD_STATUS_TMF			0xd
    632#define CISS_CMD_STATUS_AIO_DISABLED		0xe
    633
    634#define PQI_CMD_STATUS_ABORTED	CISS_CMD_STATUS_ABORTED
    635
    636#define PQI_NUM_EVENT_QUEUE_ELEMENTS	32
    637#define PQI_EVENT_OQ_ELEMENT_LENGTH	sizeof(struct pqi_event_response)
    638
    639#define PQI_EVENT_TYPE_HOTPLUG			0x1
    640#define PQI_EVENT_TYPE_HARDWARE			0x2
    641#define PQI_EVENT_TYPE_PHYSICAL_DEVICE		0x4
    642#define PQI_EVENT_TYPE_LOGICAL_DEVICE		0x5
    643#define PQI_EVENT_TYPE_OFA			0xfb
    644#define PQI_EVENT_TYPE_AIO_STATE_CHANGE		0xfd
    645#define PQI_EVENT_TYPE_AIO_CONFIG_CHANGE	0xfe
    646
    647#pragma pack()
    648
    649#define PQI_ERROR_BUFFER_ELEMENT_LENGTH		\
    650	sizeof(struct pqi_raid_error_info)
    651
    652/* these values are based on our implementation */
    653#define PQI_ADMIN_IQ_NUM_ELEMENTS		8
    654#define PQI_ADMIN_OQ_NUM_ELEMENTS		20
    655#define PQI_ADMIN_IQ_ELEMENT_LENGTH		64
    656#define PQI_ADMIN_OQ_ELEMENT_LENGTH		64
    657
    658#define PQI_OPERATIONAL_IQ_ELEMENT_LENGTH	128
    659#define PQI_OPERATIONAL_OQ_ELEMENT_LENGTH	16
    660
    661#define PQI_MIN_MSIX_VECTORS		1
    662#define PQI_MAX_MSIX_VECTORS		64
    663
    664/* these values are defined by the PQI spec */
    665#define PQI_MAX_NUM_ELEMENTS_ADMIN_QUEUE	255
    666#define PQI_MAX_NUM_ELEMENTS_OPERATIONAL_QUEUE	65535
    667
    668#define PQI_QUEUE_ELEMENT_ARRAY_ALIGNMENT	64
    669#define PQI_QUEUE_ELEMENT_LENGTH_ALIGNMENT	16
    670#define PQI_ADMIN_INDEX_ALIGNMENT		64
    671#define PQI_OPERATIONAL_INDEX_ALIGNMENT		4
    672
    673#define PQI_MIN_OPERATIONAL_QUEUE_ID		1
    674#define PQI_MAX_OPERATIONAL_QUEUE_ID		65535
    675
    676#define PQI_AIO_SERV_RESPONSE_COMPLETE		0
    677#define PQI_AIO_SERV_RESPONSE_FAILURE		1
    678#define PQI_AIO_SERV_RESPONSE_TMF_COMPLETE	2
    679#define PQI_AIO_SERV_RESPONSE_TMF_SUCCEEDED	3
    680#define PQI_AIO_SERV_RESPONSE_TMF_REJECTED	4
    681#define PQI_AIO_SERV_RESPONSE_TMF_INCORRECT_LUN	5
    682
    683#define PQI_AIO_STATUS_IO_ERROR			0x1
    684#define PQI_AIO_STATUS_IO_ABORTED		0x2
    685#define PQI_AIO_STATUS_NO_PATH_TO_DEVICE	0x3
    686#define PQI_AIO_STATUS_INVALID_DEVICE		0x4
    687#define PQI_AIO_STATUS_AIO_PATH_DISABLED	0xe
    688#define PQI_AIO_STATUS_UNDERRUN			0x51
    689#define PQI_AIO_STATUS_OVERRUN			0x75
    690
    691typedef u32 pqi_index_t;
    692
    693/* SOP data direction flags */
    694#define SOP_NO_DIRECTION_FLAG	0
    695#define SOP_WRITE_FLAG		1	/* host writes data to Data-Out */
    696					/* buffer */
    697#define SOP_READ_FLAG		2	/* host receives data from Data-In */
    698					/* buffer */
    699#define SOP_BIDIRECTIONAL	3	/* data is transferred from the */
    700					/* Data-Out buffer and data is */
    701					/* transferred to the Data-In buffer */
    702
    703#define SOP_TASK_ATTRIBUTE_SIMPLE		0
    704#define SOP_TASK_ATTRIBUTE_HEAD_OF_QUEUE	1
    705#define SOP_TASK_ATTRIBUTE_ORDERED		2
    706#define SOP_TASK_ATTRIBUTE_ACA			4
    707
    708#define SOP_TMF_COMPLETE		0x0
    709#define SOP_TMF_REJECTED		0x4
    710#define SOP_TMF_FUNCTION_SUCCEEDED	0x8
    711
    712/* additional CDB bytes usage field codes */
    713#define SOP_ADDITIONAL_CDB_BYTES_0	0	/* 16-byte CDB */
    714#define SOP_ADDITIONAL_CDB_BYTES_4	1	/* 20-byte CDB */
    715#define SOP_ADDITIONAL_CDB_BYTES_8	2	/* 24-byte CDB */
    716#define SOP_ADDITIONAL_CDB_BYTES_12	3	/* 28-byte CDB */
    717#define SOP_ADDITIONAL_CDB_BYTES_16	4	/* 32-byte CDB */
    718
    719/*
    720 * The purpose of this structure is to obtain proper alignment of objects in
    721 * an admin queue pair.
    722 */
    723struct pqi_admin_queues_aligned {
    724	__aligned(PQI_QUEUE_ELEMENT_ARRAY_ALIGNMENT)
    725		u8	iq_element_array[PQI_ADMIN_IQ_ELEMENT_LENGTH]
    726					[PQI_ADMIN_IQ_NUM_ELEMENTS];
    727	__aligned(PQI_QUEUE_ELEMENT_ARRAY_ALIGNMENT)
    728		u8	oq_element_array[PQI_ADMIN_OQ_ELEMENT_LENGTH]
    729					[PQI_ADMIN_OQ_NUM_ELEMENTS];
    730	__aligned(PQI_ADMIN_INDEX_ALIGNMENT) pqi_index_t iq_ci;
    731	__aligned(PQI_ADMIN_INDEX_ALIGNMENT) pqi_index_t oq_pi;
    732};
    733
    734struct pqi_admin_queues {
    735	void		*iq_element_array;
    736	void		*oq_element_array;
    737	pqi_index_t __iomem *iq_ci;
    738	pqi_index_t __iomem *oq_pi;
    739	dma_addr_t	iq_element_array_bus_addr;
    740	dma_addr_t	oq_element_array_bus_addr;
    741	dma_addr_t	iq_ci_bus_addr;
    742	dma_addr_t	oq_pi_bus_addr;
    743	__le32 __iomem	*iq_pi;
    744	pqi_index_t	iq_pi_copy;
    745	__le32 __iomem	*oq_ci;
    746	pqi_index_t	oq_ci_copy;
    747	struct task_struct *task;
    748	u16		int_msg_num;
    749};
    750
    751struct pqi_queue_group {
    752	struct pqi_ctrl_info *ctrl_info;	/* backpointer */
    753	u16		iq_id[2];
    754	u16		oq_id;
    755	u16		int_msg_num;
    756	void		*iq_element_array[2];
    757	void		*oq_element_array;
    758	dma_addr_t	iq_element_array_bus_addr[2];
    759	dma_addr_t	oq_element_array_bus_addr;
    760	__le32 __iomem	*iq_pi[2];
    761	pqi_index_t	iq_pi_copy[2];
    762	pqi_index_t __iomem *iq_ci[2];
    763	pqi_index_t __iomem *oq_pi;
    764	dma_addr_t	iq_ci_bus_addr[2];
    765	dma_addr_t	oq_pi_bus_addr;
    766	__le32 __iomem	*oq_ci;
    767	pqi_index_t	oq_ci_copy;
    768	spinlock_t	submit_lock[2];	/* protect submission queue */
    769	struct list_head request_list[2];
    770};
    771
    772struct pqi_event_queue {
    773	u16		oq_id;
    774	u16		int_msg_num;
    775	void		*oq_element_array;
    776	pqi_index_t __iomem *oq_pi;
    777	dma_addr_t	oq_element_array_bus_addr;
    778	dma_addr_t	oq_pi_bus_addr;
    779	__le32 __iomem	*oq_ci;
    780	pqi_index_t	oq_ci_copy;
    781};
    782
    783#define PQI_DEFAULT_QUEUE_GROUP		0
    784#define PQI_MAX_QUEUE_GROUPS		PQI_MAX_MSIX_VECTORS
    785
    786struct pqi_encryption_info {
    787	u16	data_encryption_key_index;
    788	u32	encrypt_tweak_lower;
    789	u32	encrypt_tweak_upper;
    790};
    791
    792#pragma pack(1)
    793
    794#define PQI_CONFIG_TABLE_SIGNATURE	"CFGTABLE"
    795#define PQI_CONFIG_TABLE_MAX_LENGTH	((u16)~0)
    796
    797/* configuration table section IDs */
    798#define PQI_CONFIG_TABLE_ALL_SECTIONS			(-1)
    799#define PQI_CONFIG_TABLE_SECTION_GENERAL_INFO		0
    800#define PQI_CONFIG_TABLE_SECTION_FIRMWARE_FEATURES	1
    801#define PQI_CONFIG_TABLE_SECTION_FIRMWARE_ERRATA	2
    802#define PQI_CONFIG_TABLE_SECTION_DEBUG			3
    803#define PQI_CONFIG_TABLE_SECTION_HEARTBEAT		4
    804#define PQI_CONFIG_TABLE_SECTION_SOFT_RESET		5
    805
    806struct pqi_config_table {
    807	u8	signature[8];		/* "CFGTABLE" */
    808	__le32	first_section_offset;	/* offset in bytes from the base */
    809					/* address of this table to the */
    810					/* first section */
    811};
    812
    813struct pqi_config_table_section_header {
    814	__le16	section_id;		/* as defined by the */
    815					/* PQI_CONFIG_TABLE_SECTION_* */
    816					/* manifest constants above */
    817	__le16	next_section_offset;	/* offset in bytes from base */
    818					/* address of the table of the */
    819					/* next section or 0 if last entry */
    820};
    821
    822struct pqi_config_table_general_info {
    823	struct pqi_config_table_section_header header;
    824	__le32	section_length;		/* size of this section in bytes */
    825					/* including the section header */
    826	__le32	max_outstanding_requests;	/* max. outstanding */
    827						/* commands supported by */
    828						/* the controller */
    829	__le32	max_sg_size;		/* max. transfer size of a single */
    830					/* command */
    831	__le32	max_sg_per_request;	/* max. number of scatter-gather */
    832					/* entries supported in a single */
    833					/* command */
    834};
    835
    836struct pqi_config_table_firmware_features {
    837	struct pqi_config_table_section_header header;
    838	__le16	num_elements;
    839	u8	features_supported[];
    840/*	u8	features_requested_by_host[]; */
    841/*	u8	features_enabled[]; */
    842/* The 2 fields below are only valid if the MAX_KNOWN_FEATURE bit is set. */
    843/*	__le16	firmware_max_known_feature; */
    844/*	__le16	host_max_known_feature; */
    845};
    846
    847#define PQI_FIRMWARE_FEATURE_OFA				0
    848#define PQI_FIRMWARE_FEATURE_SMP				1
    849#define PQI_FIRMWARE_FEATURE_MAX_KNOWN_FEATURE			2
    850#define PQI_FIRMWARE_FEATURE_RAID_0_READ_BYPASS			3
    851#define PQI_FIRMWARE_FEATURE_RAID_1_READ_BYPASS			4
    852#define PQI_FIRMWARE_FEATURE_RAID_5_READ_BYPASS			5
    853#define PQI_FIRMWARE_FEATURE_RAID_6_READ_BYPASS			6
    854#define PQI_FIRMWARE_FEATURE_RAID_0_WRITE_BYPASS		7
    855#define PQI_FIRMWARE_FEATURE_RAID_1_WRITE_BYPASS		8
    856#define PQI_FIRMWARE_FEATURE_RAID_5_WRITE_BYPASS		9
    857#define PQI_FIRMWARE_FEATURE_RAID_6_WRITE_BYPASS		10
    858#define PQI_FIRMWARE_FEATURE_SOFT_RESET_HANDSHAKE		11
    859#define PQI_FIRMWARE_FEATURE_UNIQUE_SATA_WWN			12
    860#define PQI_FIRMWARE_FEATURE_RAID_IU_TIMEOUT			13
    861#define PQI_FIRMWARE_FEATURE_TMF_IU_TIMEOUT			14
    862#define PQI_FIRMWARE_FEATURE_RAID_BYPASS_ON_ENCRYPTED_NVME	15
    863#define PQI_FIRMWARE_FEATURE_UNIQUE_WWID_IN_REPORT_PHYS_LUN	16
    864#define PQI_FIRMWARE_FEATURE_FW_TRIAGE				17
    865#define PQI_FIRMWARE_FEATURE_RPL_EXTENDED_FORMAT_4_5		18
    866#define PQI_FIRMWARE_FEATURE_MAXIMUM				18
    867
    868struct pqi_config_table_debug {
    869	struct pqi_config_table_section_header header;
    870	__le32	scratchpad;
    871};
    872
    873struct pqi_config_table_heartbeat {
    874	struct pqi_config_table_section_header header;
    875	__le32	heartbeat_counter;
    876};
    877
    878struct pqi_config_table_soft_reset {
    879	struct pqi_config_table_section_header header;
    880	u8 soft_reset_status;
    881};
    882
    883#define PQI_SOFT_RESET_INITIATE		0x1
    884#define PQI_SOFT_RESET_ABORT		0x2
    885
    886enum pqi_soft_reset_status {
    887	RESET_INITIATE_FIRMWARE,
    888	RESET_INITIATE_DRIVER,
    889	RESET_ABORT,
    890	RESET_NORESPONSE,
    891	RESET_TIMEDOUT
    892};
    893
    894union pqi_reset_register {
    895	struct {
    896		u32	reset_type : 3;
    897		u32	reserved : 2;
    898		u32	reset_action : 3;
    899		u32	hold_in_pd1 : 1;
    900		u32	reserved2 : 23;
    901	} bits;
    902	u32	all_bits;
    903};
    904
    905#define PQI_RESET_ACTION_RESET		0x1
    906
    907#define PQI_RESET_TYPE_NO_RESET		0x0
    908#define PQI_RESET_TYPE_SOFT_RESET	0x1
    909#define PQI_RESET_TYPE_FIRM_RESET	0x2
    910#define PQI_RESET_TYPE_HARD_RESET	0x3
    911
    912#define PQI_RESET_ACTION_COMPLETED	0x2
    913
    914#define PQI_RESET_POLL_INTERVAL_MSECS	100
    915
    916#define PQI_MAX_OUTSTANDING_REQUESTS		((u32)~0)
    917#define PQI_MAX_OUTSTANDING_REQUESTS_KDUMP	32
    918#define PQI_MAX_TRANSFER_SIZE			(1024U * 1024U)
    919#define PQI_MAX_TRANSFER_SIZE_KDUMP		(512 * 1024U)
    920
    921#define RAID_MAP_MAX_ENTRIES			1024
    922#define RAID_MAP_MAX_DATA_DISKS_PER_ROW		128
    923
    924#define PQI_PHYSICAL_DEVICE_BUS		0
    925#define PQI_RAID_VOLUME_BUS		1
    926#define PQI_HBA_BUS			2
    927#define PQI_EXTERNAL_RAID_VOLUME_BUS	3
    928#define PQI_MAX_BUS			PQI_EXTERNAL_RAID_VOLUME_BUS
    929#define PQI_VSEP_CISS_BTL		379
    930
    931struct report_lun_header {
    932	__be32	list_length;
    933	u8	flags;
    934	u8	reserved[3];
    935};
    936
    937/* for flags field of struct report_lun_header */
    938#define CISS_REPORT_LOG_FLAG_UNIQUE_LUN_ID	(1 << 0)
    939#define CISS_REPORT_LOG_FLAG_QUEUE_DEPTH	(1 << 5)
    940#define CISS_REPORT_LOG_FLAG_DRIVE_TYPE_MIX	(1 << 6)
    941
    942#define CISS_REPORT_PHYS_FLAG_EXTENDED_FORMAT_2		0x2
    943#define CISS_REPORT_PHYS_FLAG_EXTENDED_FORMAT_4		0x4
    944#define CISS_REPORT_PHYS_FLAG_EXTENDED_FORMAT_MASK	0xf
    945
    946struct report_log_lun {
    947	u8	lunid[8];
    948	u8	volume_id[16];
    949};
    950
    951struct report_log_lun_list {
    952	struct report_lun_header header;
    953	struct report_log_lun lun_entries[1];
    954};
    955
    956struct report_phys_lun_8byte_wwid {
    957	u8	lunid[8];
    958	__be64	wwid;
    959	u8	device_type;
    960	u8	device_flags;
    961	u8	lun_count;	/* number of LUNs in a multi-LUN device */
    962	u8	redundant_paths;
    963	u32	aio_handle;
    964};
    965
    966struct report_phys_lun_16byte_wwid {
    967	u8	lunid[8];
    968	u8	wwid[16];
    969	u8	device_type;
    970	u8	device_flags;
    971	u8	lun_count;	/* number of LUNs in a multi-LUN device */
    972	u8	redundant_paths;
    973	u32	aio_handle;
    974};
    975
    976/* for device_flags field of struct report_phys_lun_extended_entry */
    977#define CISS_REPORT_PHYS_DEV_FLAG_AIO_ENABLED	0x8
    978
    979struct report_phys_lun_8byte_wwid_list {
    980	struct report_lun_header header;
    981	struct report_phys_lun_8byte_wwid lun_entries[1];
    982};
    983
    984struct report_phys_lun_16byte_wwid_list {
    985	struct report_lun_header header;
    986	struct report_phys_lun_16byte_wwid lun_entries[1];
    987};
    988
    989struct raid_map_disk_data {
    990	u32	aio_handle;
    991	u8	xor_mult[2];
    992	u8	reserved[2];
    993};
    994
    995/* for flags field of RAID map */
    996#define RAID_MAP_ENCRYPTION_ENABLED	0x1
    997
    998struct raid_map {
    999	__le32	structure_size;		/* size of entire structure in bytes */
   1000	__le32	volume_blk_size;	/* bytes / block in the volume */
   1001	__le64	volume_blk_cnt;		/* logical blocks on the volume */
   1002	u8	phys_blk_shift;		/* shift factor to convert between */
   1003					/* units of logical blocks and */
   1004					/* physical disk blocks */
   1005	u8	parity_rotation_shift;	/* shift factor to convert between */
   1006					/* units of logical stripes and */
   1007					/* physical stripes */
   1008	__le16	strip_size;		/* blocks used on each disk / stripe */
   1009	__le64	disk_starting_blk;	/* first disk block used in volume */
   1010	__le64	disk_blk_cnt;		/* disk blocks used by volume / disk */
   1011	__le16	data_disks_per_row;	/* data disk entries / row in the map */
   1012	__le16	metadata_disks_per_row;	/* mirror/parity disk entries / row */
   1013					/* in the map */
   1014	__le16	row_cnt;		/* rows in each layout map */
   1015	__le16	layout_map_count;	/* layout maps (1 map per */
   1016					/* mirror parity group) */
   1017	__le16	flags;
   1018	__le16	data_encryption_key_index;
   1019	u8	reserved[16];
   1020	struct raid_map_disk_data disk_data[RAID_MAP_MAX_ENTRIES];
   1021};
   1022
   1023#pragma pack()
   1024
   1025struct pqi_scsi_dev_raid_map_data {
   1026	bool	is_write;
   1027	u8	raid_level;
   1028	u32	map_index;
   1029	u64	first_block;
   1030	u64	last_block;
   1031	u32	data_length;
   1032	u32	block_cnt;
   1033	u32	blocks_per_row;
   1034	u64	first_row;
   1035	u64	last_row;
   1036	u32	first_row_offset;
   1037	u32	last_row_offset;
   1038	u32	first_column;
   1039	u32	last_column;
   1040	u64	r5or6_first_row;
   1041	u64	r5or6_last_row;
   1042	u32	r5or6_first_row_offset;
   1043	u32	r5or6_last_row_offset;
   1044	u32	r5or6_first_column;
   1045	u32	r5or6_last_column;
   1046	u16	data_disks_per_row;
   1047	u32	total_disks_per_row;
   1048	u16	layout_map_count;
   1049	u32	stripesize;
   1050	u16	strip_size;
   1051	u32	first_group;
   1052	u32	last_group;
   1053	u32	map_row;
   1054	u32	aio_handle;
   1055	u64	disk_block;
   1056	u32	disk_block_cnt;
   1057	u8	cdb[16];
   1058	u8	cdb_length;
   1059
   1060	/* RAID 1 specific */
   1061#define NUM_RAID1_MAP_ENTRIES	3
   1062	u32	num_it_nexus_entries;
   1063	u32	it_nexus[NUM_RAID1_MAP_ENTRIES];
   1064
   1065	/* RAID 5 / RAID 6 specific */
   1066	u32	p_parity_it_nexus;	/* aio_handle */
   1067	u32	q_parity_it_nexus;	/* aio_handle */
   1068	u8	xor_mult;
   1069	u64	row;
   1070	u64	stripe_lba;
   1071	u32	p_index;
   1072	u32	q_index;
   1073};
   1074
   1075#define RAID_CTLR_LUNID		"\0\0\0\0\0\0\0\0"
   1076
   1077#define NUM_STREAMS_PER_LUN	8
   1078
   1079struct pqi_stream_data {
   1080	u64	next_lba;
   1081	u32	last_accessed;
   1082};
   1083
   1084struct pqi_scsi_dev {
   1085	int	devtype;		/* as reported by INQUIRY command */
   1086	u8	device_type;		/* as reported by */
   1087					/* BMIC_IDENTIFY_PHYSICAL_DEVICE */
   1088					/* only valid for devtype = TYPE_DISK */
   1089	int	bus;
   1090	int	target;
   1091	int	lun;
   1092	u8	scsi3addr[8];
   1093	u8	wwid[16];
   1094	u8	volume_id[16];
   1095	u8	is_physical_device : 1;
   1096	u8	is_external_raid_device : 1;
   1097	u8	is_expander_smp_device : 1;
   1098	u8	target_lun_valid : 1;
   1099	u8	device_gone : 1;
   1100	u8	new_device : 1;
   1101	u8	keep_device : 1;
   1102	u8	volume_offline : 1;
   1103	u8	rescan : 1;
   1104	u8	ignore_device : 1;
   1105	bool	aio_enabled;		/* only valid for physical disks */
   1106	bool	in_remove;
   1107	bool	device_offline;
   1108	u8	vendor[8];		/* bytes 8-15 of inquiry data */
   1109	u8	model[16];		/* bytes 16-31 of inquiry data */
   1110	u64	sas_address;
   1111	u8	raid_level;
   1112	u16	queue_depth;		/* max. queue_depth for this device */
   1113	u16	advertised_queue_depth;
   1114	u32	aio_handle;
   1115	u8	volume_status;
   1116	u8	active_path_index;
   1117	u8	path_map;
   1118	u8	bay;
   1119	u8	box_index;
   1120	u8	phys_box_on_bus;
   1121	u8	phy_connected_dev_type;
   1122	u8	box[8];
   1123	u16	phys_connector[8];
   1124	u8	phy_id;
   1125	u8	ncq_prio_enable;
   1126	u8	ncq_prio_support;
   1127	bool	raid_bypass_configured;	/* RAID bypass configured */
   1128	bool	raid_bypass_enabled;	/* RAID bypass enabled */
   1129	u32	next_bypass_group[RAID_MAP_MAX_DATA_DISKS_PER_ROW];
   1130	struct raid_map *raid_map;	/* RAID bypass map */
   1131	u32	max_transfer_encrypted;
   1132
   1133	struct pqi_sas_port *sas_port;
   1134	struct scsi_device *sdev;
   1135
   1136	struct list_head scsi_device_list_entry;
   1137	struct list_head new_device_list_entry;
   1138	struct list_head add_list_entry;
   1139	struct list_head delete_list_entry;
   1140
   1141	struct pqi_stream_data stream_data[NUM_STREAMS_PER_LUN];
   1142	atomic_t scsi_cmds_outstanding;
   1143	atomic_t raid_bypass_cnt;
   1144};
   1145
   1146/* VPD inquiry pages */
   1147#define CISS_VPD_LV_DEVICE_GEOMETRY	0xc1	/* vendor-specific page */
   1148#define CISS_VPD_LV_BYPASS_STATUS	0xc2	/* vendor-specific page */
   1149#define CISS_VPD_LV_STATUS		0xc3	/* vendor-specific page */
   1150
   1151#define VPD_PAGE	(1 << 8)
   1152
   1153#pragma pack(1)
   1154
   1155/* structure for CISS_VPD_LV_STATUS */
   1156struct ciss_vpd_logical_volume_status {
   1157	u8	peripheral_info;
   1158	u8	page_code;
   1159	u8	reserved;
   1160	u8	page_length;
   1161	u8	volume_status;
   1162	u8	reserved2[3];
   1163	__be32	flags;
   1164};
   1165
   1166#pragma pack()
   1167
   1168/* constants for volume_status field of ciss_vpd_logical_volume_status */
   1169#define CISS_LV_OK					0
   1170#define CISS_LV_FAILED					1
   1171#define CISS_LV_NOT_CONFIGURED				2
   1172#define CISS_LV_DEGRADED				3
   1173#define CISS_LV_READY_FOR_RECOVERY			4
   1174#define CISS_LV_UNDERGOING_RECOVERY			5
   1175#define CISS_LV_WRONG_PHYSICAL_DRIVE_REPLACED		6
   1176#define CISS_LV_PHYSICAL_DRIVE_CONNECTION_PROBLEM	7
   1177#define CISS_LV_HARDWARE_OVERHEATING			8
   1178#define CISS_LV_HARDWARE_HAS_OVERHEATED			9
   1179#define CISS_LV_UNDERGOING_EXPANSION			10
   1180#define CISS_LV_NOT_AVAILABLE				11
   1181#define CISS_LV_QUEUED_FOR_EXPANSION			12
   1182#define CISS_LV_DISABLED_SCSI_ID_CONFLICT		13
   1183#define CISS_LV_EJECTED					14
   1184#define CISS_LV_UNDERGOING_ERASE			15
   1185/* state 16 not used */
   1186#define CISS_LV_READY_FOR_PREDICTIVE_SPARE_REBUILD	17
   1187#define CISS_LV_UNDERGOING_RPI				18
   1188#define CISS_LV_PENDING_RPI				19
   1189#define CISS_LV_ENCRYPTED_NO_KEY			20
   1190/* state 21 not used */
   1191#define CISS_LV_UNDERGOING_ENCRYPTION			22
   1192#define CISS_LV_UNDERGOING_ENCRYPTION_REKEYING		23
   1193#define CISS_LV_ENCRYPTED_IN_NON_ENCRYPTED_CONTROLLER	24
   1194#define CISS_LV_PENDING_ENCRYPTION			25
   1195#define CISS_LV_PENDING_ENCRYPTION_REKEYING		26
   1196#define CISS_LV_NOT_SUPPORTED				27
   1197#define CISS_LV_STATUS_UNAVAILABLE			255
   1198
   1199/* constants for flags field of ciss_vpd_logical_volume_status */
   1200#define CISS_LV_FLAGS_NO_HOST_IO	0x1	/* volume not available for */
   1201						/* host I/O */
   1202
   1203/* for SAS hosts and SAS expanders */
   1204struct pqi_sas_node {
   1205	struct device *parent_dev;
   1206	struct list_head port_list_head;
   1207};
   1208
   1209struct pqi_sas_port {
   1210	struct list_head port_list_entry;
   1211	u64	sas_address;
   1212	struct pqi_scsi_dev *device;
   1213	struct sas_port *port;
   1214	int	next_phy_index;
   1215	struct list_head phy_list_head;
   1216	struct pqi_sas_node *parent_node;
   1217	struct sas_rphy *rphy;
   1218};
   1219
   1220struct pqi_sas_phy {
   1221	struct list_head phy_list_entry;
   1222	struct sas_phy *phy;
   1223	struct pqi_sas_port *parent_port;
   1224	bool	added_to_port;
   1225};
   1226
   1227struct pqi_io_request {
   1228	atomic_t	refcount;
   1229	u16		index;
   1230	void (*io_complete_callback)(struct pqi_io_request *io_request,
   1231		void *context);
   1232	void		*context;
   1233	u8		raid_bypass : 1;
   1234	int		status;
   1235	struct pqi_queue_group *queue_group;
   1236	struct scsi_cmnd *scmd;
   1237	void		*error_info;
   1238	struct pqi_sg_descriptor *sg_chain_buffer;
   1239	dma_addr_t	sg_chain_buffer_dma_handle;
   1240	void		*iu;
   1241	struct list_head request_list_entry;
   1242};
   1243
   1244#define PQI_NUM_SUPPORTED_EVENTS	7
   1245
   1246struct pqi_event {
   1247	bool	pending;
   1248	u8	event_type;
   1249	u16	event_id;
   1250	u32	additional_event_id;
   1251};
   1252
   1253#define PQI_RESERVED_IO_SLOTS_LUN_RESET			1
   1254#define PQI_RESERVED_IO_SLOTS_EVENT_ACK			PQI_NUM_SUPPORTED_EVENTS
   1255#define PQI_RESERVED_IO_SLOTS_SYNCHRONOUS_REQUESTS	3
   1256#define PQI_RESERVED_IO_SLOTS				\
   1257	(PQI_RESERVED_IO_SLOTS_LUN_RESET + PQI_RESERVED_IO_SLOTS_EVENT_ACK + \
   1258	PQI_RESERVED_IO_SLOTS_SYNCHRONOUS_REQUESTS)
   1259
   1260#define PQI_CTRL_PRODUCT_ID_GEN1	0
   1261#define PQI_CTRL_PRODUCT_ID_GEN2	7
   1262#define PQI_CTRL_PRODUCT_REVISION_A	0
   1263#define PQI_CTRL_PRODUCT_REVISION_B	1
   1264
   1265struct pqi_ctrl_info {
   1266	unsigned int	ctrl_id;
   1267	struct pci_dev	*pci_dev;
   1268	char		firmware_version[32];
   1269	char		serial_number[17];
   1270	char		model[17];
   1271	char		vendor[9];
   1272	u8		product_id;
   1273	u8		product_revision;
   1274	void __iomem	*iomem_base;
   1275	struct pqi_ctrl_registers __iomem *registers;
   1276	struct pqi_device_registers __iomem *pqi_registers;
   1277	u32		max_sg_entries;
   1278	u32		config_table_offset;
   1279	u32		config_table_length;
   1280	u16		max_inbound_queues;
   1281	u16		max_elements_per_iq;
   1282	u16		max_iq_element_length;
   1283	u16		max_outbound_queues;
   1284	u16		max_elements_per_oq;
   1285	u16		max_oq_element_length;
   1286	u32		max_transfer_size;
   1287	u32		max_outstanding_requests;
   1288	u32		max_io_slots;
   1289	unsigned int	scsi_ml_can_queue;
   1290	unsigned short	sg_tablesize;
   1291	unsigned int	max_sectors;
   1292	u32		error_buffer_length;
   1293	void		*error_buffer;
   1294	dma_addr_t	error_buffer_dma_handle;
   1295	size_t		sg_chain_buffer_length;
   1296	unsigned int	num_queue_groups;
   1297	u16		max_hw_queue_index;
   1298	u16		num_elements_per_iq;
   1299	u16		num_elements_per_oq;
   1300	u16		max_inbound_iu_length_per_firmware;
   1301	u16		max_inbound_iu_length;
   1302	unsigned int	max_sg_per_iu;
   1303	unsigned int	max_sg_per_r56_iu;
   1304	void		*admin_queue_memory_base;
   1305	u32		admin_queue_memory_length;
   1306	dma_addr_t	admin_queue_memory_base_dma_handle;
   1307	void		*queue_memory_base;
   1308	u32		queue_memory_length;
   1309	dma_addr_t	queue_memory_base_dma_handle;
   1310	struct pqi_admin_queues admin_queues;
   1311	struct pqi_queue_group queue_groups[PQI_MAX_QUEUE_GROUPS];
   1312	struct pqi_event_queue event_queue;
   1313	enum pqi_irq_mode irq_mode;
   1314	int		max_msix_vectors;
   1315	int		num_msix_vectors_enabled;
   1316	int		num_msix_vectors_initialized;
   1317	int		event_irq;
   1318	struct Scsi_Host *scsi_host;
   1319
   1320	struct mutex	scan_mutex;
   1321	struct mutex	lun_reset_mutex;
   1322	bool		controller_online;
   1323	bool		block_requests;
   1324	bool		scan_blocked;
   1325	u8		logical_volume_rescan_needed : 1;
   1326	u8		inbound_spanning_supported : 1;
   1327	u8		outbound_spanning_supported : 1;
   1328	u8		pqi_mode_enabled : 1;
   1329	u8		pqi_reset_quiesce_supported : 1;
   1330	u8		soft_reset_handshake_supported : 1;
   1331	u8		raid_iu_timeout_supported : 1;
   1332	u8		tmf_iu_timeout_supported : 1;
   1333	u8		firmware_triage_supported : 1;
   1334	u8		rpl_extended_format_4_5_supported : 1;
   1335	u8		enable_r1_writes : 1;
   1336	u8		enable_r5_writes : 1;
   1337	u8		enable_r6_writes : 1;
   1338	u8		lv_drive_type_mix_valid : 1;
   1339	u8		enable_stream_detection : 1;
   1340
   1341	u8		ciss_report_log_flags;
   1342	u32		max_transfer_encrypted_sas_sata;
   1343	u32		max_transfer_encrypted_nvme;
   1344	u32		max_write_raid_5_6;
   1345	u32		max_write_raid_1_10_2drive;
   1346	u32		max_write_raid_1_10_3drive;
   1347
   1348	struct list_head scsi_device_list;
   1349	spinlock_t	scsi_device_list_lock;
   1350
   1351	struct delayed_work rescan_work;
   1352	struct delayed_work update_time_work;
   1353
   1354	struct pqi_sas_node *sas_host;
   1355	u64		sas_address;
   1356
   1357	struct pqi_io_request *io_request_pool;
   1358	u16		next_io_request_slot;
   1359
   1360	struct pqi_event events[PQI_NUM_SUPPORTED_EVENTS];
   1361	struct work_struct event_work;
   1362
   1363	atomic_t	num_interrupts;
   1364	int		previous_num_interrupts;
   1365	u32		previous_heartbeat_count;
   1366	__le32 __iomem	*heartbeat_counter;
   1367	u8 __iomem	*soft_reset_status;
   1368	struct timer_list heartbeat_timer;
   1369	struct work_struct ctrl_offline_work;
   1370
   1371	struct semaphore sync_request_sem;
   1372	atomic_t	num_busy_threads;
   1373	atomic_t	num_blocked_threads;
   1374	wait_queue_head_t block_requests_wait;
   1375
   1376	struct mutex	ofa_mutex;
   1377	struct pqi_ofa_memory *pqi_ofa_mem_virt_addr;
   1378	dma_addr_t	pqi_ofa_mem_dma_handle;
   1379	void		**pqi_ofa_chunk_virt_addr;
   1380	struct work_struct ofa_memory_alloc_work;
   1381	struct work_struct ofa_quiesce_work;
   1382	u32		ofa_bytes_requested;
   1383	u16		ofa_cancel_reason;
   1384};
   1385
   1386enum pqi_ctrl_mode {
   1387	SIS_MODE = 0,
   1388	PQI_MODE
   1389};
   1390
   1391/*
   1392 * assume worst case: SATA queue depth of 31 minus 4 internal firmware commands
   1393 */
   1394#define PQI_PHYSICAL_DISK_DEFAULT_MAX_QUEUE_DEPTH	27
   1395
   1396/* CISS commands */
   1397#define CISS_READ		0xc0
   1398#define CISS_REPORT_LOG		0xc2	/* Report Logical LUNs */
   1399#define CISS_REPORT_PHYS	0xc3	/* Report Physical LUNs */
   1400#define CISS_GET_RAID_MAP	0xc8
   1401
   1402/* BMIC commands */
   1403#define BMIC_IDENTIFY_CONTROLLER		0x11
   1404#define BMIC_IDENTIFY_PHYSICAL_DEVICE		0x15
   1405#define BMIC_READ				0x26
   1406#define BMIC_WRITE				0x27
   1407#define BMIC_SENSE_FEATURE			0x61
   1408#define BMIC_SENSE_CONTROLLER_PARAMETERS	0x64
   1409#define BMIC_SENSE_SUBSYSTEM_INFORMATION	0x66
   1410#define BMIC_CSMI_PASSTHRU			0x68
   1411#define BMIC_WRITE_HOST_WELLNESS		0xa5
   1412#define BMIC_FLUSH_CACHE			0xc2
   1413#define BMIC_SET_DIAG_OPTIONS			0xf4
   1414#define BMIC_SENSE_DIAG_OPTIONS			0xf5
   1415
   1416#define CSMI_CC_SAS_SMP_PASSTHRU		0x17
   1417
   1418#define SA_FLUSH_CACHE				0x1
   1419
   1420#define MASKED_DEVICE(lunid)			((lunid)[3] & 0xc0)
   1421#define CISS_GET_LEVEL_2_BUS(lunid)		((lunid)[7] & 0x3f)
   1422#define CISS_GET_LEVEL_2_TARGET(lunid)		((lunid)[6])
   1423#define CISS_GET_DRIVE_NUMBER(lunid)		\
   1424	(((CISS_GET_LEVEL_2_BUS((lunid)) - 1) << 8) + \
   1425	CISS_GET_LEVEL_2_TARGET((lunid)))
   1426
   1427#define LV_GET_DRIVE_TYPE_MIX(lunid)		((lunid)[6])
   1428
   1429#define LV_DRIVE_TYPE_MIX_UNKNOWN		0
   1430#define LV_DRIVE_TYPE_MIX_NO_RESTRICTION	1
   1431#define LV_DRIVE_TYPE_MIX_SAS_HDD_ONLY		2
   1432#define LV_DRIVE_TYPE_MIX_SATA_HDD_ONLY		3
   1433#define LV_DRIVE_TYPE_MIX_SAS_OR_SATA_SSD_ONLY	4
   1434#define LV_DRIVE_TYPE_MIX_SAS_SSD_ONLY		5
   1435#define LV_DRIVE_TYPE_MIX_SATA_SSD_ONLY		6
   1436#define LV_DRIVE_TYPE_MIX_SAS_ONLY		7
   1437#define LV_DRIVE_TYPE_MIX_SATA_ONLY		8
   1438#define LV_DRIVE_TYPE_MIX_NVME_ONLY		9
   1439
   1440#define NO_TIMEOUT		((unsigned long) -1)
   1441
   1442#pragma pack(1)
   1443
   1444struct bmic_identify_controller {
   1445	u8	configured_logical_drive_count;
   1446	__le32	configuration_signature;
   1447	u8	firmware_version_short[4];
   1448	u8	reserved[145];
   1449	__le16	extended_logical_unit_count;
   1450	u8	reserved1[34];
   1451	__le16	firmware_build_number;
   1452	u8	reserved2[8];
   1453	u8	vendor_id[8];
   1454	u8	product_id[16];
   1455	u8	reserved3[62];
   1456	__le32	extra_controller_flags;
   1457	u8	reserved4[2];
   1458	u8	controller_mode;
   1459	u8	spare_part_number[32];
   1460	u8	firmware_version_long[32];
   1461};
   1462
   1463/* constants for extra_controller_flags field of bmic_identify_controller */
   1464#define BMIC_IDENTIFY_EXTRA_FLAGS_LONG_FW_VERSION_SUPPORTED	0x20000000
   1465
   1466struct bmic_sense_subsystem_info {
   1467	u8	reserved[44];
   1468	u8	ctrl_serial_number[16];
   1469};
   1470
   1471/* constants for device_type field */
   1472#define SA_DEVICE_TYPE_SATA		0x1
   1473#define SA_DEVICE_TYPE_SAS		0x2
   1474#define SA_DEVICE_TYPE_EXPANDER_SMP	0x5
   1475#define SA_DEVICE_TYPE_SES		0x6
   1476#define SA_DEVICE_TYPE_CONTROLLER	0x7
   1477#define SA_DEVICE_TYPE_NVME		0x9
   1478
   1479struct bmic_identify_physical_device {
   1480	u8	scsi_bus;		/* SCSI Bus number on controller */
   1481	u8	scsi_id;		/* SCSI ID on this bus */
   1482	__le16	block_size;		/* sector size in bytes */
   1483	__le32	total_blocks;		/* number for sectors on drive */
   1484	__le32	reserved_blocks;	/* controller reserved (RIS) */
   1485	u8	model[40];		/* Physical Drive Model */
   1486	u8	serial_number[40];	/* Drive Serial Number */
   1487	u8	firmware_revision[8];	/* drive firmware revision */
   1488	u8	scsi_inquiry_bits;	/* inquiry byte 7 bits */
   1489	u8	compaq_drive_stamp;	/* 0 means drive not stamped */
   1490	u8	last_failure_reason;
   1491	u8	flags;
   1492	u8	more_flags;
   1493	u8	scsi_lun;		/* SCSI LUN for phys drive */
   1494	u8	yet_more_flags;
   1495	u8	even_more_flags;
   1496	__le32	spi_speed_rules;
   1497	u8	phys_connector[2];	/* connector number on controller */
   1498	u8	phys_box_on_bus;	/* phys enclosure this drive resides */
   1499	u8	phys_bay_in_box;	/* phys drv bay this drive resides */
   1500	__le32	rpm;			/* drive rotational speed in RPM */
   1501	u8	device_type;		/* type of drive */
   1502	u8	sata_version;		/* only valid when device_type = */
   1503					/* SA_DEVICE_TYPE_SATA */
   1504	__le64	big_total_block_count;
   1505	__le64	ris_starting_lba;
   1506	__le32	ris_size;
   1507	u8	wwid[20];
   1508	u8	controller_phy_map[32];
   1509	__le16	phy_count;
   1510	u8	phy_connected_dev_type[256];
   1511	u8	phy_to_drive_bay_num[256];
   1512	__le16	phy_to_attached_dev_index[256];
   1513	u8	box_index;
   1514	u8	reserved;
   1515	__le16	extra_physical_drive_flags;
   1516	u8	negotiated_link_rate[256];
   1517	u8	phy_to_phy_map[256];
   1518	u8	redundant_path_present_map;
   1519	u8	redundant_path_failure_map;
   1520	u8	active_path_number;
   1521	__le16	alternate_paths_phys_connector[8];
   1522	u8	alternate_paths_phys_box_on_port[8];
   1523	u8	multi_lun_device_lun_count;
   1524	u8	minimum_good_fw_revision[8];
   1525	u8	unique_inquiry_bytes[20];
   1526	u8	current_temperature_degrees;
   1527	u8	temperature_threshold_degrees;
   1528	u8	max_temperature_degrees;
   1529	u8	logical_blocks_per_phys_block_exp;
   1530	__le16	current_queue_depth_limit;
   1531	u8	switch_name[10];
   1532	__le16	switch_port;
   1533	u8	alternate_paths_switch_name[40];
   1534	u8	alternate_paths_switch_port[8];
   1535	__le16	power_on_hours;
   1536	__le16	percent_endurance_used;
   1537	u8	drive_authentication;
   1538	u8	smart_carrier_authentication;
   1539	u8	smart_carrier_app_fw_version;
   1540	u8	smart_carrier_bootloader_fw_version;
   1541	u8	sanitize_flags;
   1542	u8	encryption_key_flags;
   1543	u8	encryption_key_name[64];
   1544	__le32	misc_drive_flags;
   1545	__le16	dek_index;
   1546	__le16	hba_drive_encryption_flags;
   1547	__le16	max_overwrite_time;
   1548	__le16	max_block_erase_time;
   1549	__le16	max_crypto_erase_time;
   1550	u8	connector_info[5];
   1551	u8	connector_name[8][8];
   1552	u8	page_83_identifier[16];
   1553	u8	maximum_link_rate[256];
   1554	u8	negotiated_physical_link_rate[256];
   1555	u8	box_connector_name[8];
   1556	u8	padding_to_multiple_of_512[9];
   1557};
   1558
   1559#define BMIC_SENSE_FEATURE_IO_PAGE		0x8
   1560#define BMIC_SENSE_FEATURE_IO_PAGE_AIO_SUBPAGE	0x2
   1561
   1562struct bmic_sense_feature_buffer_header {
   1563	u8	page_code;
   1564	u8	subpage_code;
   1565	__le16	buffer_length;
   1566};
   1567
   1568struct bmic_sense_feature_page_header {
   1569	u8	page_code;
   1570	u8	subpage_code;
   1571	__le16	page_length;
   1572};
   1573
   1574struct bmic_sense_feature_io_page_aio_subpage {
   1575	struct bmic_sense_feature_page_header header;
   1576	u8	firmware_read_support;
   1577	u8	driver_read_support;
   1578	u8	firmware_write_support;
   1579	u8	driver_write_support;
   1580	__le16	max_transfer_encrypted_sas_sata;
   1581	__le16	max_transfer_encrypted_nvme;
   1582	__le16	max_write_raid_5_6;
   1583	__le16	max_write_raid_1_10_2drive;
   1584	__le16	max_write_raid_1_10_3drive;
   1585};
   1586
   1587struct bmic_smp_request {
   1588	u8	frame_type;
   1589	u8	function;
   1590	u8	allocated_response_length;
   1591	u8	request_length;
   1592	u8	additional_request_bytes[1016];
   1593};
   1594
   1595struct  bmic_smp_response {
   1596	u8	frame_type;
   1597	u8	function;
   1598	u8	function_result;
   1599	u8	response_length;
   1600	u8	additional_response_bytes[1016];
   1601};
   1602
   1603struct bmic_csmi_ioctl_header {
   1604	__le32	header_length;
   1605	u8	signature[8];
   1606	__le32	timeout;
   1607	__le32	control_code;
   1608	__le32	return_code;
   1609	__le32	length;
   1610};
   1611
   1612struct bmic_csmi_smp_passthru {
   1613	u8	phy_identifier;
   1614	u8	port_identifier;
   1615	u8	connection_rate;
   1616	u8	reserved;
   1617	__be64	destination_sas_address;
   1618	__le32	request_length;
   1619	struct bmic_smp_request request;
   1620	u8	connection_status;
   1621	u8	reserved1[3];
   1622	__le32	response_length;
   1623	struct bmic_smp_response response;
   1624};
   1625
   1626struct bmic_csmi_smp_passthru_buffer {
   1627	struct bmic_csmi_ioctl_header ioctl_header;
   1628	struct bmic_csmi_smp_passthru parameters;
   1629};
   1630
   1631struct bmic_flush_cache {
   1632	u8	disable_flag;
   1633	u8	system_power_action;
   1634	u8	ndu_flush;
   1635	u8	shutdown_event;
   1636	u8	reserved[28];
   1637};
   1638
   1639/* for shutdown_event member of struct bmic_flush_cache */
   1640enum bmic_flush_cache_shutdown_event {
   1641	NONE_CACHE_FLUSH_ONLY = 0,
   1642	SHUTDOWN = 1,
   1643	HIBERNATE = 2,
   1644	SUSPEND = 3,
   1645	RESTART = 4
   1646};
   1647
   1648struct bmic_diag_options {
   1649	__le32 options;
   1650};
   1651
   1652#pragma pack()
   1653
   1654static inline struct pqi_ctrl_info *shost_to_hba(struct Scsi_Host *shost)
   1655{
   1656	void *hostdata = shost_priv(shost);
   1657
   1658	return *((struct pqi_ctrl_info **)hostdata);
   1659}
   1660
   1661void pqi_sas_smp_handler(struct bsg_job *job, struct Scsi_Host *shost,
   1662	struct sas_rphy *rphy);
   1663
   1664int pqi_add_sas_host(struct Scsi_Host *shost, struct pqi_ctrl_info *ctrl_info);
   1665void pqi_delete_sas_host(struct pqi_ctrl_info *ctrl_info);
   1666int pqi_add_sas_device(struct pqi_sas_node *pqi_sas_node,
   1667	struct pqi_scsi_dev *device);
   1668void pqi_remove_sas_device(struct pqi_scsi_dev *device);
   1669struct pqi_scsi_dev *pqi_find_device_by_sas_rphy(
   1670	struct pqi_ctrl_info *ctrl_info, struct sas_rphy *rphy);
   1671void pqi_prep_for_scsi_done(struct scsi_cmnd *scmd);
   1672int pqi_csmi_smp_passthru(struct pqi_ctrl_info *ctrl_info,
   1673	struct bmic_csmi_smp_passthru_buffer *buffer, size_t buffer_length,
   1674	struct pqi_raid_error_info *error_info);
   1675
   1676extern struct sas_function_template pqi_sas_transport_functions;
   1677
   1678#endif /* _SMARTPQI_H */