1d722cab4SKip Macy /**************************************************************************
24d846d26SWarner Losh SPDX-License-Identifier: BSD-2-Clause
3d722cab4SKip Macy
4c5f0f485SKip Macy Copyright (c) 2007-2008, Chelsio Inc.
5d722cab4SKip Macy All rights reserved.
6d722cab4SKip Macy
7d722cab4SKip Macy Redistribution and use in source and binary forms, with or without
8d722cab4SKip Macy modification, are permitted provided that the following conditions are met:
9d722cab4SKip Macy
10d722cab4SKip Macy 1. Redistributions of source code must retain the above copyright notice,
11d722cab4SKip Macy this list of conditions and the following disclaimer.
12d722cab4SKip Macy
13ac3a6d9cSKip Macy 2. Neither the name of the Chelsio Corporation nor the names of its
14d722cab4SKip Macy contributors may be used to endorse or promote products derived from
15d722cab4SKip Macy this software without specific prior written permission.
16d722cab4SKip Macy
17d722cab4SKip Macy THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18d722cab4SKip Macy AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19d722cab4SKip Macy IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20d722cab4SKip Macy ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21d722cab4SKip Macy LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22d722cab4SKip Macy CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23d722cab4SKip Macy SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24d722cab4SKip Macy INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25d722cab4SKip Macy CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26d722cab4SKip Macy ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27d722cab4SKip Macy POSSIBILITY OF SUCH DAMAGE.
28d722cab4SKip Macy
29d722cab4SKip Macy ***************************************************************************/
30d722cab4SKip Macy
31d722cab4SKip Macy #ifndef _CXGB_OFFLOAD_H
32d722cab4SKip Macy #define _CXGB_OFFLOAD_H
33d722cab4SKip Macy
3409fe6320SNavdeep Parhar #ifdef TCP_OFFLOAD
3509fe6320SNavdeep Parhar enum {
3609fe6320SNavdeep Parhar ULD_TOM = 1,
3709fe6320SNavdeep Parhar ULD_IWARP = 2,
38d722cab4SKip Macy };
39d722cab4SKip Macy
4009fe6320SNavdeep Parhar struct adapter;
4109fe6320SNavdeep Parhar struct uld_info {
4209fe6320SNavdeep Parhar SLIST_ENTRY(uld_info) link;
4309fe6320SNavdeep Parhar int refcount;
4409fe6320SNavdeep Parhar int uld_id;
4509fe6320SNavdeep Parhar int (*activate)(struct adapter *);
4609fe6320SNavdeep Parhar int (*deactivate)(struct adapter *);
4709fe6320SNavdeep Parhar };
48d722cab4SKip Macy
4909fe6320SNavdeep Parhar struct tom_tunables {
5009fe6320SNavdeep Parhar int sndbuf;
5109fe6320SNavdeep Parhar int ddp;
5209fe6320SNavdeep Parhar int indsz;
5309fe6320SNavdeep Parhar int ddp_thres;
54d722cab4SKip Macy };
55d722cab4SKip Macy
56d722cab4SKip Macy /* CPL message priority levels */
57d722cab4SKip Macy enum {
58d722cab4SKip Macy CPL_PRIORITY_DATA = 0, /* data messages */
59d722cab4SKip Macy CPL_PRIORITY_CONTROL = 1 /* offload control messages */
60d722cab4SKip Macy };
61d722cab4SKip Macy
6209fe6320SNavdeep Parhar #define S_HDR_NDESC 0
6309fe6320SNavdeep Parhar #define M_HDR_NDESC 0xf
6409fe6320SNavdeep Parhar #define V_HDR_NDESC(x) ((x) << S_HDR_NDESC)
6509fe6320SNavdeep Parhar #define G_HDR_NDESC(x) (((x) >> S_HDR_NDESC) & M_HDR_NDESC)
66d722cab4SKip Macy
6709fe6320SNavdeep Parhar #define S_HDR_QSET 4
6809fe6320SNavdeep Parhar #define M_HDR_QSET 0xf
6909fe6320SNavdeep Parhar #define V_HDR_QSET(x) ((x) << S_HDR_QSET)
7009fe6320SNavdeep Parhar #define G_HDR_QSET(x) (((x) >> S_HDR_QSET) & M_HDR_QSET)
71d722cab4SKip Macy
7209fe6320SNavdeep Parhar #define S_HDR_CTRL 8
7309fe6320SNavdeep Parhar #define V_HDR_CTRL(x) ((x) << S_HDR_CTRL)
7409fe6320SNavdeep Parhar #define F_HDR_CTRL V_HDR_CTRL(1U)
7509fe6320SNavdeep Parhar
7609fe6320SNavdeep Parhar #define S_HDR_DF 9
7709fe6320SNavdeep Parhar #define V_HDR_DF(x) ((x) << S_HDR_DF)
7809fe6320SNavdeep Parhar #define F_HDR_DF V_HDR_DF(1U)
7909fe6320SNavdeep Parhar
8009fe6320SNavdeep Parhar #define S_HDR_SGL 10
8109fe6320SNavdeep Parhar #define V_HDR_SGL(x) ((x) << S_HDR_SGL)
8209fe6320SNavdeep Parhar #define F_HDR_SGL V_HDR_SGL(1U)
8309fe6320SNavdeep Parhar
8409fe6320SNavdeep Parhar struct ofld_hdr
85d722cab4SKip Macy {
8609fe6320SNavdeep Parhar void *sgl; /* SGL, if F_HDR_SGL set in flags */
8709fe6320SNavdeep Parhar int plen; /* amount of payload (in bytes) */
8809fe6320SNavdeep Parhar int flags;
89d722cab4SKip Macy };
90d722cab4SKip Macy
91d722cab4SKip Macy /*
9209fe6320SNavdeep Parhar * Convenience function for fixed size CPLs that fit in 1 desc.
93d722cab4SKip Macy */
9409fe6320SNavdeep Parhar #define M_GETHDR_OFLD(qset, ctrl, cpl) \
9509fe6320SNavdeep Parhar m_gethdr_ofld(qset, ctrl, sizeof(*cpl), (void **)&cpl)
9609fe6320SNavdeep Parhar static inline struct mbuf *
m_gethdr_ofld(int qset,int ctrl,int cpllen,void ** cpl)9709fe6320SNavdeep Parhar m_gethdr_ofld(int qset, int ctrl, int cpllen, void **cpl)
98d722cab4SKip Macy {
9909fe6320SNavdeep Parhar struct mbuf *m;
10009fe6320SNavdeep Parhar struct ofld_hdr *oh;
10109fe6320SNavdeep Parhar
10209fe6320SNavdeep Parhar m = m_gethdr(M_NOWAIT, MT_DATA);
10309fe6320SNavdeep Parhar if (m == NULL)
10409fe6320SNavdeep Parhar return (NULL);
10509fe6320SNavdeep Parhar
10609fe6320SNavdeep Parhar oh = mtod(m, struct ofld_hdr *);
10709fe6320SNavdeep Parhar oh->flags = V_HDR_NDESC(1) | V_HDR_QSET(qset) | V_HDR_CTRL(ctrl);
10809fe6320SNavdeep Parhar *cpl = (void *)(oh + 1);
10909fe6320SNavdeep Parhar m->m_pkthdr.len = m->m_len = sizeof(*oh) + cpllen;
11009fe6320SNavdeep Parhar
11109fe6320SNavdeep Parhar return (m);
112d722cab4SKip Macy }
113d722cab4SKip Macy
11409fe6320SNavdeep Parhar int t3_register_uld(struct uld_info *);
11509fe6320SNavdeep Parhar int t3_unregister_uld(struct uld_info *);
11609fe6320SNavdeep Parhar int t3_activate_uld(struct adapter *, int);
11709fe6320SNavdeep Parhar int t3_deactivate_uld(struct adapter *, int);
11809fe6320SNavdeep Parhar #endif /* TCP_OFFLOAD */
119d722cab4SKip Macy
12009fe6320SNavdeep Parhar #define CXGB_UNIMPLEMENTED() \
12109fe6320SNavdeep Parhar panic("IMPLEMENT: %s:%s:%d", __FUNCTION__, __FILE__, __LINE__)
122d722cab4SKip Macy
123d722cab4SKip Macy #endif
124