Merge branch 'next' into for-linus
[sfrench/cifs-2.6.git] / include / linux / qed / storage_common.h
1 /* QLogic qed NIC Driver
2  * Copyright (c) 2015-2017  QLogic Corporation
3  *
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:
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.
31  */
32
33 #ifndef __STORAGE_COMMON__
34 #define __STORAGE_COMMON__
35
36 /*********************/
37 /* SCSI CONSTANTS */
38 /*********************/
39
40 #define SCSI_MAX_NUM_OF_CMDQS           (NUM_OF_GLOBAL_QUEUES / 2)
41 #define BDQ_NUM_RESOURCES               (4)
42
43 #define BDQ_ID_RQ                       (0)
44 #define BDQ_ID_IMM_DATA                 (1)
45 #define BDQ_ID_TQ                       (2)
46 #define BDQ_NUM_IDS                     (3)
47
48 #define SCSI_NUM_SGES_SLOW_SGL_THR      8
49
50 #define BDQ_MAX_EXTERNAL_RING_SIZE      BIT(15)
51
52 /* 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 */
64 struct iscsi_drv_opaque {
65         __le16 reserved_zero[3];
66         __le16 opaque;
67 };
68
69 /* Scsi 2B/8B opaque union */
70 union scsi_opaque {
71         struct regpair fcoe_opaque;
72         struct iscsi_drv_opaque iscsi_opaque;
73 };
74
75 /* SCSI buffer descriptor */
76 struct scsi_bd {
77         struct regpair address;
78         union scsi_opaque opaque;
79 };
80
81 /* Scsi Drv BDQ struct */
82 struct scsi_bdq_ram_drv_data {
83         __le16 external_producer;
84         __le16 reserved0[3];
85 };
86
87 /* SCSI SGE entry */
88 struct scsi_sge {
89         struct regpair sge_addr;
90         __le32 sge_len;
91         __le32 reserved;
92 };
93
94 /* Cached SGEs section */
95 struct scsi_cached_sges {
96         struct scsi_sge sge[4];
97 };
98
99 /* Scsi Drv CMDQ struct */
100 struct scsi_drv_cmdq {
101         __le16 cmdq_cons;
102         __le16 reserved0;
103         __le32 reserved1;
104 };
105
106 /* Common SCSI init params passed by driver to FW in function init ramrod */
107 struct scsi_init_func_params {
108         __le16 num_tasks;
109         u8 log_page_size;
110         u8 debug_mode;
111         u8 reserved2[12];
112 };
113
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;
120         u8 bdq_resource_id;
121         u8 q_validity;
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];
135         u8 num_queues;
136         u8 queue_relative_offset;
137         u8 cq_sb_pi;
138         u8 cmdq_sb_pi;
139         u8 bdq_pbl_num_entries[BDQ_NUM_IDS];
140         u8 reserved1;
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;
146 };
147
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];
151 };
152
153 /* SCSI SGL types */
154 enum scsi_sgl_mode {
155         SCSI_TX_SLOW_SGL,
156         SCSI_FAST_SGL,
157         MAX_SCSI_SGL_MODE
158 };
159
160 /* SCSI SGL parameters */
161 struct 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;
168 };
169
170 /* SCSI terminate connection params */
171 struct scsi_terminate_extra_params {
172         __le16 unsolicited_cq_count;
173         __le16 cmdq_count;
174         u8 reserved[4];
175 };
176
177 /* SCSI Task Queue Element */
178 struct scsi_tqe {
179         __le16 itid;
180 };
181
182 #endif /* __STORAGE_COMMON__ */