/*  linux/drivers/scsi/esas2r/atioctl.h
 *      ATTO IOCTL Handling
 *
 *  Copyright (c) 2001-2013 ATTO Technology, Inc.
 *  (mailto:linuxdrivers@attotech.com)
 */
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
/*
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; version 2 of the License.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  NO WARRANTY
 *  THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
 *  CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
 *  LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
 *  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
 *  solely responsible for determining the appropriateness of using and
 *  distributing the Program and assumes all risks associated with its
 *  exercise of rights under this Agreement, including but not limited to
 *  the risks and costs of program errors, damage to or loss of data,
 *  programs or equipment, and unavailability or interruption of operations.
 *
 *  DISCLAIMER OF LIABILITY
 *  NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
 *  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 *  DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
 *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 *  USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
 *  HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/

#include "atvda.h"

#ifndef ATIOCTL_H
#define ATIOCTL_H

#define EXPRESS_IOCTL_SIGNATURE        "Express"
#define EXPRESS_IOCTL_SIGNATURE_SIZE   8

/* structure definitions for IOCTls */

struct __packed atto_express_ioctl_header {
	u8 signature[EXPRESS_IOCTL_SIGNATURE_SIZE];
	u8 return_code;

#define IOCTL_SUCCESS               0
#define IOCTL_ERR_INVCMD          101
#define IOCTL_INIT_FAILED         102
#define IOCTL_NOT_IMPLEMENTED     103
#define IOCTL_BAD_CHANNEL         104
#define IOCTL_TARGET_OVERRUN      105
#define IOCTL_TARGET_NOT_ENABLED  106
#define IOCTL_BAD_FLASH_IMGTYPE   107
#define IOCTL_OUT_OF_RESOURCES    108
#define IOCTL_GENERAL_ERROR       109
#define IOCTL_INVALID_PARAM       110

	u8 channel;
	u8 retries;
	u8 pad[5];
};

/*
 * NOTE - if channel == 0xFF, the request is
 * handled on the adapter it came in on.
 */
#define MAX_NODE_NAMES  256

struct __packed atto_firmware_rw_request {
	u8 function;
	#define FUNC_FW_DOWNLOAD        0x09
	#define FUNC_FW_UPLOAD          0x12

	u8 img_type;
	#define FW_IMG_FW               0x01
	#define FW_IMG_BIOS             0x02
	#define FW_IMG_NVR              0x03
	#define FW_IMG_RAW              0x04
	#define FW_IMG_FM_API           0x05
	#define FW_IMG_FS_API           0x06

	u8 pad[2];
	u32 img_offset;
	u32 img_size;
	u8 image[0x80000];
};

struct __packed atto_param_rw_request {
	u16 code;
	char data_buffer[512];
};

#define MAX_CHANNEL 256

struct __packed atto_channel_list {
	u32 num_channels;
	u8 channel[MAX_CHANNEL];
};

struct __packed atto_channel_info {
	u8 major_rev;
	u8 minor_rev;
	u8 IRQ;
	u8 revision_id;
	u8 pci_bus;
	u8 pci_dev_func;
	u8 core_rev;
	u8 host_no;
	u16 device_id;
	u16 vendor_id;
	u16 ven_dev_id;
	u8 pad[3];
	u32 hbaapi_rev;
};

/*
 * CSMI control codes
 * class independent
 */
#define CSMI_CC_GET_DRVR_INFO        1
#define CSMI_CC_GET_CNTLR_CFG        2
#define CSMI_CC_GET_CNTLR_STS        3
#define CSMI_CC_FW_DOWNLOAD          4

/* RAID class */
#define CSMI_CC_GET_RAID_INFO        10
#define CSMI_CC_GET_RAID_CFG         11

/* HBA class */
#define CSMI_CC_GET_PHY_INFO         20
#define CSMI_CC_SET_PHY_INFO         21
#define CSMI_CC_GET_LINK_ERRORS      22
#define CSMI_CC_SMP_PASSTHRU         23
#define CSMI_CC_SSP_PASSTHRU         24
#define CSMI_CC_STP_PASSTHRU         25
#define CSMI_CC_GET_SATA_SIG         26
#define CSMI_CC_GET_SCSI_ADDR        27
#define CSMI_CC_GET_DEV_ADDR         28
#define CSMI_CC_TASK_MGT             29
#define CSMI_CC_GET_CONN_INFO        30

/* PHY class */
#define CSMI_CC_PHY_CTRL             60

/*
 * CSMI status codes
 * class independent
 */
#define CSMI_STS_SUCCESS             0
#define CSMI_STS_FAILED              1
#define CSMI_STS_BAD_CTRL_CODE       2
#define CSMI_STS_INV_PARAM           3
#define CSMI_STS_WRITE_ATTEMPTED     4

/* RAID class */
#define CSMI_STS_INV_RAID_SET        1000

/* HBA class */
#define CSMI_STS_PHY_CHANGED         CSMI_STS_SUCCESS
#define CSMI_STS_PHY_UNCHANGEABLE    2000
#define CSMI_STS_INV_LINK_RATE       2001
#define CSMI_STS_INV_PHY             2002
#define CSMI_STS_INV_PHY_FOR_PORT    2003
#define CSMI_STS_PHY_UNSELECTABLE    2004
#define CSMI_STS_SELECT_PHY_OR_PORT  2005
#define CSMI_STS_INV_PORT            2006
#define CSMI_STS_PORT_UNSELECTABLE   2007
#define CSMI_STS_CONNECTION_FAILED   2008
#define CSMI_STS_NO_SATA_DEV         2009
#define CSMI_STS_NO_SATA_SIGNATURE   2010
#define CSMI_STS_SCSI_EMULATION      2011
#define CSMI_STS_NOT_AN_END_DEV      2012
#define CSMI_STS_NO_SCSI_ADDR        2013
#define CSMI_STS_NO_DEV_ADDR         2014

