177adf3f0SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 28ae6d9c7SGiridhar Malavali /* 38ae6d9c7SGiridhar Malavali * QLogic Fibre Channel HBA Driver 4bd21eaf9SArmen Baloyan * Copyright (c) 2003-2014 QLogic Corporation 58ae6d9c7SGiridhar Malavali */ 68ae6d9c7SGiridhar Malavali #ifndef __QLA_MR_H 78ae6d9c7SGiridhar Malavali #define __QLA_MR_H 88ae6d9c7SGiridhar Malavali 915b7a68cSBart Van Assche #include "qla_dsd.h" 1015b7a68cSBart Van Assche 118ae6d9c7SGiridhar Malavali /* 128ae6d9c7SGiridhar Malavali * The PCI VendorID and DeviceID for our board. 138ae6d9c7SGiridhar Malavali */ 148ae6d9c7SGiridhar Malavali #define PCI_DEVICE_ID_QLOGIC_ISPF001 0xF001 158ae6d9c7SGiridhar Malavali 168ae6d9c7SGiridhar Malavali /* FX00 specific definitions */ 178ae6d9c7SGiridhar Malavali 188ae6d9c7SGiridhar Malavali #define FX00_COMMAND_TYPE_7 0x07 /* Command Type 7 entry for 7XXX */ 198ae6d9c7SGiridhar Malavali struct cmd_type_7_fx00 { 208ae6d9c7SGiridhar Malavali uint8_t entry_type; /* Entry type. */ 218ae6d9c7SGiridhar Malavali uint8_t entry_count; /* Entry count. */ 228ae6d9c7SGiridhar Malavali uint8_t sys_define; /* System defined. */ 238ae6d9c7SGiridhar Malavali uint8_t entry_status; /* Entry Status. */ 248ae6d9c7SGiridhar Malavali 258ae6d9c7SGiridhar Malavali uint32_t handle; /* System handle. */ 26d68b3e01SArmen Baloyan uint8_t reserved_0; 27d68b3e01SArmen Baloyan uint8_t port_path_ctrl; 28d68b3e01SArmen Baloyan uint16_t reserved_1; 298ae6d9c7SGiridhar Malavali 301f8deefeSSaurav Kashyap __le16 tgt_idx; /* Target Idx. */ 318ae6d9c7SGiridhar Malavali uint16_t timeout; /* Command timeout. */ 328ae6d9c7SGiridhar Malavali 331f8deefeSSaurav Kashyap __le16 dseg_count; /* Data segment count. */ 34d68b3e01SArmen Baloyan uint8_t scsi_rsp_dsd_len; 35d68b3e01SArmen Baloyan uint8_t reserved_2; 368ae6d9c7SGiridhar Malavali 378ae6d9c7SGiridhar Malavali struct scsi_lun lun; /* LUN (LE). */ 388ae6d9c7SGiridhar Malavali 398ae6d9c7SGiridhar Malavali uint8_t cntrl_flags; 408ae6d9c7SGiridhar Malavali 418ae6d9c7SGiridhar Malavali uint8_t task_mgmt_flags; /* Task management flags. */ 428ae6d9c7SGiridhar Malavali 438ae6d9c7SGiridhar Malavali uint8_t task; 448ae6d9c7SGiridhar Malavali 458ae6d9c7SGiridhar Malavali uint8_t crn; 468ae6d9c7SGiridhar Malavali 478ae6d9c7SGiridhar Malavali uint8_t fcp_cdb[MAX_CMDSZ]; /* SCSI command words. */ 481f8deefeSSaurav Kashyap __le32 byte_count; /* Total byte count. */ 498ae6d9c7SGiridhar Malavali 5015b7a68cSBart Van Assche struct dsd64 dsd; 518ae6d9c7SGiridhar Malavali }; 528ae6d9c7SGiridhar Malavali 538ae6d9c7SGiridhar Malavali #define STATUS_TYPE_FX00 0x01 /* Status entry. */ 548ae6d9c7SGiridhar Malavali struct sts_entry_fx00 { 558ae6d9c7SGiridhar Malavali uint8_t entry_type; /* Entry type. */ 568ae6d9c7SGiridhar Malavali uint8_t entry_count; /* Entry count. */ 578ae6d9c7SGiridhar Malavali uint8_t sys_define; /* System defined. */ 588ae6d9c7SGiridhar Malavali uint8_t entry_status; /* Entry Status. */ 598ae6d9c7SGiridhar Malavali 608ae6d9c7SGiridhar Malavali uint32_t handle; /* System handle. */ 61d68b3e01SArmen Baloyan uint32_t reserved_3; /* System handle. */ 628ae6d9c7SGiridhar Malavali 631f8deefeSSaurav Kashyap __le16 comp_status; /* Completion status. */ 648ae6d9c7SGiridhar Malavali uint16_t reserved_0; /* OX_ID used by the firmware. */ 658ae6d9c7SGiridhar Malavali 661f8deefeSSaurav Kashyap __le32 residual_len; /* FW calc residual transfer length. */ 678ae6d9c7SGiridhar Malavali 688ae6d9c7SGiridhar Malavali uint16_t reserved_1; 698ae6d9c7SGiridhar Malavali uint16_t state_flags; /* State flags. */ 708ae6d9c7SGiridhar Malavali 718ae6d9c7SGiridhar Malavali uint16_t reserved_2; 721f8deefeSSaurav Kashyap __le16 scsi_status; /* SCSI status. */ 738ae6d9c7SGiridhar Malavali 748ae6d9c7SGiridhar Malavali uint32_t sense_len; /* FCP SENSE length. */ 758ae6d9c7SGiridhar Malavali uint8_t data[32]; /* FCP response/sense information. */ 768ae6d9c7SGiridhar Malavali }; 778ae6d9c7SGiridhar Malavali 788ae6d9c7SGiridhar Malavali 798ae6d9c7SGiridhar Malavali #define MAX_HANDLE_COUNT 15 808ae6d9c7SGiridhar Malavali #define MULTI_STATUS_TYPE_FX00 0x0D 818ae6d9c7SGiridhar Malavali 828ae6d9c7SGiridhar Malavali struct multi_sts_entry_fx00 { 838ae6d9c7SGiridhar Malavali uint8_t entry_type; /* Entry type. */ 84d68b3e01SArmen Baloyan uint8_t entry_count; /* Entry count. */ 858ae6d9c7SGiridhar Malavali uint8_t handle_count; 868ae6d9c7SGiridhar Malavali uint8_t entry_status; 878ae6d9c7SGiridhar Malavali 881f8deefeSSaurav Kashyap __le32 handles[MAX_HANDLE_COUNT]; 898ae6d9c7SGiridhar Malavali }; 908ae6d9c7SGiridhar Malavali 918ae6d9c7SGiridhar Malavali #define TSK_MGMT_IOCB_TYPE_FX00 0x05 928ae6d9c7SGiridhar Malavali struct tsk_mgmt_entry_fx00 { 938ae6d9c7SGiridhar Malavali uint8_t entry_type; /* Entry type. */ 948ae6d9c7SGiridhar Malavali uint8_t entry_count; /* Entry count. */ 958ae6d9c7SGiridhar Malavali uint8_t sys_define; 968ae6d9c7SGiridhar Malavali uint8_t entry_status; /* Entry Status. */ 978ae6d9c7SGiridhar Malavali 9821038b09SBart Van Assche uint32_t handle; /* System handle. */ 998ae6d9c7SGiridhar Malavali 100d68b3e01SArmen Baloyan uint32_t reserved_0; 1018ae6d9c7SGiridhar Malavali 1021f8deefeSSaurav Kashyap __le16 tgt_id; /* Target Idx. */ 1038ae6d9c7SGiridhar Malavali 1048ae6d9c7SGiridhar Malavali uint16_t reserved_1; 105d68b3e01SArmen Baloyan uint16_t reserved_3; 106d68b3e01SArmen Baloyan uint16_t reserved_4; 1078ae6d9c7SGiridhar Malavali 1088ae6d9c7SGiridhar Malavali struct scsi_lun lun; /* LUN (LE). */ 1098ae6d9c7SGiridhar Malavali 1101f8deefeSSaurav Kashyap __le32 control_flags; /* Control Flags. */ 1118ae6d9c7SGiridhar Malavali 1128ae6d9c7SGiridhar Malavali uint8_t reserved_2[32]; 1138ae6d9c7SGiridhar Malavali }; 1148ae6d9c7SGiridhar Malavali 1158ae6d9c7SGiridhar Malavali 1168ae6d9c7SGiridhar Malavali #define ABORT_IOCB_TYPE_FX00 0x08 /* Abort IOCB status. */ 1178ae6d9c7SGiridhar Malavali struct abort_iocb_entry_fx00 { 1188ae6d9c7SGiridhar Malavali uint8_t entry_type; /* Entry type. */ 1198ae6d9c7SGiridhar Malavali uint8_t entry_count; /* Entry count. */ 1208ae6d9c7SGiridhar Malavali uint8_t sys_define; /* System defined. */ 1218ae6d9c7SGiridhar Malavali uint8_t entry_status; /* Entry Status. */ 1228ae6d9c7SGiridhar Malavali 12321038b09SBart Van Assche uint32_t handle; /* System handle. */ 124d68b3e01SArmen Baloyan __le32 reserved_0; 1258ae6d9c7SGiridhar Malavali 1261f8deefeSSaurav Kashyap __le16 tgt_id_sts; /* Completion status. */ 1271f8deefeSSaurav Kashyap __le16 options; 1288ae6d9c7SGiridhar Malavali 12921038b09SBart Van Assche uint32_t abort_handle; /* System handle. */ 130d68b3e01SArmen Baloyan __le32 reserved_2; 1318ae6d9c7SGiridhar Malavali 1321f8deefeSSaurav Kashyap __le16 req_que_no; 1338ae6d9c7SGiridhar Malavali uint8_t reserved_1[38]; 1348ae6d9c7SGiridhar Malavali }; 1358ae6d9c7SGiridhar Malavali 1368ae6d9c7SGiridhar Malavali #define IOCTL_IOSB_TYPE_FX00 0x0C 1378ae6d9c7SGiridhar Malavali struct ioctl_iocb_entry_fx00 { 1388ae6d9c7SGiridhar Malavali uint8_t entry_type; /* Entry type. */ 1398ae6d9c7SGiridhar Malavali uint8_t entry_count; /* Entry count. */ 1408ae6d9c7SGiridhar Malavali uint8_t sys_define; /* System defined. */ 1418ae6d9c7SGiridhar Malavali uint8_t entry_status; /* Entry Status. */ 1428ae6d9c7SGiridhar Malavali 1438ae6d9c7SGiridhar Malavali uint32_t handle; /* System handle. */ 1448ae6d9c7SGiridhar Malavali uint32_t reserved_0; /* System handle. */ 1458ae6d9c7SGiridhar Malavali 1468ae6d9c7SGiridhar Malavali uint16_t comp_func_num; 1471f8deefeSSaurav Kashyap __le16 fw_iotcl_flags; 1488ae6d9c7SGiridhar Malavali 1491f8deefeSSaurav Kashyap __le32 dataword_r; /* Data word returned */ 1508ae6d9c7SGiridhar Malavali uint32_t adapid; /* Adapter ID */ 151d68b3e01SArmen Baloyan uint32_t dataword_r_extra; 1528ae6d9c7SGiridhar Malavali 1531f8deefeSSaurav Kashyap __le32 seq_no; 1548ae6d9c7SGiridhar Malavali uint8_t reserved_2[20]; 1558ae6d9c7SGiridhar Malavali uint32_t residuallen; 1561f8deefeSSaurav Kashyap __le32 status; 1578ae6d9c7SGiridhar Malavali }; 1588ae6d9c7SGiridhar Malavali 1598ae6d9c7SGiridhar Malavali #define STATUS_CONT_TYPE_FX00 0x04 1608ae6d9c7SGiridhar Malavali 1618ae6d9c7SGiridhar Malavali #define FX00_IOCB_TYPE 0x0B 1628ae6d9c7SGiridhar Malavali struct fxdisc_entry_fx00 { 1638ae6d9c7SGiridhar Malavali uint8_t entry_type; /* Entry type. */ 1648ae6d9c7SGiridhar Malavali uint8_t entry_count; /* Entry count. */ 1658ae6d9c7SGiridhar Malavali uint8_t sys_define; /* System Defined. */ 1668ae6d9c7SGiridhar Malavali uint8_t entry_status; /* Entry Status. */ 1678ae6d9c7SGiridhar Malavali 16821038b09SBart Van Assche uint32_t handle; /* System handle. */ 1691f8deefeSSaurav Kashyap __le32 reserved_0; /* System handle. */ 1708ae6d9c7SGiridhar Malavali 1711f8deefeSSaurav Kashyap __le16 func_num; 1721f8deefeSSaurav Kashyap __le16 req_xfrcnt; 1731f8deefeSSaurav Kashyap __le16 req_dsdcnt; 1741f8deefeSSaurav Kashyap __le16 rsp_xfrcnt; 1751f8deefeSSaurav Kashyap __le16 rsp_dsdcnt; 1768ae6d9c7SGiridhar Malavali uint8_t flags; 1778ae6d9c7SGiridhar Malavali uint8_t reserved_1; 1788ae6d9c7SGiridhar Malavali 17917603237SBart Van Assche /* 18017603237SBart Van Assche * Use array size 1 below to prevent that Coverity complains about 18117603237SBart Van Assche * the append_dsd64() calls for the two arrays below. 18217603237SBart Van Assche */ 18317603237SBart Van Assche struct dsd64 dseg_rq[1]; 18417603237SBart Van Assche struct dsd64 dseg_rsp[1]; 1858ae6d9c7SGiridhar Malavali 1861f8deefeSSaurav Kashyap __le32 dataword; 1871f8deefeSSaurav Kashyap __le32 adapid; 1881f8deefeSSaurav Kashyap __le32 adapid_hi; 1891f8deefeSSaurav Kashyap __le32 dataword_extra; 1908ae6d9c7SGiridhar Malavali }; 1918ae6d9c7SGiridhar Malavali 1928ae6d9c7SGiridhar Malavali struct qlafx00_tgt_node_info { 1938ae6d9c7SGiridhar Malavali uint8_t tgt_node_wwpn[WWN_SIZE]; 1948ae6d9c7SGiridhar Malavali uint8_t tgt_node_wwnn[WWN_SIZE]; 1958ae6d9c7SGiridhar Malavali uint32_t tgt_node_state; 1968ae6d9c7SGiridhar Malavali uint8_t reserved[128]; 1978ae6d9c7SGiridhar Malavali uint32_t reserved_1[8]; 1988ae6d9c7SGiridhar Malavali uint64_t reserved_2[4]; 1998ae6d9c7SGiridhar Malavali } __packed; 2008ae6d9c7SGiridhar Malavali 2018ae6d9c7SGiridhar Malavali #define QLAFX00_TGT_NODE_INFO sizeof(struct qlafx00_tgt_node_info) 2028ae6d9c7SGiridhar Malavali 2038ae6d9c7SGiridhar Malavali #define QLAFX00_LINK_STATUS_DOWN 0x10 2048ae6d9c7SGiridhar Malavali #define QLAFX00_LINK_STATUS_UP 0x11 2058ae6d9c7SGiridhar Malavali 2068ae6d9c7SGiridhar Malavali #define QLAFX00_PORT_SPEED_2G 0x2 2078ae6d9c7SGiridhar Malavali #define QLAFX00_PORT_SPEED_4G 0x4 2088ae6d9c7SGiridhar Malavali #define QLAFX00_PORT_SPEED_8G 0x8 2098ae6d9c7SGiridhar Malavali #define QLAFX00_PORT_SPEED_10G 0xa 2108ae6d9c7SGiridhar Malavali struct port_info_data { 2118ae6d9c7SGiridhar Malavali uint8_t port_state; 2128ae6d9c7SGiridhar Malavali uint8_t port_type; 2138ae6d9c7SGiridhar Malavali uint16_t port_identifier; 2148ae6d9c7SGiridhar Malavali uint32_t up_port_state; 2158ae6d9c7SGiridhar Malavali uint8_t fw_ver_num[32]; 2168ae6d9c7SGiridhar Malavali uint8_t portal_attrib; 2178ae6d9c7SGiridhar Malavali uint16_t host_option; 2188ae6d9c7SGiridhar Malavali uint8_t reset_delay; 2198ae6d9c7SGiridhar Malavali uint8_t pdwn_retry_cnt; 2208ae6d9c7SGiridhar Malavali uint16_t max_luns2tgt; 2218ae6d9c7SGiridhar Malavali uint8_t risc_ver; 2228ae6d9c7SGiridhar Malavali uint8_t pconn_option; 2238ae6d9c7SGiridhar Malavali uint16_t risc_option; 2248ae6d9c7SGiridhar Malavali uint16_t max_frame_len; 2258ae6d9c7SGiridhar Malavali uint16_t max_iocb_alloc; 2268ae6d9c7SGiridhar Malavali uint16_t exec_throttle; 2278ae6d9c7SGiridhar Malavali uint8_t retry_cnt; 2288ae6d9c7SGiridhar Malavali uint8_t retry_delay; 2298ae6d9c7SGiridhar Malavali uint8_t port_name[8]; 2308ae6d9c7SGiridhar Malavali uint8_t port_id[3]; 2318ae6d9c7SGiridhar Malavali uint8_t link_status; 2328ae6d9c7SGiridhar Malavali uint8_t plink_rate; 2338ae6d9c7SGiridhar Malavali uint32_t link_config; 2348ae6d9c7SGiridhar Malavali uint16_t adap_haddr; 2358ae6d9c7SGiridhar Malavali uint8_t tgt_disc; 2368ae6d9c7SGiridhar Malavali uint8_t log_tout; 2378ae6d9c7SGiridhar Malavali uint8_t node_name[8]; 2388ae6d9c7SGiridhar Malavali uint16_t erisc_opt1; 2398ae6d9c7SGiridhar Malavali uint8_t resp_acc_tmr; 2408ae6d9c7SGiridhar Malavali uint8_t intr_del_tmr; 2418ae6d9c7SGiridhar Malavali uint8_t erisc_opt2; 2428ae6d9c7SGiridhar Malavali uint8_t alt_port_name[8]; 2438ae6d9c7SGiridhar Malavali uint8_t alt_node_name[8]; 2448ae6d9c7SGiridhar Malavali uint8_t link_down_tout; 2458ae6d9c7SGiridhar Malavali uint8_t conn_type; 2468ae6d9c7SGiridhar Malavali uint8_t fc_fw_mode; 2478ae6d9c7SGiridhar Malavali uint32_t uiReserved[48]; 2488ae6d9c7SGiridhar Malavali } __packed; 2498ae6d9c7SGiridhar Malavali 2508ae6d9c7SGiridhar Malavali /* OS Type Designations */ 2518ae6d9c7SGiridhar Malavali #define OS_TYPE_UNKNOWN 0 2528ae6d9c7SGiridhar Malavali #define OS_TYPE_LINUX 2 2538ae6d9c7SGiridhar Malavali 2548ae6d9c7SGiridhar Malavali /* Linux Info */ 2558ae6d9c7SGiridhar Malavali #define SYSNAME_LENGTH 128 2568ae6d9c7SGiridhar Malavali #define NODENAME_LENGTH 64 2578ae6d9c7SGiridhar Malavali #define RELEASE_LENGTH 64 2588ae6d9c7SGiridhar Malavali #define VERSION_LENGTH 64 2598ae6d9c7SGiridhar Malavali #define MACHINE_LENGTH 64 2608ae6d9c7SGiridhar Malavali #define DOMNAME_LENGTH 64 2618ae6d9c7SGiridhar Malavali 2628ae6d9c7SGiridhar Malavali struct host_system_info { 2638ae6d9c7SGiridhar Malavali uint32_t os_type; 2648ae6d9c7SGiridhar Malavali char sysname[SYSNAME_LENGTH]; 2658ae6d9c7SGiridhar Malavali char nodename[NODENAME_LENGTH]; 2668ae6d9c7SGiridhar Malavali char release[RELEASE_LENGTH]; 2678ae6d9c7SGiridhar Malavali char version[VERSION_LENGTH]; 2688ae6d9c7SGiridhar Malavali char machine[MACHINE_LENGTH]; 2698ae6d9c7SGiridhar Malavali char domainname[DOMNAME_LENGTH]; 2708ae6d9c7SGiridhar Malavali char hostdriver[VERSION_LENGTH]; 2718ae6d9c7SGiridhar Malavali uint32_t reserved[64]; 2728ae6d9c7SGiridhar Malavali } __packed; 2738ae6d9c7SGiridhar Malavali 2748ae6d9c7SGiridhar Malavali struct register_host_info { 2758ae6d9c7SGiridhar Malavali struct host_system_info hsi; /* host system info */ 2768ae6d9c7SGiridhar Malavali uint64_t utc; /* UTC (system time) */ 2778ae6d9c7SGiridhar Malavali uint32_t reserved[64]; /* future additions */ 2788ae6d9c7SGiridhar Malavali } __packed; 2798ae6d9c7SGiridhar Malavali 2808ae6d9c7SGiridhar Malavali 2818ae6d9c7SGiridhar Malavali #define QLAFX00_PORT_DATA_INFO (sizeof(struct port_info_data)) 2828ae6d9c7SGiridhar Malavali #define QLAFX00_TGT_NODE_LIST_SIZE (sizeof(uint32_t) * 32) 2838ae6d9c7SGiridhar Malavali 2848ae6d9c7SGiridhar Malavali struct config_info_data { 285*88a157a3SKees Cook uint8_t model_num[16] __nonstring; 286*88a157a3SKees Cook uint8_t model_description[80] __nonstring; 28703eb912aSArmen Baloyan uint8_t reserved0[160]; 2888ae6d9c7SGiridhar Malavali uint8_t symbolic_name[64]; 2898ae6d9c7SGiridhar Malavali uint8_t serial_num[32]; 2908ae6d9c7SGiridhar Malavali uint8_t hw_version[16]; 2918ae6d9c7SGiridhar Malavali uint8_t fw_version[16]; 2928ae6d9c7SGiridhar Malavali uint8_t uboot_version[16]; 2938ae6d9c7SGiridhar Malavali uint8_t fru_serial_num[32]; 2948ae6d9c7SGiridhar Malavali 2958ae6d9c7SGiridhar Malavali uint8_t fc_port_count; 2968ae6d9c7SGiridhar Malavali uint8_t iscsi_port_count; 2978ae6d9c7SGiridhar Malavali uint8_t reserved1[2]; 2988ae6d9c7SGiridhar Malavali 2998ae6d9c7SGiridhar Malavali uint8_t mode; 3008ae6d9c7SGiridhar Malavali uint8_t log_level; 3018ae6d9c7SGiridhar Malavali uint8_t reserved2[2]; 3028ae6d9c7SGiridhar Malavali 3038ae6d9c7SGiridhar Malavali uint32_t log_size; 3048ae6d9c7SGiridhar Malavali 3058ae6d9c7SGiridhar Malavali uint8_t tgt_pres_mode; 3068ae6d9c7SGiridhar Malavali uint8_t iqn_flags; 3078ae6d9c7SGiridhar Malavali uint8_t lun_mapping; 3088ae6d9c7SGiridhar Malavali 3098ae6d9c7SGiridhar Malavali uint64_t adapter_id; 3108ae6d9c7SGiridhar Malavali 3118ae6d9c7SGiridhar Malavali uint32_t cluster_key_len; 31271e56003SArmen Baloyan uint8_t cluster_key[16]; 3138ae6d9c7SGiridhar Malavali 3148ae6d9c7SGiridhar Malavali uint64_t cluster_master_id; 3158ae6d9c7SGiridhar Malavali uint64_t cluster_slave_id; 3168ae6d9c7SGiridhar Malavali uint8_t cluster_flags; 31771e56003SArmen Baloyan uint32_t enabled_capabilities; 31871e56003SArmen Baloyan uint32_t nominal_temp_value; 3198ae6d9c7SGiridhar Malavali } __packed; 3208ae6d9c7SGiridhar Malavali 3218ae6d9c7SGiridhar Malavali #define FXDISC_GET_CONFIG_INFO 0x01 3228ae6d9c7SGiridhar Malavali #define FXDISC_GET_PORT_INFO 0x02 3238ae6d9c7SGiridhar Malavali #define FXDISC_GET_TGT_NODE_INFO 0x80 3248ae6d9c7SGiridhar Malavali #define FXDISC_GET_TGT_NODE_LIST 0x81 3258ae6d9c7SGiridhar Malavali #define FXDISC_REG_HOST_INFO 0x99 326767157c5SArmen Baloyan #define FXDISC_ABORT_IOCTL 0xff 3278ae6d9c7SGiridhar Malavali 328966460d8SArmen Baloyan #define QLAFX00_HBA_ICNTRL_REG 0x20B08 3298ae6d9c7SGiridhar Malavali #define QLAFX00_ICR_ENB_MASK 0x80000000 3308ae6d9c7SGiridhar Malavali #define QLAFX00_ICR_DIS_MASK 0x7fffffff 3318ae6d9c7SGiridhar Malavali #define QLAFX00_HST_RST_REG 0x18264 33271e56003SArmen Baloyan #define QLAFX00_SOC_TEMP_REG 0x184C4 3338ae6d9c7SGiridhar Malavali #define QLAFX00_HST_TO_HBA_REG 0x20A04 3348ae6d9c7SGiridhar Malavali #define QLAFX00_HBA_TO_HOST_REG 0x21B70 3358ae6d9c7SGiridhar Malavali #define QLAFX00_HST_INT_STS_BITS 0x7 3368ae6d9c7SGiridhar Malavali #define QLAFX00_BAR1_BASE_ADDR_REG 0x40018 3378ae6d9c7SGiridhar Malavali #define QLAFX00_PEX0_WIN0_BASE_ADDR_REG 0x41824 3388ae6d9c7SGiridhar Malavali 3398ae6d9c7SGiridhar Malavali #define QLAFX00_INTR_MB_CMPLT 0x1 3408ae6d9c7SGiridhar Malavali #define QLAFX00_INTR_RSP_CMPLT 0x2 3418ae6d9c7SGiridhar Malavali #define QLAFX00_INTR_ASYNC_CMPLT 0x4 3428ae6d9c7SGiridhar Malavali 3438ae6d9c7SGiridhar Malavali #define QLAFX00_MBA_SYSTEM_ERR 0x8002 34471e56003SArmen Baloyan #define QLAFX00_MBA_TEMP_OVER 0x8005 34571e56003SArmen Baloyan #define QLAFX00_MBA_TEMP_NORM 0x8006 34671e56003SArmen Baloyan #define QLAFX00_MBA_TEMP_CRIT 0x8007 3478ae6d9c7SGiridhar Malavali #define QLAFX00_MBA_LINK_UP 0x8011 3488ae6d9c7SGiridhar Malavali #define QLAFX00_MBA_LINK_DOWN 0x8012 3498ae6d9c7SGiridhar Malavali #define QLAFX00_MBA_PORT_UPDATE 0x8014 3508ae6d9c7SGiridhar Malavali #define QLAFX00_MBA_SHUTDOWN_RQSTD 0x8062 3518ae6d9c7SGiridhar Malavali 3528ae6d9c7SGiridhar Malavali #define SOC_SW_RST_CONTROL_REG_CORE0 0x0020800 3538ae6d9c7SGiridhar Malavali #define SOC_FABRIC_RST_CONTROL_REG 0x0020840 3548ae6d9c7SGiridhar Malavali #define SOC_FABRIC_CONTROL_REG 0x0020200 3558ae6d9c7SGiridhar Malavali #define SOC_FABRIC_CONFIG_REG 0x0020204 35642543fb9SArmen Baloyan #define SOC_PWR_MANAGEMENT_PWR_DOWN_REG 0x001820C 3578ae6d9c7SGiridhar Malavali 3588ae6d9c7SGiridhar Malavali #define SOC_INTERRUPT_SOURCE_I_CONTROL_REG 0x0020B00 3598ae6d9c7SGiridhar Malavali #define SOC_CORE_TIMER_REG 0x0021850 3608ae6d9c7SGiridhar Malavali #define SOC_IRQ_ACK_REG 0x00218b4 3618ae6d9c7SGiridhar Malavali 3628ae6d9c7SGiridhar Malavali #define CONTINUE_A64_TYPE_FX00 0x03 /* Continuation entry. */ 3638ae6d9c7SGiridhar Malavali 3648ae6d9c7SGiridhar Malavali #define QLAFX00_SET_HST_INTR(ha, value) \ 36504474d3aSBart Van Assche wrt_reg_dword((ha)->cregbase + QLAFX00_HST_TO_HBA_REG, \ 3668ae6d9c7SGiridhar Malavali value) 3678ae6d9c7SGiridhar Malavali 3688ae6d9c7SGiridhar Malavali #define QLAFX00_CLR_HST_INTR(ha, value) \ 36904474d3aSBart Van Assche wrt_reg_dword((ha)->cregbase + QLAFX00_HBA_TO_HOST_REG, \ 3708ae6d9c7SGiridhar Malavali ~value) 3718ae6d9c7SGiridhar Malavali 3728ae6d9c7SGiridhar Malavali #define QLAFX00_RD_INTR_REG(ha) \ 37304474d3aSBart Van Assche rd_reg_dword((ha)->cregbase + QLAFX00_HBA_TO_HOST_REG) 3748ae6d9c7SGiridhar Malavali 3758ae6d9c7SGiridhar Malavali #define QLAFX00_CLR_INTR_REG(ha, value) \ 37604474d3aSBart Van Assche wrt_reg_dword((ha)->cregbase + QLAFX00_HBA_TO_HOST_REG, \ 3778ae6d9c7SGiridhar Malavali ~value) 3788ae6d9c7SGiridhar Malavali 3798ae6d9c7SGiridhar Malavali #define QLAFX00_SET_HBA_SOC_REG(ha, off, val)\ 38004474d3aSBart Van Assche wrt_reg_dword((ha)->cregbase + off, val) 3818ae6d9c7SGiridhar Malavali 3828ae6d9c7SGiridhar Malavali #define QLAFX00_GET_HBA_SOC_REG(ha, off)\ 38304474d3aSBart Van Assche rd_reg_dword((ha)->cregbase + off) 3848ae6d9c7SGiridhar Malavali 3858ae6d9c7SGiridhar Malavali #define QLAFX00_HBA_RST_REG(ha, val)\ 38604474d3aSBart Van Assche wrt_reg_dword((ha)->cregbase + QLAFX00_HST_RST_REG, val) 3878ae6d9c7SGiridhar Malavali 3888ae6d9c7SGiridhar Malavali #define QLAFX00_RD_ICNTRL_REG(ha) \ 38904474d3aSBart Van Assche rd_reg_dword((ha)->cregbase + QLAFX00_HBA_ICNTRL_REG) 3908ae6d9c7SGiridhar Malavali 3918ae6d9c7SGiridhar Malavali #define QLAFX00_ENABLE_ICNTRL_REG(ha) \ 39204474d3aSBart Van Assche wrt_reg_dword((ha)->cregbase + QLAFX00_HBA_ICNTRL_REG, \ 3938ae6d9c7SGiridhar Malavali (QLAFX00_GET_HBA_SOC_REG(ha, QLAFX00_HBA_ICNTRL_REG) | \ 3948ae6d9c7SGiridhar Malavali QLAFX00_ICR_ENB_MASK)) 3958ae6d9c7SGiridhar Malavali 3968ae6d9c7SGiridhar Malavali #define QLAFX00_DISABLE_ICNTRL_REG(ha) \ 39704474d3aSBart Van Assche wrt_reg_dword((ha)->cregbase + QLAFX00_HBA_ICNTRL_REG, \ 3988ae6d9c7SGiridhar Malavali (QLAFX00_GET_HBA_SOC_REG(ha, QLAFX00_HBA_ICNTRL_REG) & \ 3998ae6d9c7SGiridhar Malavali QLAFX00_ICR_DIS_MASK)) 4008ae6d9c7SGiridhar Malavali 4018ae6d9c7SGiridhar Malavali #define QLAFX00_RD_REG(ha, off) \ 40204474d3aSBart Van Assche rd_reg_dword((ha)->cregbase + off) 4038ae6d9c7SGiridhar Malavali 4048ae6d9c7SGiridhar Malavali #define QLAFX00_WR_REG(ha, off, val) \ 40504474d3aSBart Van Assche wrt_reg_dword((ha)->cregbase + off, val) 4068ae6d9c7SGiridhar Malavali 4078ae6d9c7SGiridhar Malavali struct qla_mt_iocb_rqst_fx00 { 4081f8deefeSSaurav Kashyap __le32 reserved_0; 4098ae6d9c7SGiridhar Malavali 4101f8deefeSSaurav Kashyap __le16 func_type; 4118ae6d9c7SGiridhar Malavali uint8_t flags; 4128ae6d9c7SGiridhar Malavali uint8_t reserved_1; 4138ae6d9c7SGiridhar Malavali 4141f8deefeSSaurav Kashyap __le32 dataword; 4158ae6d9c7SGiridhar Malavali 4161f8deefeSSaurav Kashyap __le32 adapid; 4171f8deefeSSaurav Kashyap __le32 adapid_hi; 4188ae6d9c7SGiridhar Malavali 4191f8deefeSSaurav Kashyap __le32 dataword_extra; 4208ae6d9c7SGiridhar Malavali 4210a77b586SSaurav Kashyap __le16 req_len; 4220a77b586SSaurav Kashyap __le16 reserved_2; 4238ae6d9c7SGiridhar Malavali 4240a77b586SSaurav Kashyap __le16 rsp_len; 4250a77b586SSaurav Kashyap __le16 reserved_3; 4268ae6d9c7SGiridhar Malavali }; 4278ae6d9c7SGiridhar Malavali 4288ae6d9c7SGiridhar Malavali struct qla_mt_iocb_rsp_fx00 { 4298ae6d9c7SGiridhar Malavali uint32_t reserved_1; 4308ae6d9c7SGiridhar Malavali 4318ae6d9c7SGiridhar Malavali uint16_t func_type; 4321f8deefeSSaurav Kashyap __le16 ioctl_flags; 4338ae6d9c7SGiridhar Malavali 4341f8deefeSSaurav Kashyap __le32 ioctl_data; 4358ae6d9c7SGiridhar Malavali 4368ae6d9c7SGiridhar Malavali uint32_t adapid; 4378ae6d9c7SGiridhar Malavali uint32_t adapid_hi; 4388ae6d9c7SGiridhar Malavali 4398ae6d9c7SGiridhar Malavali uint32_t reserved_2; 4401f8deefeSSaurav Kashyap __le32 seq_number; 4418ae6d9c7SGiridhar Malavali 4428ae6d9c7SGiridhar Malavali uint8_t reserved_3[20]; 4438ae6d9c7SGiridhar Malavali 4448ae6d9c7SGiridhar Malavali int32_t res_count; 4458ae6d9c7SGiridhar Malavali 4461f8deefeSSaurav Kashyap __le32 status; 4478ae6d9c7SGiridhar Malavali }; 4488ae6d9c7SGiridhar Malavali 4498ae6d9c7SGiridhar Malavali 4508ae6d9c7SGiridhar Malavali #define MAILBOX_REGISTER_COUNT_FX00 16 4518ae6d9c7SGiridhar Malavali #define AEN_MAILBOX_REGISTER_COUNT_FX00 8 4528ae6d9c7SGiridhar Malavali #define MAX_FIBRE_DEVICES_FX00 512 4538ae6d9c7SGiridhar Malavali #define MAX_LUNS_FX00 0x1024 4548ae6d9c7SGiridhar Malavali #define MAX_TARGETS_FX00 MAX_ISA_DEVICES 4558ae6d9c7SGiridhar Malavali #define REQUEST_ENTRY_CNT_FX00 512 /* Number of request entries. */ 4568ae6d9c7SGiridhar Malavali #define RESPONSE_ENTRY_CNT_FX00 256 /* Number of response entries.*/ 4578ae6d9c7SGiridhar Malavali 4588ae6d9c7SGiridhar Malavali /* 4598ae6d9c7SGiridhar Malavali * Firmware state codes for QLAFX00 adapters 4608ae6d9c7SGiridhar Malavali */ 4618ae6d9c7SGiridhar Malavali #define FSTATE_FX00_CONFIG_WAIT 0x0000 /* Waiting for driver to issue 4628ae6d9c7SGiridhar Malavali * Initialize FW Mbox cmd 4638ae6d9c7SGiridhar Malavali */ 4648ae6d9c7SGiridhar Malavali #define FSTATE_FX00_INITIALIZED 0x1000 /* FW has been initialized by 4658ae6d9c7SGiridhar Malavali * the driver 4668ae6d9c7SGiridhar Malavali */ 4678ae6d9c7SGiridhar Malavali 4688ae6d9c7SGiridhar Malavali #define FX00_DEF_RATOV 10 4698ae6d9c7SGiridhar Malavali 4708ae6d9c7SGiridhar Malavali struct mr_data_fx00 { 4718ae6d9c7SGiridhar Malavali uint8_t symbolic_name[64]; 4728ae6d9c7SGiridhar Malavali uint8_t serial_num[32]; 4738ae6d9c7SGiridhar Malavali uint8_t hw_version[16]; 4748ae6d9c7SGiridhar Malavali uint8_t fw_version[16]; 4758ae6d9c7SGiridhar Malavali uint8_t uboot_version[16]; 4768ae6d9c7SGiridhar Malavali uint8_t fru_serial_num[32]; 4778ae6d9c7SGiridhar Malavali fc_port_t fcport; /* fcport used for requests 4788ae6d9c7SGiridhar Malavali * that are not linked 4798ae6d9c7SGiridhar Malavali * to a particular target 4808ae6d9c7SGiridhar Malavali */ 4818ae6d9c7SGiridhar Malavali uint8_t fw_hbt_en; 4828ae6d9c7SGiridhar Malavali uint8_t fw_hbt_cnt; 4838ae6d9c7SGiridhar Malavali uint8_t fw_hbt_miss_cnt; 4848ae6d9c7SGiridhar Malavali uint32_t old_fw_hbt_cnt; 4858ae6d9c7SGiridhar Malavali uint16_t fw_reset_timer_tick; 4868ae6d9c7SGiridhar Malavali uint8_t fw_reset_timer_exp; 48771e56003SArmen Baloyan uint16_t fw_critemp_timer_tick; 4888ae6d9c7SGiridhar Malavali uint32_t old_aenmbx0_state; 48971e56003SArmen Baloyan uint32_t critical_temperature; 4901fe19ee4SArmen Baloyan bool extended_io_enabled; 491e8f5e95dSArmen Baloyan bool host_info_resend; 492e8f5e95dSArmen Baloyan uint8_t hinfo_resend_timer_tick; 4938ae6d9c7SGiridhar Malavali }; 4948ae6d9c7SGiridhar Malavali 4951fe19ee4SArmen Baloyan #define QLAFX00_EXTENDED_IO_EN_MASK 0x20 4961fe19ee4SArmen Baloyan 49771e56003SArmen Baloyan /* 49871e56003SArmen Baloyan * SoC Junction Temperature is stored in 49971e56003SArmen Baloyan * bits 9:1 of SoC Junction Temperature Register 50071e56003SArmen Baloyan * in a firmware specific format format. 50171e56003SArmen Baloyan * To get the temperature in Celsius degrees 50271e56003SArmen Baloyan * the value from this bitfiled should be converted 50371e56003SArmen Baloyan * using this formula: 50471e56003SArmen Baloyan * Temperature (degrees C) = ((3,153,000 - (10,000 * X)) / 13,825) 50571e56003SArmen Baloyan * where X is the bit field value 50671e56003SArmen Baloyan * this macro reads the register, extracts the bitfield value, 50771e56003SArmen Baloyan * performs the calcualtions and returns temperature in Celsius 50871e56003SArmen Baloyan */ 50971e56003SArmen Baloyan #define QLAFX00_GET_TEMPERATURE(ha) ((3153000 - (10000 * \ 51071e56003SArmen Baloyan ((QLAFX00_RD_REG(ha, QLAFX00_SOC_TEMP_REG) & 0x3FE) >> 1))) / 13825) 51171e56003SArmen Baloyan 51271e56003SArmen Baloyan 5138ae6d9c7SGiridhar Malavali #define QLAFX00_LOOP_DOWN_TIME 615 /* 600 */ 5148ae6d9c7SGiridhar Malavali #define QLAFX00_HEARTBEAT_INTERVAL 6 /* number of seconds */ 5158ae6d9c7SGiridhar Malavali #define QLAFX00_HEARTBEAT_MISS_CNT 3 /* number of miss */ 5168ae6d9c7SGiridhar Malavali #define QLAFX00_RESET_INTERVAL 120 /* number of seconds */ 5178ae6d9c7SGiridhar Malavali #define QLAFX00_MAX_RESET_INTERVAL 600 /* number of seconds */ 51871e56003SArmen Baloyan #define QLAFX00_CRITEMP_INTERVAL 60 /* number of seconds */ 519e8f5e95dSArmen Baloyan #define QLAFX00_HINFO_RESEND_INTERVAL 60 /* number of seconds */ 520f875cd4cSArmen Baloyan 521f875cd4cSArmen Baloyan #define QLAFX00_CRITEMP_THRSHLD 80 /* Celsius degrees */ 522f875cd4cSArmen Baloyan 523a4e04d9aSArmen Baloyan /* Max conncurrent IOs that can be queued */ 524a4e04d9aSArmen Baloyan #define QLAFX00_MAX_CANQUEUE 1024 525a4e04d9aSArmen Baloyan 526b593931dSArmen Baloyan /* IOCTL IOCB abort success */ 527b593931dSArmen Baloyan #define QLAFX00_IOCTL_ICOB_ABORT_SUCCESS 0x68 528b593931dSArmen Baloyan 5298ae6d9c7SGiridhar Malavali #endif 530