11f4d4ed6SAlexander Lobakin /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ 27a9b6b8fSYuval Mintz /* QLogic qed NIC Driver 3e8f1cb50SMintz, Yuval * Copyright (c) 2015-2017 QLogic Corporation 4*663eacd8SAlexander Lobakin * Copyright (c) 2019-2020 Marvell International Ltd. 57a9b6b8fSYuval Mintz */ 67a9b6b8fSYuval Mintz 77a9b6b8fSYuval Mintz #ifndef __STORAGE_COMMON__ 87a9b6b8fSYuval Mintz #define __STORAGE_COMMON__ 97a9b6b8fSYuval Mintz 10a2e7699eSTomer Tayar /*********************/ 11a2e7699eSTomer Tayar /* SCSI CONSTANTS */ 12a2e7699eSTomer Tayar /*********************/ 13a2e7699eSTomer Tayar 14da090917STomer Tayar #define SCSI_MAX_NUM_OF_CMDQS (NUM_OF_GLOBAL_QUEUES / 2) 157a9b6b8fSYuval Mintz #define BDQ_NUM_RESOURCES (4) 167a9b6b8fSYuval Mintz 177a9b6b8fSYuval Mintz #define BDQ_ID_RQ (0) 187a9b6b8fSYuval Mintz #define BDQ_ID_IMM_DATA (1) 19da090917STomer Tayar #define BDQ_ID_TQ (2) 20da090917STomer Tayar #define BDQ_NUM_IDS (3) 217a9b6b8fSYuval Mintz 22be086e7cSMintz, Yuval #define SCSI_NUM_SGES_SLOW_SGL_THR 8 23be086e7cSMintz, Yuval 24a2e7699eSTomer Tayar #define BDQ_MAX_EXTERNAL_RING_SIZE BIT(15) 257a9b6b8fSYuval Mintz 26da090917STomer Tayar /* SCSI op codes */ 27da090917STomer Tayar #define SCSI_OPCODE_COMPARE_AND_WRITE (0x89) 28da090917STomer Tayar #define SCSI_OPCODE_READ_10 (0x28) 29da090917STomer Tayar #define SCSI_OPCODE_WRITE_6 (0x0A) 30da090917STomer Tayar #define SCSI_OPCODE_WRITE_10 (0x2A) 31da090917STomer Tayar #define SCSI_OPCODE_WRITE_12 (0xAA) 32da090917STomer Tayar #define SCSI_OPCODE_WRITE_16 (0x8A) 33da090917STomer Tayar #define SCSI_OPCODE_WRITE_AND_VERIFY_10 (0x2E) 34da090917STomer Tayar #define SCSI_OPCODE_WRITE_AND_VERIFY_12 (0xAE) 35da090917STomer Tayar #define SCSI_OPCODE_WRITE_AND_VERIFY_16 (0x8E) 36da090917STomer Tayar 37da090917STomer Tayar /* iSCSI Drv opaque */ 38da090917STomer Tayar struct iscsi_drv_opaque { 39da090917STomer Tayar __le16 reserved_zero[3]; 40da090917STomer Tayar __le16 opaque; 41da090917STomer Tayar }; 42da090917STomer Tayar 43da090917STomer Tayar /* Scsi 2B/8B opaque union */ 44da090917STomer Tayar union scsi_opaque { 45da090917STomer Tayar struct regpair fcoe_opaque; 46da090917STomer Tayar struct iscsi_drv_opaque iscsi_opaque; 47da090917STomer Tayar }; 48da090917STomer Tayar 49a2e7699eSTomer Tayar /* SCSI buffer descriptor */ 507a9b6b8fSYuval Mintz struct scsi_bd { 517a9b6b8fSYuval Mintz struct regpair address; 52da090917STomer Tayar union scsi_opaque opaque; 537a9b6b8fSYuval Mintz }; 547a9b6b8fSYuval Mintz 55a2e7699eSTomer Tayar /* Scsi Drv BDQ struct */ 567a9b6b8fSYuval Mintz struct scsi_bdq_ram_drv_data { 577a9b6b8fSYuval Mintz __le16 external_producer; 587a9b6b8fSYuval Mintz __le16 reserved0[3]; 597a9b6b8fSYuval Mintz }; 607a9b6b8fSYuval Mintz 61a2e7699eSTomer Tayar /* SCSI SGE entry */ 62be086e7cSMintz, Yuval struct scsi_sge { 63be086e7cSMintz, Yuval struct regpair sge_addr; 64be086e7cSMintz, Yuval __le32 sge_len; 65be086e7cSMintz, Yuval __le32 reserved; 66be086e7cSMintz, Yuval }; 67be086e7cSMintz, Yuval 68a2e7699eSTomer Tayar /* Cached SGEs section */ 69be086e7cSMintz, Yuval struct scsi_cached_sges { 70be086e7cSMintz, Yuval struct scsi_sge sge[4]; 71be086e7cSMintz, Yuval }; 72be086e7cSMintz, Yuval 73a2e7699eSTomer Tayar /* Scsi Drv CMDQ struct */ 747a9b6b8fSYuval Mintz struct scsi_drv_cmdq { 757a9b6b8fSYuval Mintz __le16 cmdq_cons; 767a9b6b8fSYuval Mintz __le16 reserved0; 777a9b6b8fSYuval Mintz __le32 reserved1; 787a9b6b8fSYuval Mintz }; 797a9b6b8fSYuval Mintz 80a2e7699eSTomer Tayar /* Common SCSI init params passed by driver to FW in function init ramrod */ 817a9b6b8fSYuval Mintz struct scsi_init_func_params { 827a9b6b8fSYuval Mintz __le16 num_tasks; 837a9b6b8fSYuval Mintz u8 log_page_size; 846459d936SMichal Kalderon u8 log_page_size_conn; 857a9b6b8fSYuval Mintz u8 debug_mode; 866459d936SMichal Kalderon u8 reserved2[11]; 877a9b6b8fSYuval Mintz }; 887a9b6b8fSYuval Mintz 89a2e7699eSTomer Tayar /* SCSI RQ/CQ/CMDQ firmware function init parameters */ 907a9b6b8fSYuval Mintz struct scsi_init_func_queues { 917a9b6b8fSYuval Mintz struct regpair glbl_q_params_addr; 927a9b6b8fSYuval Mintz __le16 rq_buffer_size; 937a9b6b8fSYuval Mintz __le16 cq_num_entries; 947a9b6b8fSYuval Mintz __le16 cmdq_num_entries; 957a9b6b8fSYuval Mintz u8 bdq_resource_id; 967a9b6b8fSYuval Mintz u8 q_validity; 977a9b6b8fSYuval Mintz #define SCSI_INIT_FUNC_QUEUES_RQ_VALID_MASK 0x1 987a9b6b8fSYuval Mintz #define SCSI_INIT_FUNC_QUEUES_RQ_VALID_SHIFT 0 997a9b6b8fSYuval Mintz #define SCSI_INIT_FUNC_QUEUES_IMM_DATA_VALID_MASK 0x1 1007a9b6b8fSYuval Mintz #define SCSI_INIT_FUNC_QUEUES_IMM_DATA_VALID_SHIFT 1 1017a9b6b8fSYuval Mintz #define SCSI_INIT_FUNC_QUEUES_CMD_VALID_MASK 0x1 1027a9b6b8fSYuval Mintz #define SCSI_INIT_FUNC_QUEUES_CMD_VALID_SHIFT 2 103da090917STomer Tayar #define SCSI_INIT_FUNC_QUEUES_TQ_VALID_MASK 0x1 104da090917STomer Tayar #define SCSI_INIT_FUNC_QUEUES_TQ_VALID_SHIFT 3 105da090917STomer Tayar #define SCSI_INIT_FUNC_QUEUES_SOC_EN_MASK 0x1 106da090917STomer Tayar #define SCSI_INIT_FUNC_QUEUES_SOC_EN_SHIFT 4 107da090917STomer Tayar #define SCSI_INIT_FUNC_QUEUES_SOC_NUM_OF_BLOCKS_LOG_MASK 0x7 108da090917STomer Tayar #define SCSI_INIT_FUNC_QUEUES_SOC_NUM_OF_BLOCKS_LOG_SHIFT 5 109da090917STomer Tayar __le16 cq_cmdq_sb_num_arr[SCSI_MAX_NUM_OF_CMDQS]; 1107a9b6b8fSYuval Mintz u8 num_queues; 1117a9b6b8fSYuval Mintz u8 queue_relative_offset; 1127a9b6b8fSYuval Mintz u8 cq_sb_pi; 1137a9b6b8fSYuval Mintz u8 cmdq_sb_pi; 1147a9b6b8fSYuval Mintz u8 bdq_pbl_num_entries[BDQ_NUM_IDS]; 115da090917STomer Tayar u8 reserved1; 1167a9b6b8fSYuval Mintz struct regpair bdq_pbl_base_address[BDQ_NUM_IDS]; 1177a9b6b8fSYuval Mintz __le16 bdq_xoff_threshold[BDQ_NUM_IDS]; 1187a9b6b8fSYuval Mintz __le16 cmdq_xoff_threshold; 119da090917STomer Tayar __le16 bdq_xon_threshold[BDQ_NUM_IDS]; 1207a9b6b8fSYuval Mintz __le16 cmdq_xon_threshold; 1217a9b6b8fSYuval Mintz }; 1227a9b6b8fSYuval Mintz 123a2e7699eSTomer Tayar /* Scsi Drv BDQ Data struct (2 BDQ IDs: 0 - RQ, 1 - Immediate Data) */ 1247a9b6b8fSYuval Mintz struct scsi_ram_per_bdq_resource_drv_data { 1257a9b6b8fSYuval Mintz struct scsi_bdq_ram_drv_data drv_data_per_bdq_id[BDQ_NUM_IDS]; 1267a9b6b8fSYuval Mintz }; 1277a9b6b8fSYuval Mintz 128a2e7699eSTomer Tayar /* SCSI SGL types */ 129be086e7cSMintz, Yuval enum scsi_sgl_mode { 130be086e7cSMintz, Yuval SCSI_TX_SLOW_SGL, 131be086e7cSMintz, Yuval SCSI_FAST_SGL, 132be086e7cSMintz, Yuval MAX_SCSI_SGL_MODE 133be086e7cSMintz, Yuval }; 134be086e7cSMintz, Yuval 135a2e7699eSTomer Tayar /* SCSI SGL parameters */ 136be086e7cSMintz, Yuval struct scsi_sgl_params { 137be086e7cSMintz, Yuval struct regpair sgl_addr; 138be086e7cSMintz, Yuval __le32 sgl_total_length; 139be086e7cSMintz, Yuval __le32 sge_offset; 140be086e7cSMintz, Yuval __le16 sgl_num_sges; 141be086e7cSMintz, Yuval u8 sgl_index; 142be086e7cSMintz, Yuval u8 reserved; 1437a9b6b8fSYuval Mintz }; 1447a9b6b8fSYuval Mintz 145a2e7699eSTomer Tayar /* SCSI terminate connection params */ 1467a9b6b8fSYuval Mintz struct scsi_terminate_extra_params { 1477a9b6b8fSYuval Mintz __le16 unsolicited_cq_count; 1487a9b6b8fSYuval Mintz __le16 cmdq_count; 1497a9b6b8fSYuval Mintz u8 reserved[4]; 1507a9b6b8fSYuval Mintz }; 1517a9b6b8fSYuval Mintz 152da090917STomer Tayar /* SCSI Task Queue Element */ 153da090917STomer Tayar struct scsi_tqe { 154da090917STomer Tayar __le16 itid; 155da090917STomer Tayar }; 156da090917STomer Tayar 1577a9b6b8fSYuval Mintz #endif /* __STORAGE_COMMON__ */ 158