/* CSMI class independent structures */
struct atto_csmi_get_driver_info {
	char name[81];
	char description[81];
	u16 major_rev;
	u16 minor_rev;
	u16 build_rev;
	u16 release_rev;
	u16 csmi_major_rev;
	u16 csmi_minor_rev;
	#define CSMI_MAJOR_REV_0_81      0
	#define CSMI_MINOR_REV_0_81      81

	#define CSMI_MAJOR_REV           CSMI_MAJOR_REV_0_81
	#define CSMI_MINOR_REV           CSMI_MINOR_REV_0_81
};

struct atto_csmi_get_pci_bus_addr {
	u8 bus_num;
	u8 device_num;
	u8 function_num;
	u8 reserved;
};

struct atto_csmi_get_cntlr_cfg {
	u32 base_io_addr;

	struct {
		u32 base_memaddr_lo;
		u32 base_memaddr_hi;
	};

	u32 board_id;
	u16 slot_num;
	#define CSMI_SLOT_NUM_UNKNOWN    0xFFFF

	u8 cntlr_class;
	#define CSMI_CNTLR_CLASS_HBA     5

	u8 io_bus_type;
	#define CSMI_BUS_TYPE_PCI        3
	#define CSMI_BUS_TYPE_PCMCIA     4

	union {
		struct atto_csmi_get_pci_bus_addr pci_addr;
		u8 reserved[32];
	};

	char serial_num[81];
	u16 major_rev;
	u16 minor_rev;
	u16 build_rev;
	u16 release_rev;
	u16 bios_major_rev;
	u16 bios_minor_rev;
	u16 bios_build_rev;
	u16 bios_release_rev;
	u32 cntlr_flags;
	#define CSMI_CNTLRF_SAS_HBA      0x00000001
	#define CSMI_CNTLRF_SAS_RAID     0x00000002
	#define CSMI_CNTLRF_SATA_HBA     0x00000004
	#define CSMI_CNTLRF_SATA_RAID    0x00000008
	#define CSMI_CNTLRF_FWD_SUPPORT  0x00010000
	#define CSMI_CNTLRF_FWD_ONLINE   0x00020000
	#define CSMI_CNTLRF_FWD_SRESET   0x00040000
	#define CSMI_CNTLRF_FWD_HRESET   0x00080000
	#define CSMI_CNTLRF_FWD_RROM     0x00100000

	u16 rrom_major_rev;
	u16 rrom_minor_rev;
	u16 rrom_build_rev;
	u16 rrom_release_rev;
	u16 rrom_biosmajor_rev;
	u16 rrom_biosminor_rev;
	u16 rrom_biosbuild_rev;
	u16 rrom_biosrelease_rev;
	u8 reserved2[7];
};

struct atto_csmi_get_cntlr_sts {
	u32 status;
	#define CSMI_CNTLR_STS_GOOD          1
	#define CSMI_CNTLR_STS_FAILED        2
	#define CSMI_CNTLR_STS_OFFLINE       3
	#define CSMI_CNTLR_STS_POWEROFF      4

	u32 offline_reason;
	#define CSMI_OFFLINE_NO_REASON       0
	#define CSMI_OFFLINE_INITIALIZING    1
	#define CSMI_OFFLINE_BUS_DEGRADED    2
	#define CSMI_OFFLINE_BUS_FAILURE     3

	u8 reserved[28];
};

struct atto_csmi_fw_download {
	u32 buffer_len;
	u32 download_flags;
	#define CSMI_FWDF_VALIDATE       0x00000001
	#define CSMI_FWDF_SOFT_RESET     0x00000002
	#define CSMI_FWDF_HARD_RESET     0x00000004

	u8 reserved[32];
	u16 status;
	#define CSMI_FWD_STS_SUCCESS     0
	#define CSMI_FWD_STS_FAILED      1
	#define CSMI_FWD_STS_USING_RROM  2
	#define CSMI_FWD_STS_REJECT      3
	#define CSMI_FWD_STS_DOWNREV     4

	u16 severity;
	#define CSMI_FWD_SEV_INFO        0
	#define CSMI_FWD_SEV_WARNING     1
	#define CSMI_FWD_SEV_ERROR       2
	#define CSMI_FWD_SEV_FATAL       3

};

/* CSMI RAID class structures */
struct atto_csmi_get_raid_info {
	u32 num_raid_sets;
	u32 max_drivesper_set;
	u8 reserved[92];
};

struct atto_csmi_raid_drives {
	char model[40];
	char firmware[8];
	char serial_num[40];
	u8 sas_addr[8];
	u8 lun[8];
	u8 drive_sts;
	#define CSMI_DRV_STS_OK          0
	#define CSMI_DRV_STS_REBUILDING  1
	#define CSMI_DRV_STS_FAILED      2
	#define CSMI_DRV_STS_DEGRADED    3

	u8 drive_usage;
	#define CSMI_DRV_USE_NOT_USED    0
	#define CSMI_DRV_USE_MEMBER      1
	#define CSMI_DRV_USE_SPARE       2

	u8 reserved[30]; /* spec says 22 */
};

struct atto_csmi_get_raid_cfg {
	u32 raid_set_index;
	u32 capacity;
	u32 stripe_size;
	u8 raid_type;
	u8 status;
	u8 information;
	u8 drive_cnt;
	u8 reserved[20];

	struct atto_csmi_raid_drives drives[1];
};

