xref: /freebsd/sys/dev/cxgb/cxgb_offload.h (revision 4d846d26)
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 $FreeBSD$
30d722cab4SKip Macy 
31d722cab4SKip Macy ***************************************************************************/
32d722cab4SKip Macy 
33d722cab4SKip Macy #ifndef _CXGB_OFFLOAD_H
34d722cab4SKip Macy #define _CXGB_OFFLOAD_H
35d722cab4SKip Macy 
3609fe6320SNavdeep Parhar #ifdef TCP_OFFLOAD
3709fe6320SNavdeep Parhar enum {
3809fe6320SNavdeep Parhar 	ULD_TOM = 1,
3909fe6320SNavdeep Parhar 	ULD_IWARP = 2,
40d722cab4SKip Macy };
41d722cab4SKip Macy 
4209fe6320SNavdeep Parhar struct adapter;
4309fe6320SNavdeep Parhar struct uld_info {
4409fe6320SNavdeep Parhar 	SLIST_ENTRY(uld_info) link;
4509fe6320SNavdeep Parhar 	int refcount;
4609fe6320SNavdeep Parhar 	int uld_id;
4709fe6320SNavdeep Parhar 	int (*activate)(struct adapter *);
4809fe6320SNavdeep Parhar 	int (*deactivate)(struct adapter *);
4909fe6320SNavdeep Parhar };
50d722cab4SKip Macy 
5109fe6320SNavdeep Parhar struct tom_tunables {
5209fe6320SNavdeep Parhar 	int sndbuf;
5309fe6320SNavdeep Parhar 	int ddp;
5409fe6320SNavdeep Parhar 	int indsz;
5509fe6320SNavdeep Parhar 	int ddp_thres;
56d722cab4SKip Macy };
57d722cab4SKip Macy 
58d722cab4SKip Macy /* CPL message priority levels */
59d722cab4SKip Macy enum {
60d722cab4SKip Macy 	CPL_PRIORITY_DATA = 0,     /* data messages */
61d722cab4SKip Macy 	CPL_PRIORITY_CONTROL = 1   /* offload control messages */
62d722cab4SKip Macy };
63d722cab4SKip Macy 
6409fe6320SNavdeep Parhar #define S_HDR_NDESC	0
6509fe6320SNavdeep Parhar #define M_HDR_NDESC	0xf
6609fe6320SNavdeep Parhar #define V_HDR_NDESC(x)	((x) << S_HDR_NDESC)
6709fe6320SNavdeep Parhar #define G_HDR_NDESC(x)	(((x) >> S_HDR_NDESC) & M_HDR_NDESC)
68d722cab4SKip Macy 
6909fe6320SNavdeep Parhar #define S_HDR_QSET	4
7009fe6320SNavdeep Parhar #define M_HDR_QSET	0xf
7109fe6320SNavdeep Parhar #define V_HDR_QSET(x)	((x) << S_HDR_QSET)
7209fe6320SNavdeep Parhar #define G_HDR_QSET(x)	(((x) >> S_HDR_QSET) & M_HDR_QSET)
73d722cab4SKip Macy 
7409fe6320SNavdeep Parhar #define S_HDR_CTRL	8
7509fe6320SNavdeep Parhar #define V_HDR_CTRL(x)	((x) << S_HDR_CTRL)
7609fe6320SNavdeep Parhar #define F_HDR_CTRL	V_HDR_CTRL(1U)
7709fe6320SNavdeep Parhar 
7809fe6320SNavdeep Parhar #define S_HDR_DF	9
7909fe6320SNavdeep Parhar #define V_HDR_DF(x)	((x) << S_HDR_DF)
8009fe6320SNavdeep Parhar #define F_HDR_DF	V_HDR_DF(1U)
8109fe6320SNavdeep Parhar 
8209fe6320SNavdeep Parhar #define S_HDR_SGL	10
8309fe6320SNavdeep Parhar #define V_HDR_SGL(x)	((x) << S_HDR_SGL)
8409fe6320SNavdeep Parhar #define F_HDR_SGL	V_HDR_SGL(1U)
8509fe6320SNavdeep Parhar 
8609fe6320SNavdeep Parhar struct ofld_hdr
87d722cab4SKip Macy {
8809fe6320SNavdeep Parhar 	void *sgl;	/* SGL, if F_HDR_SGL set in flags */
8909fe6320SNavdeep Parhar 	int plen;	/* amount of payload (in bytes) */
9009fe6320SNavdeep Parhar 	int flags;
91d722cab4SKip Macy };
92d722cab4SKip Macy 
93d722cab4SKip Macy /*
9409fe6320SNavdeep Parhar  * Convenience function for fixed size CPLs that fit in 1 desc.
95d722cab4SKip Macy  */
9609fe6320SNavdeep Parhar #define M_GETHDR_OFLD(qset, ctrl, cpl) \
9709fe6320SNavdeep Parhar     m_gethdr_ofld(qset, ctrl, sizeof(*cpl), (void **)&cpl)
9809fe6320SNavdeep Parhar static inline struct mbuf *
9909fe6320SNavdeep Parhar m_gethdr_ofld(int qset, int ctrl, int cpllen, void **cpl)
100d722cab4SKip Macy {
10109fe6320SNavdeep Parhar 	struct mbuf *m;
10209fe6320SNavdeep Parhar 	struct ofld_hdr *oh;
10309fe6320SNavdeep Parhar 
10409fe6320SNavdeep Parhar 	m = m_gethdr(M_NOWAIT, MT_DATA);
10509fe6320SNavdeep Parhar 	if (m == NULL)
10609fe6320SNavdeep Parhar 		return (NULL);
10709fe6320SNavdeep Parhar 
10809fe6320SNavdeep Parhar 	oh = mtod(m, struct ofld_hdr *);
10909fe6320SNavdeep Parhar 	oh->flags = V_HDR_NDESC(1) | V_HDR_QSET(qset) | V_HDR_CTRL(ctrl);
11009fe6320SNavdeep Parhar 	*cpl = (void *)(oh + 1);
11109fe6320SNavdeep Parhar 	m->m_pkthdr.len = m->m_len = sizeof(*oh) + cpllen;
11209fe6320SNavdeep Parhar 
11309fe6320SNavdeep Parhar 	return (m);
114d722cab4SKip Macy }
115d722cab4SKip Macy 
11609fe6320SNavdeep Parhar int t3_register_uld(struct uld_info *);
11709fe6320SNavdeep Parhar int t3_unregister_uld(struct uld_info *);
11809fe6320SNavdeep Parhar int t3_activate_uld(struct adapter *, int);
11909fe6320SNavdeep Parhar int t3_deactivate_uld(struct adapter *, int);
12009fe6320SNavdeep Parhar #endif	/* TCP_OFFLOAD */
121d722cab4SKip Macy 
12209fe6320SNavdeep Parhar #define CXGB_UNIMPLEMENTED() \
12309fe6320SNavdeep Parhar     panic("IMPLEMENT: %s:%s:%d", __FUNCTION__, __FILE__, __LINE__)
124d722cab4SKip Macy 
125d722cab4SKip Macy #endif
126