xref: /openbmc/linux/include/linux/qed/storage_common.h (revision 4b4193256c8d3bc3a5397b5cd9494c2ad386317d)
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