/* CSMI HBA class structures */
struct atto_csmi_phy_entity {
	u8 ident_frame[0x1C];
	u8 port_id;
	u8 neg_link_rate;
	u8 min_link_rate;
	u8 max_link_rate;
	u8 phy_change_cnt;
	u8 auto_discover;
	#define CSMI_DISC_NOT_SUPPORTED  0x00
	#define CSMI_DISC_NOT_STARTED    0x01
	#define CSMI_DISC_IN_PROGRESS    0x02
	#define CSMI_DISC_COMPLETE       0x03
	#define CSMI_DISC_ERROR          0x04

	u8 reserved[2];
	u8 attach_ident_frame[0x1C];
};

struct atto_csmi_get_phy_info {
	u8 number_of_phys;
	u8 reserved[3];
	struct atto_csmi_phy_entity
		phy[32];
};

struct atto_csmi_set_phy_info {
	u8 phy_id;
	u8 neg_link_rate;
	#define CSMI_NEG_RATE_NEGOTIATE  0x00
	#define CSMI_NEG_RATE_PHY_DIS    0x01

	u8 prog_minlink_rate;
	u8 prog_maxlink_rate;
	u8 signal_class;
	#define CSMI_SIG_CLASS_UNKNOWN   0x00
	#define CSMI_SIG_CLASS_DIRECT    0x01
	#define CSMI_SIG_CLASS_SERVER    0x02
	#define CSMI_SIG_CLASS_ENCLOSURE 0x03

	u8 reserved[3];
};

struct atto_csmi_get_link_errors {
	u8 phy_id;
	u8 reset_cnts;
	#define CSMI_RESET_CNTS_NO       0x00
	#define CSMI_RESET_CNTS_YES      0x01

	u8 reserved[2];
	u32 inv_dw_cnt;
	u32 disp_err_cnt;
	u32 loss_ofdw_sync_cnt;
	u32 phy_reseterr_cnt;

	/*
	 * The following field has been added by ATTO for ease of
	 * implementation of additional statistics.  Drivers must validate
	 * the length of the IOCTL payload prior to filling them in so CSMI
	 * complaint applications function correctly.
	 */

	u32 crc_err_cnt;
};

struct atto_csmi_smp_passthru {
	u8 phy_id;
	u8 port_id;
	u8 conn_rate;
	u8 reserved;
	u8 dest_sas_addr[8];
	u32 req_len;
	u8 smp_req[1020];
	u8 conn_sts;
	u8 reserved2[3];
	u32 rsp_len;
	u8 smp_rsp[1020];
};

struct atto_csmi_ssp_passthru_sts {
	u8 conn_sts;
	u8 reserved[3];
	u8 data_present;
	u8 status;
	u16 rsp_length;
	u8 rsp[256];
	u32 data_bytes;
};

struct atto_csmi_ssp_passthru {
	u8 phy_id;
	u8 port_id;
	u8 conn_rate;
	u8 reserved;
	u8 dest_sas_addr[8];
	u8 lun[8];
	u8 cdb_len;
	u8 add_cdb_len;
	u8 reserved2[2];
	u8 cdb[16];
	u32 flags;
	#define CSMI_SSPF_DD_READ        0x00000001
	#define CSMI_SSPF_DD_WRITE       0x00000002
	#define CSMI_SSPF_DD_UNSPECIFIED 0x00000004
	#define CSMI_SSPF_TA_SIMPLE      0x00000000
	#define CSMI_SSPF_TA_HEAD_OF_Q   0x00000010
	#define CSMI_SSPF_TA_ORDERED     0x00000020
	#define CSMI_SSPF_TA_ACA         0x00000040

	u8 add_cdb[24];
	u32 data_len;

	struct atto_csmi_ssp_passthru_sts sts;
};

struct atto_csmi_stp_passthru_sts {
	u8 conn_sts;
	u8 reserved[3];
	u8 sts_fis[20];
	u32 scr[16];
	u32 data_bytes;
};

struct atto_csmi_stp_passthru {
	u8 phy_id;
	u8 port_id;
	u8 conn_rate;
	u8 reserved;
	u8 dest_sas_addr[8];
	u8 reserved2[4];
	u8 command_fis[20];
	u32 flags;
	#define CSMI_STPF_DD_READ        0x00000001
	#define CSMI_STPF_DD_WRITE       0x00000002
	#define CSMI_STPF_DD_UNSPECIFIED 0x00000004
	#define CSMI_STPF_PIO            0x00000010
	#define CSMI_STPF_DMA            0x00000020
	#define CSMI_STPF_PACKET         0x00000040
	#define CSMI_STPF_DMA_QUEUED     0x00000080
	#define CSMI_STPF_EXECUTE_DIAG   0x00000100
	#define CSMI_STPF_RESET_DEVICE   0x00000200

	u32 data_len;

	struct atto_csmi_stp_passthru_sts sts;
};

struct atto_csmi_get_sata_sig {
	u8 phy_id;
	u8 reserved[3];
	u8 reg_dth_fis[20];
};

struct atto_csmi_get_scsi_addr {
	u8 sas_addr[8];
	u8 sas_lun[8];
	u8 host_index;
	u8 path_id;
	u8 target_id;
	u8 lun;
};

struct atto_csmi_get_dev_addr {
	u8 host_index;
	u8 path_id;
	u8 target_id;
	u8 lun;
	u8 sas_addr[8];
	u8 sas_lun[8];
};

struct atto_csmi_task_mgmt {
	u8 host_index;
	u8 path_id;
	u8 target_id;
	u8 lun;
	u32 flags;
	#define CSMI_TMF_TASK_IU         0x00000001
	#define CSMI_TMF_HARD_RST        0x00000002
	#define CSMI_TMF_SUPPRESS_RSLT   0x00000004

