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$
29169978Skmacy
30169978Skmacy***************************************************************************/
31169978Skmacy
32169978Skmacy#ifndef _CXGB_OFFLOAD_H
33169978Skmacy#define _CXGB_OFFLOAD_H
34169978Skmacy
35237920Snp#ifdef TCP_OFFLOAD
36237920Snpenum {
37237920Snp	ULD_TOM = 1,
38237920Snp	ULD_IWARP = 2,
39237920Snp};
40169978Skmacy
41169978Skmacystruct adapter;
42237920Snpstruct uld_info {
43237920Snp	SLIST_ENTRY(uld_info) link;
44237920Snp	int refcount;
45237920Snp	int uld_id;
46237920Snp	int (*activate)(struct adapter *);
47237920Snp	int (*deactivate)(struct adapter *);
48169978Skmacy};
49169978Skmacy
50237920Snpstruct tom_tunables {
51237920Snp	int sndbuf;
52237920Snp	int ddp;
53237920Snp	int indsz;
54237920Snp	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
63237920Snp#define S_HDR_NDESC	0
64237920Snp#define M_HDR_NDESC	0xf
65237920Snp#define V_HDR_NDESC(x)	((x) << S_HDR_NDESC)
66237920Snp#define G_HDR_NDESC(x)	(((x) >> S_HDR_NDESC) & M_HDR_NDESC)
67169978Skmacy
68237920Snp#define S_HDR_QSET	4
69237920Snp#define M_HDR_QSET	0xf
70237920Snp#define V_HDR_QSET(x)	((x) << S_HDR_QSET)
71237920Snp#define G_HDR_QSET(x)	(((x) >> S_HDR_QSET) & M_HDR_QSET)
72169978Skmacy
73237920Snp#define S_HDR_CTRL	8
74237920Snp#define V_HDR_CTRL(x)	((x) << S_HDR_CTRL)
75237920Snp#define F_HDR_CTRL	V_HDR_CTRL(1U)
76169978Skmacy
77237920Snp#define S_HDR_DF	9
78237920Snp#define V_HDR_DF(x)	((x) << S_HDR_DF)
79237920Snp#define F_HDR_DF	V_HDR_DF(1U)
80169978Skmacy
81237920Snp#define S_HDR_SGL	10
82237920Snp#define V_HDR_SGL(x)	((x) << S_HDR_SGL)
83237920Snp#define F_HDR_SGL	V_HDR_SGL(1U)
84169978Skmacy
85237920Snpstruct ofld_hdr
86237920Snp{
87237920Snp	void *sgl;	/* SGL, if F_HDR_SGL set in flags */
88237920Snp	int plen;	/* amount of payload (in bytes) */
89237920Snp	int flags;
90169978Skmacy};
91169978Skmacy
92169978Skmacy/*
93237920Snp * Convenience function for fixed size CPLs that fit in 1 desc.
94169978Skmacy */
95237920Snp#define M_GETHDR_OFLD(qset, ctrl, cpl) \
96237920Snp    m_gethdr_ofld(qset, ctrl, sizeof(*cpl), (void **)&cpl)
97237920Snpstatic inline struct mbuf *
98237920Snpm_gethdr_ofld(int qset, int ctrl, int cpllen, void **cpl)
99169978Skmacy{
100237920Snp	struct mbuf *m;
101237920Snp	struct ofld_hdr *oh;
102169978Skmacy
103237920Snp	m = m_gethdr(M_NOWAIT, MT_DATA);
104237920Snp	if (m == NULL)
105237920Snp		return (NULL);
106169978Skmacy
107237920Snp	oh = mtod(m, struct ofld_hdr *);
108237920Snp	oh->flags = V_HDR_NDESC(1) | V_HDR_QSET(qset) | V_HDR_CTRL(ctrl);
109237920Snp	*cpl = (void *)(oh + 1);
110237920Snp	m->m_pkthdr.len = m->m_len = sizeof(*oh) + cpllen;
111169978Skmacy
112237920Snp	return (m);
113169978Skmacy}
114169978Skmacy
115237920Snpint t3_register_uld(struct uld_info *);
116237920Snpint t3_unregister_uld(struct uld_info *);
117237920Snpint t3_activate_uld(struct adapter *, int);
118237920Snpint t3_deactivate_uld(struct adapter *, int);
119237920Snp#endif	/* TCP_OFFLOAD */
120169978Skmacy
121237920Snp#define CXGB_UNIMPLEMENTED() \
122237920Snp    panic("IMPLEMENT: %s:%s:%d", __FUNCTION__, __FILE__, __LINE__)
123169978Skmacy
124169978Skmacy#endif
125