xref: /freebsd/sys/dev/cxgb/cxgb_offload.h (revision 78d14616)
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