	u32 queue_tag;
	u32 reserved;
	u8 task_mgt_func;
	u8 reserved2[7];
	u32 information;
	#define CSMI_TM_INFO_TEST        1
	#define CSMI_TM_INFO_EXCEEDED    2
	#define CSMI_TM_INFO_DEMAND      3
	#define CSMI_TM_INFO_TRIGGER     4

	struct atto_csmi_ssp_passthru_sts sts;

};

struct atto_csmi_get_conn_info {
	u32 pinout;
	#define CSMI_CON_UNKNOWN         0x00000001
	#define CSMI_CON_SFF_8482        0x00000002
	#define CSMI_CON_SFF_8470_LANE_1 0x00000100
	#define CSMI_CON_SFF_8470_LANE_2 0x00000200
	#define CSMI_CON_SFF_8470_LANE_3 0x00000400
	#define CSMI_CON_SFF_8470_LANE_4 0x00000800
	#define CSMI_CON_SFF_8484_LANE_1 0x00010000
	#define CSMI_CON_SFF_8484_LANE_2 0x00020000
	#define CSMI_CON_SFF_8484_LANE_3 0x00040000
	#define CSMI_CON_SFF_8484_LANE_4 0x00080000

	u8 connector[16];
	u8 location;
	#define CSMI_CON_INTERNAL        0x02
	#define CSMI_CON_EXTERNAL        0x04
	#define CSMI_CON_SWITCHABLE      0x08
	#define CSMI_CON_AUTO            0x10

	u8 reserved[15];
};

/* CSMI PHY class structures */
struct atto_csmi_character {
	u8 type_flags;
	#define CSMI_CTF_POS_DISP        0x01
	#define CSMI_CTF_NEG_DISP        0x02
	#define CSMI_CTF_CTRL_CHAR       0x04

	u8 value;
};

struct atto_csmi_pc_ctrl {
	u8 type;
	#define CSMI_PC_TYPE_UNDEFINED   0x00
	#define CSMI_PC_TYPE_SATA        0x01
	#define CSMI_PC_TYPE_SAS         0x02
	u8 rate;
	u8 reserved[6];
	u32 vendor_unique[8];
	u32 tx_flags;
	#define CSMI_PC_TXF_PREEMP_DIS   0x00000001

	signed char tx_amplitude;
	signed char tx_preemphasis;
	signed char tx_slew_rate;
	signed char tx_reserved[13];
	u8 tx_vendor_unique[64];
	u32 rx_flags;
	#define CSMI_PC_RXF_EQ_DIS       0x00000001

	signed char rx_threshold;
	signed char rx_equalization_gain;
	signed char rx_reserved[14];
	u8 rx_vendor_unique[64];
	u32 pattern_flags;
	#define CSMI_PC_PATF_FIXED       0x00000001
	#define CSMI_PC_PATF_DIS_SCR     0x00000002
	#define CSMI_PC_PATF_DIS_ALIGN   0x00000004
	#define CSMI_PC_PATF_DIS_SSC     0x00000008

	u8 fixed_pattern;
	#define CSMI_PC_FP_CJPAT         0x00000001
	#define CSMI_PC_FP_ALIGN         0x00000002

	u8 user_pattern_len;
	u8 pattern_reserved[6];

	struct atto_csmi_character user_pattern_buffer[16];
};

struct atto_csmi_phy_ctrl {
	u32 function;
	#define CSMI_PC_FUNC_GET_SETUP   0x00000100

	u8 phy_id;
	u16 len_of_cntl;
	u8 num_of_cntls;
	u8 reserved[4];
	u32 link_flags;
	#define CSMI_PHY_ACTIVATE_CTRL   0x00000001
	#define CSMI_PHY_UPD_SPINUP_RATE 0x00000002
	#define CSMI_PHY_AUTO_COMWAKE    0x00000004

	u8 spinup_rate;
	u8 link_reserved[7];
	u32 vendor_unique[8];

	struct atto_csmi_pc_ctrl control[1];
};

union atto_ioctl_csmi {
	struct atto_csmi_get_driver_info drvr_info;
	struct atto_csmi_get_cntlr_cfg cntlr_cfg;
	struct atto_csmi_get_cntlr_sts cntlr_sts;
	struct atto_csmi_fw_download fw_dwnld;
	struct atto_csmi_get_raid_info raid_info;
	struct atto_csmi_get_raid_cfg raid_cfg;
	struct atto_csmi_get_phy_info get_phy_info;
	struct atto_csmi_set_phy_info set_phy_info;
	struct atto_csmi_get_link_errors link_errs;
	struct atto_csmi_smp_passthru smp_pass_thru;
	struct atto_csmi_ssp_passthru ssp_pass_thru;
	struct atto_csmi_stp_passthru stp_pass_thru;
	struct atto_csmi_task_mgmt tsk_mgt;
	struct atto_csmi_get_sata_sig sata_sig;
	struct atto_csmi_get_scsi_addr scsi_addr;
	struct atto_csmi_get_dev_addr dev_addr;
	struct atto_csmi_get_conn_info conn_info[32];
	struct atto_csmi_phy_ctrl phy_ctrl;
};

struct atto_csmi {
	u32 control_code;
	u32 status;
	union atto_ioctl_csmi data;
};

struct atto_module_info {
	void *adapter;
	void *pci_dev;
	void *scsi_host;
	unsigned short host_no;
	union {
		struct {
			u64 node_name;
			u64 port_name;
		};
		u64 sas_addr;
	};
};

#define ATTO_FUNC_GET_ADAP_INFO      0x00
#define ATTO_VER_GET_ADAP_INFO0      0
#define ATTO_VER_GET_ADAP_INFO       ATTO_VER_GET_ADAP_INFO0

