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