blob: 505c0b48a7611c7295760ce33c6132d7fea5fd74 [file] [log] [blame]
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001/* QLogic qed NIC Driver
Mintz, Yuvale8f1cb52017-01-01 13:57:00 +02002 * Copyright (c) 2015-2017 QLogic Corporation
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03003 *
Mintz, Yuvale8f1cb52017-01-01 13:57:00 +02004 * 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:
9 *
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
12 * conditions are met:
13 *
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer.
17 *
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.
22 *
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
30 * SOFTWARE.
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030031 */
32
33#ifndef __STORAGE_COMMON__
34#define __STORAGE_COMMON__
35
Tomer Tayara2e76992017-12-27 19:30:05 +020036/*********************/
37/* SCSI CONSTANTS */
38/*********************/
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030039
Tomer Tayarda090912017-12-27 19:30:07 +020040#define SCSI_MAX_NUM_OF_CMDQS (NUM_OF_GLOBAL_QUEUES / 2)
Tomer Tayara2e76992017-12-27 19:30:05 +020041#define BDQ_NUM_RESOURCES (4)
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030042
Tomer Tayara2e76992017-12-27 19:30:05 +020043#define BDQ_ID_RQ (0)
44#define BDQ_ID_IMM_DATA (1)
Tomer Tayarda090912017-12-27 19:30:07 +020045#define BDQ_ID_TQ (2)
46#define BDQ_NUM_IDS (3)
Mintz, Yuvalbe086e72017-03-11 18:39:18 +020047
Tomer Tayara2e76992017-12-27 19:30:05 +020048#define SCSI_NUM_SGES_SLOW_SGL_THR 8
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030049
Tomer Tayara2e76992017-12-27 19:30:05 +020050#define BDQ_MAX_EXTERNAL_RING_SIZE BIT(15)
51
Tomer Tayarda090912017-12-27 19:30:07 +020052/* SCSI op codes */
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)
62
63/* iSCSI Drv opaque */
64struct iscsi_drv_opaque {
65 __le16 reserved_zero[3];
66 __le16 opaque;
67};
68
69/* Scsi 2B/8B opaque union */
70union scsi_opaque {
71 struct regpair fcoe_opaque;
72 struct iscsi_drv_opaque iscsi_opaque;
73};
74
Tomer Tayara2e76992017-12-27 19:30:05 +020075/* SCSI buffer descriptor */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030076struct scsi_bd {
77 struct regpair address;
Tomer Tayarda090912017-12-27 19:30:07 +020078 union scsi_opaque opaque;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030079};
80
Tomer Tayara2e76992017-12-27 19:30:05 +020081/* Scsi Drv BDQ struct */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030082struct scsi_bdq_ram_drv_data {
83 __le16 external_producer;
84 __le16 reserved0[3];
85};
86
Tomer Tayara2e76992017-12-27 19:30:05 +020087/* SCSI SGE entry */
Mintz, Yuvalbe086e72017-03-11 18:39:18 +020088struct scsi_sge {
89 struct regpair sge_addr;
90 __le32 sge_len;
91 __le32 reserved;
92};
93
Tomer Tayara2e76992017-12-27 19:30:05 +020094/* Cached SGEs section */
Mintz, Yuvalbe086e72017-03-11 18:39:18 +020095struct scsi_cached_sges {
96 struct scsi_sge sge[4];
97};
98
Tomer Tayara2e76992017-12-27 19:30:05 +020099/* Scsi Drv CMDQ struct */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300100struct scsi_drv_cmdq {
101 __le16 cmdq_cons;
102 __le16 reserved0;
103 __le32 reserved1;
104};
105
Tomer Tayara2e76992017-12-27 19:30:05 +0200106/* Common SCSI init params passed by driver to FW in function init ramrod */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300107struct scsi_init_func_params {
108 __le16 num_tasks;
109 u8 log_page_size;
110 u8 debug_mode;
111 u8 reserved2[12];
112};
113
Tomer Tayara2e76992017-12-27 19:30:05 +0200114/* SCSI RQ/CQ/CMDQ firmware function init parameters */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300115struct 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;
120 u8 bdq_resource_id;
121 u8 q_validity;
Tomer Tayara2e76992017-12-27 19:30:05 +0200122#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
Tomer Tayarda090912017-12-27 19:30:07 +0200128#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];
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300135 u8 num_queues;
136 u8 queue_relative_offset;
137 u8 cq_sb_pi;
138 u8 cmdq_sb_pi;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300139 u8 bdq_pbl_num_entries[BDQ_NUM_IDS];
Tomer Tayarda090912017-12-27 19:30:07 +0200140 u8 reserved1;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300141 struct regpair bdq_pbl_base_address[BDQ_NUM_IDS];
142 __le16 bdq_xoff_threshold[BDQ_NUM_IDS];
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300143 __le16 cmdq_xoff_threshold;
Tomer Tayarda090912017-12-27 19:30:07 +0200144 __le16 bdq_xon_threshold[BDQ_NUM_IDS];
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300145 __le16 cmdq_xon_threshold;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300146};
147
Tomer Tayara2e76992017-12-27 19:30:05 +0200148/* Scsi Drv BDQ Data struct (2 BDQ IDs: 0 - RQ, 1 - Immediate Data) */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300149struct scsi_ram_per_bdq_resource_drv_data {
150 struct scsi_bdq_ram_drv_data drv_data_per_bdq_id[BDQ_NUM_IDS];
151};
152
Tomer Tayara2e76992017-12-27 19:30:05 +0200153/* SCSI SGL types */
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200154enum scsi_sgl_mode {
155 SCSI_TX_SLOW_SGL,
156 SCSI_FAST_SGL,
157 MAX_SCSI_SGL_MODE
158};
159
Tomer Tayara2e76992017-12-27 19:30:05 +0200160/* SCSI SGL parameters */
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200161struct scsi_sgl_params {
162 struct regpair sgl_addr;
163 __le32 sgl_total_length;
164 __le32 sge_offset;
165 __le16 sgl_num_sges;
166 u8 sgl_index;
167 u8 reserved;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300168};
169
Tomer Tayara2e76992017-12-27 19:30:05 +0200170/* SCSI terminate connection params */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300171struct scsi_terminate_extra_params {
172 __le16 unsolicited_cq_count;
173 __le16 cmdq_count;
174 u8 reserved[4];
175};
176
Tomer Tayarda090912017-12-27 19:30:07 +0200177/* SCSI Task Queue Element */
178struct scsi_tqe {
179 __le16 itid;
180};
181
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300182#endif /* __STORAGE_COMMON__ */