struct __packed atto_hba_get_adapter_info {

	struct {
		u16 vendor_id;
		u16 device_id;
		u16 ss_vendor_id;
		u16 ss_device_id;
		u8 class_code[3];
		u8 rev_id;
		u8 bus_num;
		u8 dev_num;
		u8 func_num;
		u8 link_width_max;
		u8 link_width_curr;
	    #define ATTO_GAI_PCILW_UNKNOWN   0x00

		u8 link_speed_max;
		u8 link_speed_curr;
	    #define ATTO_GAI_PCILS_UNKNOWN   0x00
	    #define ATTO_GAI_PCILS_GEN1      0x01
	    #define ATTO_GAI_PCILS_GEN2      0x02
	    #define ATTO_GAI_PCILS_GEN3      0x03

		u8 interrupt_mode;
	    #define ATTO_GAI_PCIIM_UNKNOWN   0x00
	    #define ATTO_GAI_PCIIM_LEGACY    0x01
	    #define ATTO_GAI_PCIIM_MSI       0x02
	    #define ATTO_GAI_PCIIM_MSIX      0x03

		u8 msi_vector_cnt;
		u8 reserved[19];
	} pci;

	u8 adap_type;
	#define ATTO_GAI_AT_EPCIU320     0x00
	#define ATTO_GAI_AT_ESASRAID     0x01
	#define ATTO_GAI_AT_ESASRAID2    0x02
	#define ATTO_GAI_AT_ESASHBA      0x03
	#define ATTO_GAI_AT_ESASHBA2     0x04
	#define ATTO_GAI_AT_CELERITY     0x05
	#define ATTO_GAI_AT_CELERITY8    0x06
	#define ATTO_GAI_AT_FASTFRAME    0x07
	#define ATTO_GAI_AT_ESASHBA3     0x08
	#define ATTO_GAI_AT_CELERITY16   0x09
	#define ATTO_GAI_AT_TLSASHBA     0x0A
	#define ATTO_GAI_AT_ESASHBA4     0x0B

	u8 adap_flags;
	#define ATTO_GAI_AF_DEGRADED     0x01
	#define ATTO_GAI_AF_SPT_SUPP     0x02
	#define ATTO_GAI_AF_DEVADDR_SUPP 0x04
	#define ATTO_GAI_AF_PHYCTRL_SUPP 0x08
	#define ATTO_GAI_AF_TEST_SUPP    0x10
	#define ATTO_GAI_AF_DIAG_SUPP    0x20
	#define ATTO_GAI_AF_VIRT_SES     0x40
	#define ATTO_GAI_AF_CONN_CTRL    0x80

	u8 num_ports;
	u8 num_phys;
	u8 drvr_rev_major;
	u8 drvr_rev_minor;
	u8 drvr_revsub_minor;
	u8 drvr_rev_build;
	char drvr_rev_ascii[16];
	char drvr_name[32];
	char firmware_rev[16];
	char flash_rev[16];
	char model_name_short[16];
	char model_name[32];
	u32 num_targets;
	u32 num_targsper_bus;
	u32 num_lunsper_targ;
	u8 num_busses;
	u8 num_connectors;
	u8 adap_flags2;
	#define ATTO_GAI_AF2_FCOE_SUPP       0x01
	#define ATTO_GAI_AF2_NIC_SUPP        0x02
	#define ATTO_GAI_AF2_LOCATE_SUPP     0x04
	#define ATTO_GAI_AF2_ADAP_CTRL_SUPP  0x08
	#define ATTO_GAI_AF2_DEV_INFO_SUPP   0x10
	#define ATTO_GAI_AF2_NPIV_SUPP       0x20
	#define ATTO_GAI_AF2_MP_SUPP         0x40

	u8 num_temp_sensors;
	u32 num_targets_backend;
	u32 tunnel_flags;
	#define ATTO_GAI_TF_MEM_RW           0x00000001
	#define ATTO_GAI_TF_TRACE            0x00000002
	#define ATTO_GAI_TF_SCSI_PASS_THRU   0x00000004
	#define ATTO_GAI_TF_GET_DEV_ADDR     0x00000008
	#define ATTO_GAI_TF_PHY_CTRL         0x00000010
	#define ATTO_GAI_TF_CONN_CTRL        0x00000020
	#define ATTO_GAI_TF_GET_DEV_INFO     0x00000040

	u8 reserved3[0x138];
};

#define ATTO_FUNC_GET_ADAP_ADDR      0x01
#define ATTO_VER_GET_ADAP_ADDR0      0
#define ATTO_VER_GET_ADAP_ADDR       ATTO_VER_GET_ADAP_ADDR0

struct __packed atto_hba_get_adapter_address {

	u8 addr_type;
	#define ATTO_GAA_AT_PORT         0x00
	#define ATTO_GAA_AT_NODE         0x01
	#define ATTO_GAA_AT_CURR_MAC     0x02
	#define ATTO_GAA_AT_PERM_MAC     0x03
	#define ATTO_GAA_AT_VNIC         0x04

	u8 port_id;
	u16 addr_len;
	u8 address[256];
};

#define ATTO_FUNC_MEM_RW             0x02
#define ATTO_VER_MEM_RW0             0
#define ATTO_VER_MEM_RW              ATTO_VER_MEM_RW0

struct __packed atto_hba_memory_read_write {
	u8 mem_func;
	u8 mem_type;
	union {
		u8 pci_index;
		u8 i2c_dev;
	};
	u8 i2c_status;
	u32 length;
	u64 address;
	u8 reserved[48];

};

