1 /* QLogic qed NIC Driver
2 * Copyright (c) 2015-2017 QLogic Corporation
4 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU
6 * General Public License (GPL) Version 2, available from the file
7 * COPYING in the main directory of this source tree, or the
8 * OpenIB.org BSD license below:
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
18 * - Redistributions in binary form must reproduce the above
19 * copyright notice, this list of conditions and the following
20 * disclaimer in the documentation and /or other materials
21 * provided with the distribution.
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33 #ifndef __STORAGE_COMMON__
34 #define __STORAGE_COMMON__
36 /*********************/
38 /*********************/
40 #define SCSI_MAX_NUM_OF_CMDQS (NUM_OF_GLOBAL_QUEUES / 2)
41 #define BDQ_NUM_RESOURCES (4)
44 #define BDQ_ID_IMM_DATA (1)
46 #define BDQ_NUM_IDS (3)
48 #define SCSI_NUM_SGES_SLOW_SGL_THR 8
50 #define BDQ_MAX_EXTERNAL_RING_SIZE BIT(15)
53 #define SCSI_OPCODE_COMPARE_AND_WRITE (0x89)
54 #define SCSI_OPCODE_READ_10 (0x28)
55 #define SCSI_OPCODE_WRITE_6 (0x0A)
56 #define SCSI_OPCODE_WRITE_10 (0x2A)
57 #define SCSI_OPCODE_WRITE_12 (0xAA)
58 #define SCSI_OPCODE_WRITE_16 (0x8A)
59 #define SCSI_OPCODE_WRITE_AND_VERIFY_10 (0x2E)
60 #define SCSI_OPCODE_WRITE_AND_VERIFY_12 (0xAE)
61 #define SCSI_OPCODE_WRITE_AND_VERIFY_16 (0x8E)
63 /* iSCSI Drv opaque */
64 struct iscsi_drv_opaque
{
65 __le16 reserved_zero
[3];
69 /* Scsi 2B/8B opaque union */
71 struct regpair fcoe_opaque
;
72 struct iscsi_drv_opaque iscsi_opaque
;
75 /* SCSI buffer descriptor */
77 struct regpair address
;
78 union scsi_opaque opaque
;
81 /* Scsi Drv BDQ struct */
82 struct scsi_bdq_ram_drv_data
{
83 __le16 external_producer
;
89 struct regpair sge_addr
;
94 /* Cached SGEs section */
95 struct scsi_cached_sges
{
96 struct scsi_sge sge
[4];
99 /* Scsi Drv CMDQ struct */
100 struct scsi_drv_cmdq
{
106 /* Common SCSI init params passed by driver to FW in function init ramrod */
107 struct scsi_init_func_params
{
114 /* SCSI RQ/CQ/CMDQ firmware function init parameters */
115 struct scsi_init_func_queues
{
116 struct regpair glbl_q_params_addr
;
117 __le16 rq_buffer_size
;
118 __le16 cq_num_entries
;
119 __le16 cmdq_num_entries
;
122 #define SCSI_INIT_FUNC_QUEUES_RQ_VALID_MASK 0x1
123 #define SCSI_INIT_FUNC_QUEUES_RQ_VALID_SHIFT 0
124 #define SCSI_INIT_FUNC_QUEUES_IMM_DATA_VALID_MASK 0x1
125 #define SCSI_INIT_FUNC_QUEUES_IMM_DATA_VALID_SHIFT 1
126 #define SCSI_INIT_FUNC_QUEUES_CMD_VALID_MASK 0x1
127 #define SCSI_INIT_FUNC_QUEUES_CMD_VALID_SHIFT 2
128 #define SCSI_INIT_FUNC_QUEUES_TQ_VALID_MASK 0x1
129 #define SCSI_INIT_FUNC_QUEUES_TQ_VALID_SHIFT 3
130 #define SCSI_INIT_FUNC_QUEUES_SOC_EN_MASK 0x1
131 #define SCSI_INIT_FUNC_QUEUES_SOC_EN_SHIFT 4
132 #define SCSI_INIT_FUNC_QUEUES_SOC_NUM_OF_BLOCKS_LOG_MASK 0x7
133 #define SCSI_INIT_FUNC_QUEUES_SOC_NUM_OF_BLOCKS_LOG_SHIFT 5
134 __le16 cq_cmdq_sb_num_arr
[SCSI_MAX_NUM_OF_CMDQS
];
136 u8 queue_relative_offset
;
139 u8 bdq_pbl_num_entries
[BDQ_NUM_IDS
];
141 struct regpair bdq_pbl_base_address
[BDQ_NUM_IDS
];
142 __le16 bdq_xoff_threshold
[BDQ_NUM_IDS
];
143 __le16 cmdq_xoff_threshold
;
144 __le16 bdq_xon_threshold
[BDQ_NUM_IDS
];
145 __le16 cmdq_xon_threshold
;
148 /* Scsi Drv BDQ Data struct (2 BDQ IDs: 0 - RQ, 1 - Immediate Data) */
149 struct scsi_ram_per_bdq_resource_drv_data
{
150 struct scsi_bdq_ram_drv_data drv_data_per_bdq_id
[BDQ_NUM_IDS
];
160 /* SCSI SGL parameters */
161 struct scsi_sgl_params
{
162 struct regpair sgl_addr
;
163 __le32 sgl_total_length
;
170 /* SCSI terminate connection params */
171 struct scsi_terminate_extra_params
{
172 __le16 unsolicited_cq_count
;
177 /* SCSI Task Queue Element */
182 #endif /* __STORAGE_COMMON__ */