Unleashed v1.4
[unleashed.git] / usr / src / uts / common / io / cxgbe / t4nex / offload.h
blob1c633c2ea270fa4e2e3a87d334658326308f488f
1 /*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
13 * This file is part of the Chelsio T4 support code.
15 * Copyright (C) 2010-2013 Chelsio Communications. All rights reserved.
17 * This program is distributed in the hope that it will be useful, but WITHOUT
18 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 * FITNESS FOR A PARTICULAR PURPOSE. See the LICENSE file included in this
20 * release for licensing terms and conditions.
23 #ifndef __CXGBE_OFFLOAD_H
24 #define __CXGBE_OFFLOAD_H
27 * Max # of ATIDs. The absolute HW max is 16K but we keep it lower.
29 #define MAX_ATIDS 8192U
31 #define INIT_ULPTX_WR(w, wrlen, atomic, tid) do { \
32 (w)->wr.wr_hi = htonl(V_FW_WR_OP(FW_ULPTX_WR) | \
33 V_FW_WR_ATOMIC(atomic)); \
34 (w)->wr.wr_mid = htonl(V_FW_WR_LEN16(DIV_ROUND_UP(wrlen, 16)) | \
35 V_FW_WR_FLOWID(tid)); \
36 (w)->wr.wr_lo = cpu_to_be64(0); \
37 } while (0)
39 #define INIT_TP_WR(w, tid) do { \
40 (w)->wr.wr_hi = htonl(V_FW_WR_OP(FW_TP_WR) | \
41 V_FW_WR_IMMDLEN(sizeof (*w) - sizeof (w->wr))); \
42 (w)->wr.wr_mid = htonl(V_FW_WR_LEN16(DIV_ROUND_UP(sizeof (*w), 16)) | \
43 V_FW_WR_FLOWID(tid)); \
44 (w)->wr.wr_lo = cpu_to_be64(0); \
45 } while (0)
47 #define INIT_TP_WR_MIT_CPL(w, cpl, tid) do { \
48 INIT_TP_WR(w, tid); \
49 OPCODE_TID(w) = htonl(MK_OPCODE_TID(cpl, tid)); \
50 } while (0)
52 union serv_entry {
53 void *data;
54 union serv_entry *next;
57 union aopen_entry {
58 void *data;
59 union aopen_entry *next;
63 * Holds the size, base address, free list start, etc of the TID, server TID,
64 * and active-open TID tables. The tables themselves are allocated dynamically.
66 struct tid_info {
67 void **tid_tab;
68 unsigned int ntids;
70 union serv_entry *stid_tab;
71 unsigned int nstids;
72 unsigned int stid_base;
74 union aopen_entry *atid_tab;
75 unsigned int natids;
77 struct filter_entry *ftid_tab;
78 unsigned int nftids;
79 unsigned int ftid_base;
80 unsigned int ftids_in_use;
82 kmutex_t atid_lock;
83 union aopen_entry *afree;
84 unsigned int atids_in_use;
86 kmutex_t stid_lock;
87 union serv_entry *sfree;
88 unsigned int stids_in_use;
90 unsigned int tids_in_use;
93 struct t4_range {
94 u_int start;
95 u_int size;
98 struct t4_virt_res { /* virtualized HW resources */
99 struct t4_range ddp;
100 struct t4_range iscsi;
101 struct t4_range stag;
102 struct t4_range rq;
103 struct t4_range pbl;
104 struct t4_range l2t;
107 struct adapter;
108 struct port_info;
110 enum {
111 ULD_TOM = 1,
114 enum cxgb4_control {
115 CXGB4_CONTROL_SET_OFFLOAD_POLICY,
118 struct uld_info {
119 SLIST_ENTRY(uld_info) link;
120 int refcount;
121 int uld_id;
122 int (*attach)(struct adapter *, void **);
123 int (*detach)(void *);
124 int (*rx)(void *, const void *, mblk_t *);
125 int (*control)(void *handle, enum cxgb4_control control, ...);
128 struct uld_softc {
129 struct uld_info *uld;
130 void *softc;
133 struct tom_tunables {
134 int sndbuf;
135 int ddp;
136 int indsz;
137 int ddp_thres;
140 #ifdef TCP_OFFLOAD_ENABLE
141 struct offload_req {
142 __be32 sip[4];
143 __be32 dip[4];
144 __be16 sport;
145 __be16 dport;
146 __u8 ipvers_opentype;
147 __u8 tos;
148 __be16 vlan;
149 __u32 mark;
152 enum { OPEN_TYPE_LISTEN, OPEN_TYPE_ACTIVE, OPEN_TYPE_PASSIVE };
154 struct offload_settings {
155 __u8 offload;
156 int8_t ddp;
157 int8_t rx_coalesce;
158 int8_t cong_algo;
159 int32_t rssq;
160 int16_t sched_class;
161 int8_t tstamp;
162 int8_t sack;
165 #endif
167 extern int t4_register_uld(struct uld_info *ui);
168 extern int t4_unregister_uld(struct uld_info *ui);
170 #endif /* __CXGBE_OFFLOAD_H */