#define ATTO_FUNC_TRACE              0x03
#define ATTO_VER_TRACE0              0
#define ATTO_VER_TRACE1              1
#define ATTO_VER_TRACE               ATTO_VER_TRACE1

struct __packed atto_hba_trace {
	u8 trace_func;
	#define ATTO_TRC_TF_GET_INFO     0x00
	#define ATTO_TRC_TF_ENABLE       0x01
	#define ATTO_TRC_TF_DISABLE      0x02
	#define ATTO_TRC_TF_SET_MASK     0x03
	#define ATTO_TRC_TF_UPLOAD       0x04
	#define ATTO_TRC_TF_RESET        0x05

	u8 trace_type;
	#define ATTO_TRC_TT_DRIVER       0x00
	#define ATTO_TRC_TT_FWCOREDUMP   0x01

	u8 reserved[2];
	u32 current_offset;
	u32 total_length;
	u32 trace_mask;
	u8 reserved2[48];
	u8 contents[];
};

#define ATTO_FUNC_SCSI_PASS_THRU     0x04
#define ATTO_VER_SCSI_PASS_THRU0     0
#define ATTO_VER_SCSI_PASS_THRU      ATTO_VER_SCSI_PASS_THRU0

struct __packed atto_hba_scsi_pass_thru {
	u8 cdb[32];
	u8 cdb_length;
	u8 req_status;
	#define ATTO_SPT_RS_SUCCESS      0x00
	#define ATTO_SPT_RS_FAILED       0x01
	#define ATTO_SPT_RS_OVERRUN      0x02
	#define ATTO_SPT_RS_UNDERRUN     0x03
	#define ATTO_SPT_RS_NO_DEVICE    0x04
	#define ATTO_SPT_RS_NO_LUN       0x05
	#define ATTO_SPT_RS_TIMEOUT      0x06
	#define ATTO_SPT_RS_BUS_RESET    0x07
	#define ATTO_SPT_RS_ABORTED      0x08
	#define ATTO_SPT_RS_BUSY         0x09
	#define ATTO_SPT_RS_DEGRADED     0x0A

	u8 scsi_status;
	u8 sense_length;
	u32 flags;
	#define ATTO_SPTF_DATA_IN    0x00000001
	#define ATTO_SPTF_DATA_OUT   0x00000002
	#define ATTO_SPTF_SIMPLE_Q   0x00000004
	#define ATTO_SPTF_HEAD_OF_Q  0x00000008
	#define ATTO_SPTF_ORDERED_Q  0x00000010

	u32 timeout;
	u32 target_id;
	u8 lun[8];
	u32 residual_length;
	u8 sense_data[0xFC];
	u8 reserved[0x28];
};

#define ATTO_FUNC_GET_DEV_ADDR       0x05
#define ATTO_VER_GET_DEV_ADDR0       0
#define ATTO_VER_GET_DEV_ADDR        ATTO_VER_GET_DEV_ADDR0

struct __packed atto_hba_get_device_address {
	u8 addr_type;
	#define ATTO_GDA_AT_PORT         0x00
	#define ATTO_GDA_AT_NODE         0x01
	#define ATTO_GDA_AT_MAC          0x02
	#define ATTO_GDA_AT_PORTID       0x03
	#define ATTO_GDA_AT_UNIQUE       0x04

	u8 reserved;
	u16 addr_len;
	u32 target_id;
	u8 address[256];
};

/* The following functions are supported by firmware but do not have any
 * associated driver structures
 */
#define ATTO_FUNC_PHY_CTRL           0x06
#define ATTO_FUNC_CONN_CTRL          0x0C
#define ATTO_FUNC_ADAP_CTRL          0x0E
#define ATTO_VER_ADAP_CTRL0          0
#define ATTO_VER_ADAP_CTRL           ATTO_VER_ADAP_CTRL0

struct __packed atto_hba_adap_ctrl {
	u8 adap_func;
	#define ATTO_AC_AF_HARD_RST      0x00
	#define ATTO_AC_AF_GET_STATE     0x01
	#define ATTO_AC_AF_GET_TEMP      0x02

	u8 adap_state;
	#define ATTO_AC_AS_UNKNOWN       0x00
	#define ATTO_AC_AS_OK            0x01
	#define ATTO_AC_AS_RST_SCHED     0x02
	#define ATTO_AC_AS_RST_IN_PROG   0x03
	#define ATTO_AC_AS_RST_DISC      0x04
	#define ATTO_AC_AS_DEGRADED      0x05
	#define ATTO_AC_AS_DISABLED      0x06
	#define ATTO_AC_AS_TEMP          0x07

	u8 reserved[2];

	union {
		struct {
			u8 temp_sensor;
			u8 temp_state;

	#define ATTO_AC_TS_UNSUPP        0x00
	#define ATTO_AC_TS_UNKNOWN       0x01
	#define ATTO_AC_TS_INIT_FAILED   0x02
	#define ATTO_AC_TS_NORMAL        0x03
	#define ATTO_AC_TS_OUT_OF_RANGE  0x04
	#define ATTO_AC_TS_FAULT         0x05

			signed short temp_value;
			signed short temp_lower_lim;
			signed short temp_upper_lim;
			char temp_desc[32];
			u8 reserved2[20];
		};
	};
};

#define ATTO_FUNC_GET_DEV_INFO       0x0F
#define ATTO_VER_GET_DEV_INFO0       0
#define ATTO_VER_GET_DEV_INFO        ATTO_VER_GET_DEV_INFO0

struct __packed atto_hba_sas_device_info {

    #define ATTO_SDI_MAX_PHYS_WIDE_PORT  16

