1169978Skmacy/**************************************************************************
2169978Skmacy
3183063SkmacyCopyright (c) 2007-2008, Chelsio Inc.
4169978SkmacyAll rights reserved.
5169978Skmacy
6169978SkmacyRedistribution and use in source and binary forms, with or without
7169978Skmacymodification, are permitted provided that the following conditions are met:
8169978Skmacy
9169978Skmacy 1. Redistributions of source code must retain the above copyright notice,
10169978Skmacy    this list of conditions and the following disclaimer.
11169978Skmacy
12171471Skmacy 2. Neither the name of the Chelsio Corporation nor the names of its
13169978Skmacy    contributors may be used to endorse or promote products derived from
14169978Skmacy    this software without specific prior written permission.
15169978Skmacy
16169978SkmacyTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17169978SkmacyAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18169978SkmacyIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19169978SkmacyARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20169978SkmacyLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21169978SkmacyCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22169978SkmacySUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23169978SkmacyINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24169978SkmacyCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25169978SkmacyARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26169978SkmacyPOSSIBILITY OF SUCH DAMAGE.
27169978Skmacy
28169978Skmacy$FreeBSD: releng/11.0/sys/dev/cxgb/cxgb_offload.h 237263 2012-06-19 07:34:13Z np $
29169978Skmacy
30169978Skmacy***************************************************************************/
31169978Skmacy
32169978Skmacy#ifndef _CXGB_OFFLOAD_H
33169978Skmacy#define _CXGB_OFFLOAD_H
34169978Skmacy
35237263Snp#ifdef TCP_OFFLOAD
36237263Snpenum {
37237263Snp	ULD_TOM = 1,
38237263Snp	ULD_IWARP = 2,
39237263Snp};
40169978Skmacy
41169978Skmacystruct adapter;
42237263Snpstruct uld_info {
43237263Snp	SLIST_ENTRY(uld_info) link;
44237263Snp	int refcount;
45237263Snp	int uld_id;
46237263Snp	int (*activate)(struct adapter *);
47237263Snp	int (*deactivate)(struct adapter *);
48169978Skmacy};
49169978Skmacy
50237263Snpstruct tom_tunables {
51237263Snp	int sndbuf;
52237263Snp	int ddp;
53237263Snp	int indsz;
54237263Snp	int ddp_thres;
55169978Skmacy};
56169978Skmacy
57169978Skmacy/* CPL message priority levels */
58169978Skmacyenum {
59169978Skmacy	CPL_PRIORITY_DATA = 0,     /* data messages */
60169978Skmacy	CPL_PRIORITY_CONTROL = 1   /* offload control messages */
61169978Skmacy};
62169978Skmacy
63237263Snp#define S_HDR_NDESC	0
64237263Snp#define M_HDR_NDESC	0xf
65237263Snp#define V_HDR_NDESC(x)	((x) << S_HDR_NDESC)
66237263Snp#define G_HDR_NDESC(x)	(((x) >> S_HDR_NDESC) & M_HDR_NDESC)
67169978Skmacy
68237263Snp#define S_HDR_QSET	4
69237263Snp#define M_HDR_QSET	0xf
70237263Snp#define V_HDR_QSET(x)	((x) << S_HDR_QSET)
71237263Snp#define G_HDR_QSET(x)	(((x) >> S_HDR_QSET) & M_HDR_QSET)
72169978Skmacy
73237263Snp#define S_HDR_CTRL	8
74237263Snp#define V_HDR_CTRL(x)	((x) << S_HDR_CTRL)
75237263Snp#define F_HDR_CTRL	V_HDR_CTRL(1U)
76169978Skmacy
77237263Snp#define S_HDR_DF	9
78237263Snp#define V_HDR_DF(x)	((x) << S_HDR_DF)
79237263Snp#define F_HDR_DF	V_HDR_DF(1U)
80169978Skmacy
81237263Snp#define S_HDR_SGL	10
82237263Snp#define V_HDR_SGL(x)	((x) << S_HDR_SGL)
83237263Snp#define F_HDR_SGL	V_HDR_SGL(1U)
84169978Skmacy
85237263Snpstruct ofld_hdr
86237263Snp{
87237263Snp	void *sgl;	/* SGL, if F_HDR_SGL set in flags */
88237263Snp	int plen;	/* amount of payload (in bytes) */
89237263Snp	int flags;
90169978Skmacy};
91169978Skmacy
92169978Skmacy/*
93237263Snp * Convenience function for fixed size CPLs that fit in 1 desc.
94169978Skmacy */
95237263Snp#define M_GETHDR_OFLD(qset, ctrl, cpl) \
96237263Snp    m_gethdr_ofld(qset, ctrl, sizeof(*cpl), (void **)&cpl)
97237263Snpstatic inline struct mbuf *
98237263Snpm_gethdr_ofld(int qset, int ctrl, int cpllen, void **cpl)
99169978Skmacy{
100237263Snp	struct mbuf *m;
101237263Snp	struct ofld_hdr *oh;
102169978Skmacy
103237263Snp	m = m_gethdr(M_NOWAIT, MT_DATA);
104237263Snp	if (m == NULL)
105237263Snp		return (NULL);
106169978Skmacy
107237263Snp	oh = mtod(m, struct ofld_hdr *);
108237263Snp	oh->flags = V_HDR_NDESC(1) | V_HDR_QSET(qset) | V_HDR_CTRL(ctrl);
109237263Snp	*cpl = (void *)(oh + 1);
110237263Snp	m->m_pkthdr.len = m->m_len = sizeof(*oh) + cpllen;
111169978Skmacy
112237263Snp	return (m);
113169978Skmacy}
114169978Skmacy
115237263Snpint t3_register_uld(struct uld_info *);
116237263Snpint t3_unregister_uld(struct uld_info *);
117237263Snpint t3_activate_uld(struct adapter *, int);
118237263Snpint t3_deactivate_uld(struct adapter *, int);
119237263Snp#endif	/* TCP_OFFLOAD */
120169978Skmacy
121237263Snp#define CXGB_UNIMPLEMENTED() \
122237263Snp    panic("IMPLEMENT: %s:%s:%d", __FUNCTION__, __FILE__, __LINE__)
123169978Skmacy
124169978Skmacy#endif
125