FreeBSD kernel CXGBE device code
offload.h
Go to the documentation of this file.
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3
*
4
* Copyright (c) 2010 Chelsio Communications, Inc.
5
* All rights reserved.
6
* Written by: Navdeep Parhar <np@FreeBSD.org>
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions
10
* are met:
11
* 1. Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* 2. Redistributions in binary form must reproduce the above copyright
14
* notice, this list of conditions and the following disclaimer in the
15
* documentation and/or other materials provided with the distribution.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*
29
* $FreeBSD$
30
*
31
*/
32
33
#ifndef __T4_OFFLOAD_H__
34
#define __T4_OFFLOAD_H__
35
#include <sys/param.h>
36
#include <sys/proc.h>
37
#include <sys/condvar.h>
38
39
#define INIT_ULPTX_WRH(w, wrlen, atomic, tid) do { \
40
(w)->wr_hi = htonl(V_FW_WR_OP(FW_ULPTX_WR) | V_FW_WR_ATOMIC(atomic)); \
41
(w)->wr_mid = htonl(V_FW_WR_LEN16(DIV_ROUND_UP(wrlen, 16)) | \
42
V_FW_WR_FLOWID(tid)); \
43
(w)->wr_lo = cpu_to_be64(0); \
44
} while (0)
45
46
#define INIT_ULPTX_WR(w, wrlen, atomic, tid) \
47
INIT_ULPTX_WRH(&((w)->wr), wrlen, atomic, tid)
48
49
#define INIT_TP_WR(w, tid) do { \
50
(w)->wr.wr_hi = htonl(V_FW_WR_OP(FW_TP_WR) | \
51
V_FW_WR_IMMDLEN(sizeof(*w) - sizeof(w->wr))); \
52
(w)->wr.wr_mid = htonl(V_FW_WR_LEN16(DIV_ROUND_UP(sizeof(*w), 16)) | \
53
V_FW_WR_FLOWID(tid)); \
54
(w)->wr.wr_lo = cpu_to_be64(0); \
55
} while (0)
56
57
#define INIT_TP_WR_MIT_CPL(w, cpl, tid) do { \
58
INIT_TP_WR(w, tid); \
59
OPCODE_TID(w) = htonl(MK_OPCODE_TID(cpl, tid)); \
60
} while (0)
61
62
TAILQ_HEAD
(stid_head,
stid_region
);
63
struct
listen_ctx
;
64
65
struct
stid_region
{
66
TAILQ_ENTRY
(
stid_region
) link;
67
u_int
used
;
/* # of stids used by this region */
68
u_int
free
;
/* # of contiguous stids free right after this region */
69
};
70
71
/*
72
* Max # of ATIDs. The absolute HW max is 14b (enough for 16K) but we reserve
73
* the upper 3b for use as a cookie to demux the reply.
74
*/
75
#define MAX_ATIDS 2048U
76
77
union
aopen_entry
{
78
void
*
data
;
79
union
aopen_entry
*
next
;
80
};
81
82
/* cxgbe_rate_tag flags */
83
enum
{
84
EO_FLOWC_PENDING
= (1 << 0),
/* flowc needs to be sent */
85
EO_FLOWC_RPL_PENDING
= (1 << 1),
/* flowc credits due back */
86
EO_SND_TAG_REF
= (1 << 2),
/* kernel has a ref on us */
87
EO_FLUSH_RPL_PENDING
= (1 << 3),
/* credit flush rpl due back */
88
};
89
90
struct
cxgbe_rate_tag
{
91
struct
m_snd_tag
com
;
92
struct
adapter
*
adapter
;
93
u_int
flags
;
94
struct
mtx
lock
;
95
int
port_id
;
96
int
etid
;
97
struct
mbufq pending_tx,
pending_fwack
;
98
int
plen
;
99
struct
sge_ofld_txq
*
eo_txq
;
100
uint32_t
ctrl0
;
101
uint16_t
iqid
;
102
int8_t
schedcl
;
103
uint64_t
max_rate
;
/* in bytes/s */
104
uint8_t
tx_total
;
/* total tx WR credits (in 16B units) */
105
uint8_t
tx_credits
;
/* tx WR credits (in 16B units) available */
106
uint8_t
tx_nocompl
;
/* tx WR credits since last compl request */
107
uint8_t
ncompl
;
/* # of completions outstanding. */
108
};
109
110
static
inline
struct
cxgbe_rate_tag
*
111
mst_to_crt
(
struct
m_snd_tag *t)
112
{
113
return
(__containerof(t,
struct
cxgbe_rate_tag
,
com
));
114
}
115
116
union
etid_entry
{
117
struct
cxgbe_rate_tag
*
cst
;
118
union
etid_entry
*
next
;
119
};
120
121
/*
122
* Holds the size, base address, start, end, etc. of various types of TIDs. The
123
* tables themselves are allocated dynamically.
124
*/
125
struct
tid_info
{
126
u_int
nstids
;
127
u_int
stid_base
;
128
129
u_int
natids
;
130
131
u_int
nftids
;
132
u_int
ftid_base
;
133
u_int
ftid_end
;
134
135
u_int
nhpftids
;
136
u_int
hpftid_base
;
137
u_int
hpftid_end
;
138
139
u_int
ntids
;
140
u_int
tid_base
;
141
142
u_int
netids
;
143
u_int
etid_base
;
144
u_int
etid_end
;
145
146
struct
mtx stid_lock
__aligned
(CACHE_LINE_SIZE);
147
struct
listen_ctx
**
stid_tab
;
148
u_int
stids_in_use
;
149
u_int
nstids_free_head
;
/* # of available stids at the beginning */
150
struct
stid_head
stids
;
151
152
struct
mtx atid_lock
__aligned
(CACHE_LINE_SIZE);
153
union
aopen_entry
*
atid_tab
;
154
union
aopen_entry
*
afree
;
155
u_int
atids_in_use
;
156
157
/* High priority filters and normal filters share the lock and cv. */
158
struct
mtx ftid_lock
__aligned
(CACHE_LINE_SIZE);
159
struct
cv
ftid_cv
;
160
struct
filter_entry
*
ftid_tab
;
161
struct
filter_entry
*
hpftid_tab
;
162
u_int
ftids_in_use
;
163
u_int
hpftids_in_use
;
164
165
/*
166
* hashfilter and TOE are mutually exclusive and both use ntids and
167
* tids_in_use. The lock and cv are used only by hashfilter.
168
*/
169
struct
mtx hftid_lock
__aligned
(CACHE_LINE_SIZE);
170
struct
cv
hftid_cv
;
171
void
**
tid_tab
;
172
u_int
tids_in_use
;
173
174
void
*
hftid_hash_4t
;
/* LIST_HEAD(, filter_entry) *hftid_hash_4t; */
175
u_long
hftid_4t_mask
;
176
void
*
hftid_hash_tid
;
/* LIST_HEAD(, filter_entry) *hftid_hash_tid; */
177
u_long
hftid_tid_mask
;
178
179
struct
mtx etid_lock
__aligned
(CACHE_LINE_SIZE);
180
union
etid_entry
*
etid_tab
;
181
union
etid_entry
*
efree
;
182
u_int
etids_in_use
;
183
};
184
185
struct
t4_range
{
186
u_int
start
;
187
u_int
size
;
188
};
189
190
struct
t4_virt_res
{
/* virtualized HW resources */
191
struct
t4_range
ddp
;
192
struct
t4_range
iscsi
;
193
struct
t4_range
stag
;
194
struct
t4_range
rq
;
195
struct
t4_range
pbl
;
196
struct
t4_range
qp
;
197
struct
t4_range
cq
;
198
struct
t4_range
srq
;
199
struct
t4_range
ocq
;
200
struct
t4_range
l2t
;
201
struct
t4_range
key
;
202
};
203
204
enum
{
205
ULD_TOM
= 0,
206
ULD_IWARP
,
207
ULD_ISCSI
,
208
ULD_MAX
=
ULD_ISCSI
209
};
210
211
struct
adapter
;
212
struct
port_info
;
213
struct
uld_info
{
214
SLIST_ENTRY
(
uld_info
) link;
215
int
refcount
;
216
int
uld_id
;
217
int (*
activate
)(
struct
adapter
*);
218
int (*
deactivate
)(
struct
adapter
*);
219
void (*
async_event
)(
struct
adapter
*);
220
};
221
222
struct
tom_tunables
{
223
int
cong_algorithm
;
224
int
sndbuf
;
225
int
ddp
;
226
int
rx_coalesce
;
227
int
tls
;
228
int
tls_rx_timeout
;
229
int
*
tls_rx_ports
;
230
int
num_tls_rx_ports
;
231
int
tx_align
;
232
int
tx_zcopy
;
233
int
cop_managed_offloading
;
234
int
autorcvbuf_inc
;
235
int
update_hc_on_pmtu_change
;
236
int
iso
;
237
};
238
239
/* iWARP driver tunables */
240
struct
iw_tunables
{
241
int
wc_en
;
242
};
243
244
struct
tls_tunables
{
245
int
inline_keys
;
246
int
combo_wrs
;
247
};
248
249
#ifdef TCP_OFFLOAD
250
int
t4_register_uld(
struct
uld_info
*);
251
int
t4_unregister_uld(
struct
uld_info
*);
252
int
t4_activate_uld(
struct
adapter
*,
int
);
253
int
t4_deactivate_uld(
struct
adapter
*,
int
);
254
int
uld_active(
struct
adapter
*,
int
);
255
#endif
256
#endif
EO_FLOWC_PENDING
@ EO_FLOWC_PENDING
Definition:
offload.h:84
EO_SND_TAG_REF
@ EO_SND_TAG_REF
Definition:
offload.h:86
EO_FLOWC_RPL_PENDING
@ EO_FLOWC_RPL_PENDING
Definition:
offload.h:85
EO_FLUSH_RPL_PENDING
@ EO_FLUSH_RPL_PENDING
Definition:
offload.h:87
ULD_ISCSI
@ ULD_ISCSI
Definition:
offload.h:207
ULD_MAX
@ ULD_MAX
Definition:
offload.h:208
ULD_IWARP
@ ULD_IWARP
Definition:
offload.h:206
ULD_TOM
@ ULD_TOM
Definition:
offload.h:205
TAILQ_HEAD
TAILQ_HEAD(stid_head, stid_region)
mst_to_crt
static struct cxgbe_rate_tag * mst_to_crt(struct m_snd_tag *t)
Definition:
offload.h:111
adapter
Definition:
adapter.h:864
cxgbe_rate_tag
Definition:
offload.h:90
cxgbe_rate_tag::plen
int plen
Definition:
offload.h:98
cxgbe_rate_tag::lock
struct mtx lock
Definition:
offload.h:94
cxgbe_rate_tag::max_rate
uint64_t max_rate
Definition:
offload.h:103
cxgbe_rate_tag::port_id
int port_id
Definition:
offload.h:95
cxgbe_rate_tag::iqid
uint16_t iqid
Definition:
offload.h:101
cxgbe_rate_tag::tx_total
uint8_t tx_total
Definition:
offload.h:104
cxgbe_rate_tag::com
struct m_snd_tag com
Definition:
offload.h:91
cxgbe_rate_tag::schedcl
int8_t schedcl
Definition:
offload.h:102
cxgbe_rate_tag::flags
u_int flags
Definition:
offload.h:93
cxgbe_rate_tag::tx_credits
uint8_t tx_credits
Definition:
offload.h:105
cxgbe_rate_tag::ncompl
uint8_t ncompl
Definition:
offload.h:107
cxgbe_rate_tag::tx_nocompl
uint8_t tx_nocompl
Definition:
offload.h:106
cxgbe_rate_tag::eo_txq
struct sge_ofld_txq * eo_txq
Definition:
offload.h:99
cxgbe_rate_tag::adapter
struct adapter * adapter
Definition:
offload.h:92
cxgbe_rate_tag::ctrl0
uint32_t ctrl0
Definition:
offload.h:100
cxgbe_rate_tag::pending_fwack
struct mbufq pending_tx pending_fwack
Definition:
offload.h:97
cxgbe_rate_tag::etid
int etid
Definition:
offload.h:96
filter_entry
Definition:
t4_filter.c:56
iw_tunables
Definition:
offload.h:240
iw_tunables::wc_en
int wc_en
Definition:
offload.h:241
listen_ctx
Definition:
t4_tom.h:259
port_info
Definition:
adapter.h:304
sge_ofld_txq
Definition:
adapter.h:746
stid_region
Definition:
offload.h:65
stid_region::TAILQ_ENTRY
TAILQ_ENTRY(stid_region) link
stid_region::free
u_int free
Definition:
offload.h:68
stid_region::used
u_int used
Definition:
offload.h:67
t4_range
Definition:
offload.h:185
t4_range::start
u_int start
Definition:
offload.h:186
t4_range::size
u_int size
Definition:
offload.h:187
t4_virt_res
Definition:
offload.h:190
t4_virt_res::l2t
struct t4_range l2t
Definition:
offload.h:200
t4_virt_res::pbl
struct t4_range pbl
Definition:
offload.h:195
t4_virt_res::cq
struct t4_range cq
Definition:
offload.h:197
t4_virt_res::key
struct t4_range key
Definition:
offload.h:201
t4_virt_res::stag
struct t4_range stag
Definition:
offload.h:193
t4_virt_res::ocq
struct t4_range ocq
Definition:
offload.h:199
t4_virt_res::srq
struct t4_range srq
Definition:
offload.h:198
t4_virt_res::qp
struct t4_range qp
Definition:
offload.h:196
t4_virt_res::ddp
struct t4_range ddp
Definition:
offload.h:191
t4_virt_res::iscsi
struct t4_range iscsi
Definition:
offload.h:192
t4_virt_res::rq
struct t4_range rq
Definition:
offload.h:194
tid_info
Definition:
offload.h:125
tid_info::nftids
u_int nftids
Definition:
offload.h:131
tid_info::hftid_hash_4t
void * hftid_hash_4t
Definition:
offload.h:174
tid_info::etid_end
u_int etid_end
Definition:
offload.h:144
tid_info::ftid_end
u_int ftid_end
Definition:
offload.h:133
tid_info::efree
union etid_entry * efree
Definition:
offload.h:181
tid_info::etids_in_use
u_int etids_in_use
Definition:
offload.h:182
tid_info::stids_in_use
u_int stids_in_use
Definition:
offload.h:148
tid_info::stid_base
u_int stid_base
Definition:
offload.h:127
tid_info::nhpftids
u_int nhpftids
Definition:
offload.h:135
tid_info::etid_base
u_int etid_base
Definition:
offload.h:143
tid_info::ftid_cv
struct cv ftid_cv
Definition:
offload.h:159
tid_info::hpftid_end
u_int hpftid_end
Definition:
offload.h:137
tid_info::afree
union aopen_entry * afree
Definition:
offload.h:154
tid_info::hpftid_base
u_int hpftid_base
Definition:
offload.h:136
tid_info::etid_tab
union etid_entry * etid_tab
Definition:
offload.h:180
tid_info::atids_in_use
u_int atids_in_use
Definition:
offload.h:155
tid_info::ftid_tab
struct filter_entry * ftid_tab
Definition:
offload.h:160
tid_info::nstids_free_head
u_int nstids_free_head
Definition:
offload.h:149
tid_info::tid_tab
void ** tid_tab
Definition:
offload.h:171
tid_info::hpftid_tab
struct filter_entry * hpftid_tab
Definition:
offload.h:161
tid_info::hftid_4t_mask
u_long hftid_4t_mask
Definition:
offload.h:175
tid_info::tids_in_use
u_int tids_in_use
Definition:
offload.h:172
tid_info::hpftids_in_use
u_int hpftids_in_use
Definition:
offload.h:163
tid_info::natids
u_int natids
Definition:
offload.h:129
tid_info::stids
struct stid_head stids
Definition:
offload.h:150
tid_info::ftid_base
u_int ftid_base
Definition:
offload.h:132
tid_info::stid_tab
struct listen_ctx ** stid_tab
Definition:
offload.h:147
tid_info::ftids_in_use
u_int ftids_in_use
Definition:
offload.h:162
tid_info::nstids
u_int nstids
Definition:
offload.h:126
tid_info::netids
u_int netids
Definition:
offload.h:142
tid_info::tid_base
u_int tid_base
Definition:
offload.h:140
tid_info::__aligned
struct mtx stid_lock __aligned(CACHE_LINE_SIZE)
tid_info::hftid_cv
struct cv hftid_cv
Definition:
offload.h:170
tid_info::hftid_hash_tid
void * hftid_hash_tid
Definition:
offload.h:176
tid_info::atid_tab
union aopen_entry * atid_tab
Definition:
offload.h:153
tid_info::hftid_tid_mask
u_long hftid_tid_mask
Definition:
offload.h:177
tid_info::ntids
u_int ntids
Definition:
offload.h:139
tls_tunables
Definition:
offload.h:244
tls_tunables::inline_keys
int inline_keys
Definition:
offload.h:245
tls_tunables::combo_wrs
int combo_wrs
Definition:
offload.h:246
tom_tunables
Definition:
offload.h:222
tom_tunables::num_tls_rx_ports
int num_tls_rx_ports
Definition:
offload.h:230
tom_tunables::update_hc_on_pmtu_change
int update_hc_on_pmtu_change
Definition:
offload.h:235
tom_tunables::rx_coalesce
int rx_coalesce
Definition:
offload.h:226
tom_tunables::cop_managed_offloading
int cop_managed_offloading
Definition:
offload.h:233
tom_tunables::tx_zcopy
int tx_zcopy
Definition:
offload.h:232
tom_tunables::tls_rx_ports
int * tls_rx_ports
Definition:
offload.h:229
tom_tunables::tls
int tls
Definition:
offload.h:227
tom_tunables::sndbuf
int sndbuf
Definition:
offload.h:224
tom_tunables::iso
int iso
Definition:
offload.h:236
tom_tunables::autorcvbuf_inc
int autorcvbuf_inc
Definition:
offload.h:234
tom_tunables::cong_algorithm
int cong_algorithm
Definition:
offload.h:223
tom_tunables::tx_align
int tx_align
Definition:
offload.h:231
tom_tunables::tls_rx_timeout
int tls_rx_timeout
Definition:
offload.h:228
tom_tunables::ddp
int ddp
Definition:
offload.h:225
uld_info
Definition:
offload.h:213
uld_info::async_event
void(* async_event)(struct adapter *)
Definition:
offload.h:219
uld_info::deactivate
int(* deactivate)(struct adapter *)
Definition:
offload.h:218
uld_info::SLIST_ENTRY
SLIST_ENTRY(uld_info) link
uld_info::uld_id
int uld_id
Definition:
offload.h:216
uld_info::refcount
int refcount
Definition:
offload.h:215
uld_info::activate
int(* activate)(struct adapter *)
Definition:
offload.h:217
aopen_entry
Definition:
offload.h:77
aopen_entry::data
void * data
Definition:
offload.h:78
aopen_entry::next
union aopen_entry * next
Definition:
offload.h:79
etid_entry
Definition:
offload.h:116
etid_entry::next
union etid_entry * next
Definition:
offload.h:118
etid_entry::cst
struct cxgbe_rate_tag * cst
Definition:
offload.h:117
dev
cxgbe
offload.h
Generated by
1.9.3