	u8 phy_id[ATTO_SDI_MAX_PHYS_WIDE_PORT]; /* IDs of parent exp/adapt */
	#define ATTO_SDI_PHY_ID_INV      ATTO_SAS_PHY_ID_INV
	u32 exp_target_id;
	u32 sas_port_mask;
	u8 sas_level;
	#define ATTO_SDI_SAS_LVL_INV     0xFF

	u8 slot_num;
	#define ATTO_SDI_SLOT_NUM_INV    ATTO_SLOT_NUM_INV

	u8 dev_type;
	#define ATTO_SDI_DT_END_DEVICE   0
	#define ATTO_SDI_DT_EXPANDER     1
	#define ATTO_SDI_DT_PORT_MULT    2

	u8 ini_flags;
	u8 tgt_flags;
	u8 link_rate; /* SMP_RATE_XXX */
	u8 loc_flags;
	#define ATTO_SDI_LF_DIRECT       0x01
	#define ATTO_SDI_LF_EXPANDER     0x02
	#define ATTO_SDI_LF_PORT_MULT    0x04
	u8 pm_port;
	u8 reserved[0x60];
};

union atto_hba_device_info {
	struct atto_hba_sas_device_info sas_dev_info;
};

struct __packed atto_hba_get_device_info {
	u32 target_id;
	u8 info_type;
	#define ATTO_GDI_IT_UNKNOWN      0x00
	#define ATTO_GDI_IT_SAS          0x01
	#define ATTO_GDI_IT_FC           0x02
	#define ATTO_GDI_IT_FCOE         0x03

	u8 reserved[11];
	union atto_hba_device_info dev_info;
};

struct atto_ioctl {
	u8 version;
	u8 function; /* ATTO_FUNC_XXX */
	u8 status;
#define ATTO_STS_SUCCESS         0x00
#define ATTO_STS_FAILED          0x01
#define ATTO_STS_INV_VERSION     0x02
#define ATTO_STS_OUT_OF_RSRC     0x03
#define ATTO_STS_INV_FUNC        0x04
#define ATTO_STS_UNSUPPORTED     0x05
#define ATTO_STS_INV_ADAPTER     0x06
#define ATTO_STS_INV_DRVR_VER    0x07
#define ATTO_STS_INV_PARAM       0x08
#define ATTO_STS_TIMEOUT         0x09
#define ATTO_STS_NOT_APPL        0x0A
#define ATTO_STS_DEGRADED        0x0B

	u8 flags;
	#define HBAF_TUNNEL      0x01

	u32 data_length;
	u8 reserved2[56];

	union {
		u8 byte[1];
		struct atto_hba_get_adapter_info get_adap_info;
		struct atto_hba_get_adapter_address get_adap_addr;
		struct atto_hba_scsi_pass_thru scsi_pass_thru;
		struct atto_hba_get_device_address get_dev_addr;
		struct atto_hba_adap_ctrl adap_ctrl;
		struct atto_hba_get_device_info get_dev_info;
		struct atto_hba_trace trace;
	} data;

};

struct __packed atto_ioctl_vda_scsi_cmd {

    #define ATTO_VDA_SCSI_VER0   0
    #define ATTO_VDA_SCSI_VER    ATTO_VDA_SCSI_VER0

	u8 cdb[16];
	u32 flags;
	u32 data_length;
	u32 residual_length;
	u16 target_id;
	u8 sense_len;
	u8 scsi_stat;
	u8 reserved[8];
	u8 sense_data[80];
};

struct __packed atto_ioctl_vda_flash_cmd {

    #define ATTO_VDA_FLASH_VER0  0
    #define ATTO_VDA_FLASH_VER   ATTO_VDA_FLASH_VER0

	u32 flash_addr;
	u32 data_length;
	u8 sub_func;
	u8 reserved[15];

	union {
		struct {
			u32 flash_size;
			u32 page_size;
			u8 prod_info[32];
		} info;

		struct {
			char file_name[16]; /* 8.3 fname, NULL term, wc=* */
			u32 file_size;
		} file;
	} data;

};

struct __packed atto_ioctl_vda_diag_cmd {

    #define ATTO_VDA_DIAG_VER0   0
    #define ATTO_VDA_DIAG_VER    ATTO_VDA_DIAG_VER0

	u64 local_addr;
	u32 data_length;
	u8 sub_func;
	u8 flags;
	u8 reserved[3];
};

struct __packed atto_ioctl_vda_cli_cmd {

    #define ATTO_VDA_CLI_VER0    0
    #define ATTO_VDA_CLI_VER     ATTO_VDA_CLI_VER0

	u32 cmd_rsp_len;
};

struct __packed atto_ioctl_vda_smp_cmd {

    #define ATTO_VDA_SMP_VER0    0
    #define ATTO_VDA_SMP_VER     ATTO_VDA_SMP_VER0

	u64 dest;
	u32 cmd_rsp_len;
};

struct __packed atto_ioctl_vda_cfg_cmd {

    #define ATTO_VDA_CFG_VER0    0
    #define ATTO_VDA_CFG_VER     ATTO_VDA_CFG_VER0

	u32 data_length;
	u8 cfg_func;
	u8 reserved[11];

	union {
		u8 bytes[112];
		struct atto_vda_cfg_init init;
	} data;

};

struct __packed atto_ioctl_vda_mgt_cmd {

    #define ATTO_VDA_MGT_VER0    0
    #define ATTO_VDA_MGT_VER     ATTO_VDA_MGT_VER0

