1*14b24e2bSVaishali Kulkarni /*
2*14b24e2bSVaishali Kulkarni * CDDL HEADER START
3*14b24e2bSVaishali Kulkarni *
4*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the
5*14b24e2bSVaishali Kulkarni * Common Development and Distribution License, v.1,  (the "License").
6*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
7*14b24e2bSVaishali Kulkarni *
8*14b24e2bSVaishali Kulkarni * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*14b24e2bSVaishali Kulkarni * or http://opensource.org/licenses/CDDL-1.0.
10*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions
11*14b24e2bSVaishali Kulkarni * and limitations under the License.
12*14b24e2bSVaishali Kulkarni *
13*14b24e2bSVaishali Kulkarni * When distributing Covered Code, include this CDDL HEADER in each
14*14b24e2bSVaishali Kulkarni * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*14b24e2bSVaishali Kulkarni * If applicable, add the following below this CDDL HEADER, with the
16*14b24e2bSVaishali Kulkarni * fields enclosed by brackets "[]" replaced with your own identifying
17*14b24e2bSVaishali Kulkarni * information: Portions Copyright [yyyy] [name of copyright owner]
18*14b24e2bSVaishali Kulkarni *
19*14b24e2bSVaishali Kulkarni * CDDL HEADER END
20*14b24e2bSVaishali Kulkarni */
21*14b24e2bSVaishali Kulkarni 
22*14b24e2bSVaishali Kulkarni /*
23*14b24e2bSVaishali Kulkarni * Copyright 2014-2017 Cavium, Inc.
24*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the Common Development
25*14b24e2bSVaishali Kulkarni * and Distribution License, v.1,  (the "License").
26*14b24e2bSVaishali Kulkarni 
27*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
28*14b24e2bSVaishali Kulkarni 
29*14b24e2bSVaishali Kulkarni * You can obtain a copy of the License at available
30*14b24e2bSVaishali Kulkarni * at http://opensource.org/licenses/CDDL-1.0
31*14b24e2bSVaishali Kulkarni 
32*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions and
33*14b24e2bSVaishali Kulkarni * limitations under the License.
34*14b24e2bSVaishali Kulkarni */
35*14b24e2bSVaishali Kulkarni 
36*14b24e2bSVaishali Kulkarni #ifndef __STORAGE_COMMON__
37*14b24e2bSVaishali Kulkarni #define __STORAGE_COMMON__
38*14b24e2bSVaishali Kulkarni /*********************/
39*14b24e2bSVaishali Kulkarni /* SCSI CONSTANTS */
40*14b24e2bSVaishali Kulkarni /*********************/
41*14b24e2bSVaishali Kulkarni 
42*14b24e2bSVaishali Kulkarni 
43*14b24e2bSVaishali Kulkarni #define NUM_OF_CMDQS_CQS (NUM_OF_GLOBAL_QUEUES / 2)
44*14b24e2bSVaishali Kulkarni // Each Resource ID is one-one-valued mapped by the driver to a BDQ Resource ID (for instance per port)
45*14b24e2bSVaishali Kulkarni #define BDQ_NUM_RESOURCES (4)
46*14b24e2bSVaishali Kulkarni 
47*14b24e2bSVaishali Kulkarni // ID 0 : RQ, ID 1 : IMMEDIATE_DATA:
48*14b24e2bSVaishali Kulkarni #define BDQ_ID_RQ			 (0)
49*14b24e2bSVaishali Kulkarni #define BDQ_ID_IMM_DATA  	 (1)
50*14b24e2bSVaishali Kulkarni #define BDQ_NUM_IDS          (2)
51*14b24e2bSVaishali Kulkarni 
52*14b24e2bSVaishali Kulkarni #define SCSI_NUM_SGES_SLOW_SGL_THR	8
53*14b24e2bSVaishali Kulkarni 
54*14b24e2bSVaishali Kulkarni #define BDQ_MAX_EXTERNAL_RING_SIZE (1<<15)
55*14b24e2bSVaishali Kulkarni 
56*14b24e2bSVaishali Kulkarni 
57*14b24e2bSVaishali Kulkarni 
58*14b24e2bSVaishali Kulkarni 
59*14b24e2bSVaishali Kulkarni /*
60*14b24e2bSVaishali Kulkarni  * SCSI buffer descriptor
61*14b24e2bSVaishali Kulkarni  */
62*14b24e2bSVaishali Kulkarni struct scsi_bd
63*14b24e2bSVaishali Kulkarni {
64*14b24e2bSVaishali Kulkarni 	struct regpair address /* Physical Address of buffer */;
65*14b24e2bSVaishali Kulkarni 	struct regpair opaque /* Driver Metadata (preferably Virtual Address of buffer) */;
66*14b24e2bSVaishali Kulkarni };
67*14b24e2bSVaishali Kulkarni 
68*14b24e2bSVaishali Kulkarni 
69*14b24e2bSVaishali Kulkarni /*
70*14b24e2bSVaishali Kulkarni  * Scsi Drv BDQ struct
71*14b24e2bSVaishali Kulkarni  */
72*14b24e2bSVaishali Kulkarni struct scsi_bdq_ram_drv_data
73*14b24e2bSVaishali Kulkarni {
74*14b24e2bSVaishali Kulkarni 	__le16 external_producer /* BDQ External Producer; updated by driver when it loads BDs to External Ring */;
75*14b24e2bSVaishali Kulkarni 	__le16 reserved0[3];
76*14b24e2bSVaishali Kulkarni };
77*14b24e2bSVaishali Kulkarni 
78*14b24e2bSVaishali Kulkarni 
79*14b24e2bSVaishali Kulkarni /*
80*14b24e2bSVaishali Kulkarni  * SCSI SGE entry
81*14b24e2bSVaishali Kulkarni  */
82*14b24e2bSVaishali Kulkarni struct scsi_sge
83*14b24e2bSVaishali Kulkarni {
84*14b24e2bSVaishali Kulkarni 	struct regpair sge_addr /* SGE address */;
85*14b24e2bSVaishali Kulkarni 	__le32 sge_len /* SGE length */;
86*14b24e2bSVaishali Kulkarni 	__le32 reserved;
87*14b24e2bSVaishali Kulkarni };
88*14b24e2bSVaishali Kulkarni 
89*14b24e2bSVaishali Kulkarni /*
90*14b24e2bSVaishali Kulkarni  * Cached SGEs section
91*14b24e2bSVaishali Kulkarni  */
92*14b24e2bSVaishali Kulkarni struct scsi_cached_sges
93*14b24e2bSVaishali Kulkarni {
94*14b24e2bSVaishali Kulkarni 	struct scsi_sge sge[4] /* Cached SGEs section */;
95*14b24e2bSVaishali Kulkarni };
96*14b24e2bSVaishali Kulkarni 
97*14b24e2bSVaishali Kulkarni 
98*14b24e2bSVaishali Kulkarni /*
99*14b24e2bSVaishali Kulkarni  * Scsi Drv CMDQ struct
100*14b24e2bSVaishali Kulkarni  */
101*14b24e2bSVaishali Kulkarni struct scsi_drv_cmdq
102*14b24e2bSVaishali Kulkarni {
103*14b24e2bSVaishali Kulkarni 	__le16 cmdq_cons /* CMDQ consumer - updated by driver when CMDQ is consumed */;
104*14b24e2bSVaishali Kulkarni 	__le16 reserved0;
105*14b24e2bSVaishali Kulkarni 	__le32 reserved1;
106*14b24e2bSVaishali Kulkarni };
107*14b24e2bSVaishali Kulkarni 
108*14b24e2bSVaishali Kulkarni 
109*14b24e2bSVaishali Kulkarni /*
110*14b24e2bSVaishali Kulkarni  * Common SCSI init params passed by driver to FW in function init ramrod
111*14b24e2bSVaishali Kulkarni  */
112*14b24e2bSVaishali Kulkarni struct scsi_init_func_params
113*14b24e2bSVaishali Kulkarni {
114*14b24e2bSVaishali Kulkarni 	__le16 num_tasks /* Number of tasks in global task list */;
115*14b24e2bSVaishali Kulkarni 	u8 log_page_size /* log of page size value */;
116*14b24e2bSVaishali Kulkarni 	u8 debug_mode /* Use iscsi_debug_mode enum */;
117*14b24e2bSVaishali Kulkarni 	u8 reserved2[12];
118*14b24e2bSVaishali Kulkarni };
119*14b24e2bSVaishali Kulkarni 
120*14b24e2bSVaishali Kulkarni 
121*14b24e2bSVaishali Kulkarni /*
122*14b24e2bSVaishali Kulkarni  * SCSI RQ/CQ/CMDQ firmware function init parameters
123*14b24e2bSVaishali Kulkarni  */
124*14b24e2bSVaishali Kulkarni struct scsi_init_func_queues
125*14b24e2bSVaishali Kulkarni {
126*14b24e2bSVaishali Kulkarni 	struct regpair glbl_q_params_addr /* Global Qs (CQ/RQ/CMDQ) params host address */;
127*14b24e2bSVaishali Kulkarni 	__le16 rq_buffer_size /* The buffer size of RQ BDQ */;
128*14b24e2bSVaishali Kulkarni 	__le16 cq_num_entries /* CQ num entries */;
129*14b24e2bSVaishali Kulkarni 	__le16 cmdq_num_entries /* CMDQ num entries */;
130*14b24e2bSVaishali Kulkarni 	u8 bdq_resource_id /* Each function-init Ramrod maps its funciton ID to a BDQ function ID, each BDQ function ID contains per-BDQ-ID BDQs */;
131*14b24e2bSVaishali Kulkarni 	u8 q_validity;
132*14b24e2bSVaishali Kulkarni #define SCSI_INIT_FUNC_QUEUES_RQ_VALID_MASK        0x1
133*14b24e2bSVaishali Kulkarni #define SCSI_INIT_FUNC_QUEUES_RQ_VALID_SHIFT       0
134*14b24e2bSVaishali Kulkarni #define SCSI_INIT_FUNC_QUEUES_IMM_DATA_VALID_MASK  0x1
135*14b24e2bSVaishali Kulkarni #define SCSI_INIT_FUNC_QUEUES_IMM_DATA_VALID_SHIFT 1
136*14b24e2bSVaishali Kulkarni #define SCSI_INIT_FUNC_QUEUES_CMD_VALID_MASK       0x1
137*14b24e2bSVaishali Kulkarni #define SCSI_INIT_FUNC_QUEUES_CMD_VALID_SHIFT      2
138*14b24e2bSVaishali Kulkarni #define SCSI_INIT_FUNC_QUEUES_RESERVED_VALID_MASK  0x1F
139*14b24e2bSVaishali Kulkarni #define SCSI_INIT_FUNC_QUEUES_RESERVED_VALID_SHIFT 3
140*14b24e2bSVaishali Kulkarni 	u8 num_queues /* Number of continuous global queues used */;
141*14b24e2bSVaishali Kulkarni 	u8 queue_relative_offset /* offset of continuous global queues used */;
142*14b24e2bSVaishali Kulkarni 	u8 cq_sb_pi /* Protocol Index of CQ in status block (CQ consumer) */;
143*14b24e2bSVaishali Kulkarni 	u8 cmdq_sb_pi /* Protocol Index of CMDQ in status block (CMDQ consumer) */;
144*14b24e2bSVaishali Kulkarni 	__le16 cq_cmdq_sb_num_arr[NUM_OF_CMDQS_CQS] /* CQ/CMDQ status block number array */;
145*14b24e2bSVaishali Kulkarni 	__le16 reserved0 /* reserved */;
146*14b24e2bSVaishali Kulkarni 	u8 bdq_pbl_num_entries[BDQ_NUM_IDS] /* Per BDQ ID, the PBL page size (number of entries in PBL) */;
147*14b24e2bSVaishali Kulkarni 	struct regpair bdq_pbl_base_address[BDQ_NUM_IDS] /* Per BDQ ID, the PBL page Base Address */;
148*14b24e2bSVaishali Kulkarni 	__le16 bdq_xoff_threshold[BDQ_NUM_IDS] /* BDQ XOFF threshold - when number of entries will be below that TH, it will send XOFF */;
149*14b24e2bSVaishali Kulkarni 	__le16 bdq_xon_threshold[BDQ_NUM_IDS] /* BDQ XON threshold - when number of entries will be above that TH, it will send XON */;
150*14b24e2bSVaishali Kulkarni 	__le16 cmdq_xoff_threshold /* CMDQ XOFF threshold - when number of entries will be below that TH, it will send XOFF */;
151*14b24e2bSVaishali Kulkarni 	__le16 cmdq_xon_threshold /* CMDQ XON threshold - when number of entries will be above that TH, it will send XON */;
152*14b24e2bSVaishali Kulkarni 	__le32 reserved1 /* reserved */;
153*14b24e2bSVaishali Kulkarni };
154*14b24e2bSVaishali Kulkarni 
155*14b24e2bSVaishali Kulkarni 
156*14b24e2bSVaishali Kulkarni /*
157*14b24e2bSVaishali Kulkarni  * Scsi Drv BDQ Data struct (2 BDQ IDs: 0 - RQ, 1 - Immediate Data)
158*14b24e2bSVaishali Kulkarni  */
159*14b24e2bSVaishali Kulkarni struct scsi_ram_per_bdq_resource_drv_data
160*14b24e2bSVaishali Kulkarni {
161*14b24e2bSVaishali Kulkarni 	struct scsi_bdq_ram_drv_data drv_data_per_bdq_id[BDQ_NUM_IDS] /* External ring data */;
162*14b24e2bSVaishali Kulkarni };
163*14b24e2bSVaishali Kulkarni 
164*14b24e2bSVaishali Kulkarni 
165*14b24e2bSVaishali Kulkarni 
166*14b24e2bSVaishali Kulkarni /*
167*14b24e2bSVaishali Kulkarni  * SCSI SGL types
168*14b24e2bSVaishali Kulkarni  */
169*14b24e2bSVaishali Kulkarni enum scsi_sgl_mode
170*14b24e2bSVaishali Kulkarni {
171*14b24e2bSVaishali Kulkarni 	SCSI_TX_SLOW_SGL /* Slow-SGL: More than SCSI_NUM_SGES_SLOW_SGL_THR SGEs and there is at least 1 middle SGE than is smaller than a page size. May be only at TX  */,
172*14b24e2bSVaishali Kulkarni 	SCSI_FAST_SGL /* Fast SGL: Less than SCSI_NUM_SGES_SLOW_SGL_THR SGEs or all middle SGEs are at least a page size */,
173*14b24e2bSVaishali Kulkarni 	MAX_SCSI_SGL_MODE
174*14b24e2bSVaishali Kulkarni };
175*14b24e2bSVaishali Kulkarni 
176*14b24e2bSVaishali Kulkarni 
177*14b24e2bSVaishali Kulkarni /*
178*14b24e2bSVaishali Kulkarni  * SCSI SGL parameters
179*14b24e2bSVaishali Kulkarni  */
180*14b24e2bSVaishali Kulkarni struct scsi_sgl_params
181*14b24e2bSVaishali Kulkarni {
182*14b24e2bSVaishali Kulkarni 	struct regpair sgl_addr /* SGL base address */;
183*14b24e2bSVaishali Kulkarni 	__le32 sgl_total_length /* SGL total legnth (bytes)  */;
184*14b24e2bSVaishali Kulkarni 	__le32 sge_offset /* Offset in SGE (bytes) */;
185*14b24e2bSVaishali Kulkarni 	__le16 sgl_num_sges /* Number of SGLs sges */;
186*14b24e2bSVaishali Kulkarni 	u8 sgl_index /* SGL index */;
187*14b24e2bSVaishali Kulkarni 	u8 reserved;
188*14b24e2bSVaishali Kulkarni };
189*14b24e2bSVaishali Kulkarni 
190*14b24e2bSVaishali Kulkarni 
191*14b24e2bSVaishali Kulkarni /*
192*14b24e2bSVaishali Kulkarni  * SCSI terminate connection params
193*14b24e2bSVaishali Kulkarni  */
194*14b24e2bSVaishali Kulkarni struct scsi_terminate_extra_params
195*14b24e2bSVaishali Kulkarni {
196*14b24e2bSVaishali Kulkarni 	__le16 unsolicited_cq_count /* Counts number of CQ placements done due to arrival of unsolicited packets on this connection */;
197*14b24e2bSVaishali Kulkarni 	__le16 cmdq_count /* Counts number of CMDQ placements on this connection */;
198*14b24e2bSVaishali Kulkarni 	u8 reserved[4];
199*14b24e2bSVaishali Kulkarni };
200*14b24e2bSVaishali Kulkarni 
201*14b24e2bSVaishali Kulkarni #endif /* __STORAGE_COMMON__ */
202