	u8 mgt_func;
	u8 scan_generation;
	u16 dev_index;
	u32 data_length;
	u8 reserved[8];
	union {
		u8 bytes[112];
		struct atto_vda_devinfo dev_info;
		struct atto_vda_grp_info grp_info;
		struct atto_vdapart_info part_info;
		struct atto_vda_dh_info dh_info;
		struct atto_vda_metrics_info metrics_info;
		struct atto_vda_schedule_info sched_info;
		struct atto_vda_n_vcache_info nvcache_info;
		struct atto_vda_buzzer_info buzzer_info;
		struct atto_vda_adapter_info adapter_info;
		struct atto_vda_temp_info temp_info;
		struct atto_vda_fan_info fan_info;
	} data;
};

struct __packed atto_ioctl_vda_gsv_cmd {

    #define ATTO_VDA_GSV_VER0    0
    #define ATTO_VDA_GSV_VER     ATTO_VDA_GSV_VER0

	u8 rsp_len;
	u8 reserved[7];
	u8 version_info[];
	#define ATTO_VDA_VER_UNSUPPORTED 0xFF

};

struct __packed atto_ioctl_vda {
	u8 version;
	u8 function;    /* VDA_FUNC_XXXX */
	u8 status;      /* ATTO_STS_XXX */
	u8 vda_status;  /* RS_XXX (if status == ATTO_STS_SUCCESS) */
	u32 data_length;
	u8 reserved[8];

	union {
		struct atto_ioctl_vda_scsi_cmd scsi;
		struct atto_ioctl_vda_flash_cmd flash;
		struct atto_ioctl_vda_diag_cmd diag;
		struct atto_ioctl_vda_cli_cmd cli;
		struct atto_ioctl_vda_smp_cmd smp;
		struct atto_ioctl_vda_cfg_cmd cfg;
		struct atto_ioctl_vda_mgt_cmd mgt;
		struct atto_ioctl_vda_gsv_cmd gsv;
		u8 cmd_info[256];
	} cmd;

	union {
		u8 data[1];
		struct atto_vda_devinfo2 dev_info2;
	} data;

};

struct __packed atto_ioctl_smp {
	u8 version;
	#define ATTO_SMP_VERSION0        0
	#define ATTO_SMP_VERSION1        1
	#define ATTO_SMP_VERSION2        2
	#define ATTO_SMP_VERSION         ATTO_SMP_VERSION2

	u8 function;
#define ATTO_SMP_FUNC_DISC_SMP           0x00
#define ATTO_SMP_FUNC_DISC_TARG          0x01
#define ATTO_SMP_FUNC_SEND_CMD           0x02
#define ATTO_SMP_FUNC_DISC_TARG_DIRECT   0x03
#define ATTO_SMP_FUNC_SEND_CMD_DIRECT    0x04
#define ATTO_SMP_FUNC_DISC_SMP_DIRECT    0x05

	u8 status;      /* ATTO_STS_XXX */
	u8 smp_status;  /* if status == ATTO_STS_SUCCESS */
	#define ATTO_SMP_STS_SUCCESS     0x00
	#define ATTO_SMP_STS_FAILURE     0x01
	#define ATTO_SMP_STS_RESCAN      0x02
	#define ATTO_SMP_STS_NOT_FOUND   0x03

	u16 target_id;
	u8 phy_id;
	u8 dev_index;
	u64 smp_sas_addr;
	u64 targ_sas_addr;
	u32 req_length;
	u32 rsp_length;
	u8 flags;
	#define ATTO_SMPF_ROOT_EXP       0x01 /* expander direct attached */

	u8 reserved[31];

	union {
		u8 byte[1];
		u32 dword[1];
	} data;

};

struct __packed atto_express_ioctl {
	struct atto_express_ioctl_header header;

	union {
		struct atto_firmware_rw_request fwrw;
		struct atto_param_rw_request prw;
		struct atto_channel_list chanlist;
		struct atto_channel_info chaninfo;
		struct atto_ioctl ioctl_hba;
		struct atto_module_info modinfo;
		struct atto_ioctl_vda ioctl_vda;
		struct atto_ioctl_smp ioctl_smp;
		struct atto_csmi csmi;

	} data;
};

/* The struct associated with the code is listed after the definition */
#define EXPRESS_IOCTL_MIN             0x4500
#define EXPRESS_IOCTL_RW_FIRMWARE     0x4500            /* FIRMWARERW    */
#define EXPRESS_IOCTL_READ_PARAMS     0x4501            /* PARAMRW       */
#define EXPRESS_IOCTL_WRITE_PARAMS    0x4502            /* PARAMRW       */
#define EXPRESS_IOCTL_FC_API          0x4503            /* internal      */
#define EXPRESS_IOCTL_GET_CHANNELS    0x4504            /* CHANNELLIST   */
#define EXPRESS_IOCTL_CHAN_INFO       0x4505            /* CHANNELINFO   */
#define EXPRESS_IOCTL_DEFAULT_PARAMS  0x4506            /* PARAMRW       */
#define EXPRESS_ADDR_MEMORY           0x4507            /* MEMADDR       */
#define EXPRESS_RW_MEMORY             0x4508            /* MEMRW         */
#define EXPRESS_TSDK_DUMP             0x4509            /* TSDKDUMP      */
#define EXPRESS_IOCTL_SMP             0x450A            /* IOCTL_SMP     */
#define EXPRESS_CSMI                  0x450B            /* CSMI          */
#define EXPRESS_IOCTL_HBA             0x450C            /* IOCTL_HBA     */
#define EXPRESS_IOCTL_VDA             0x450D            /* IOCTL_VDA     */
#define EXPRESS_IOCTL_GET_ID          0x450E            /* GET_ID        */
#define EXPRESS_IOCTL_GET_MOD_INFO    0x450F            /* MODULE_INFO   */
#define EXPRESS_IOCTL_MAX             0x450F

#endif
