cxgb_ioctl.h revision 1.2 1 1.1 jklos /**************************************************************************
2 1.1 jklos
3 1.1 jklos Copyright (c) 2007, Chelsio Inc.
4 1.1 jklos All rights reserved.
5 1.1 jklos
6 1.1 jklos Redistribution and use in source and binary forms, with or without
7 1.1 jklos modification, are permitted provided that the following conditions are met:
8 1.1 jklos
9 1.1 jklos 1. Redistributions of source code must retain the above copyright notice,
10 1.1 jklos this list of conditions and the following disclaimer.
11 1.1 jklos
12 1.1 jklos 2. Neither the name of the Chelsio Corporation nor the names of its
13 1.1 jklos contributors may be used to endorse or promote products derived from
14 1.1 jklos this software without specific prior written permission.
15 1.1 jklos
16 1.1 jklos THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 1.1 jklos AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 1.1 jklos IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 1.1 jklos ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 1.1 jklos LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 1.1 jklos CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 1.1 jklos SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 1.1 jklos INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 1.1 jklos CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 1.1 jklos ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 1.1 jklos POSSIBILITY OF SUCH DAMAGE.
27 1.1 jklos
28 1.1 jklos ***************************************************************************/
29 1.1 jklos #ifndef __CHIOCTL_H__
30 1.1 jklos #define __CHIOCTL_H__
31 1.1 jklos
32 1.2 dholland #include <sys/ioccom.h>
33 1.2 dholland
34 1.2 dholland
35 1.1 jklos /*
36 1.1 jklos * Ioctl commands specific to this driver.
37 1.1 jklos */
38 1.1 jklos enum {
39 1.1 jklos CH_SETREG = 0x40,
40 1.1 jklos CH_GETREG,
41 1.1 jklos CH_SETTPI,
42 1.1 jklos CH_GETTPI,
43 1.1 jklos CH_DEVUP,
44 1.1 jklos CH_GETMTUTAB,
45 1.1 jklos CH_SETMTUTAB,
46 1.1 jklos CH_GETMTU,
47 1.1 jklos CH_SET_PM,
48 1.1 jklos CH_GET_PM,
49 1.1 jklos CH_GET_TCAM,
50 1.1 jklos CH_SET_TCAM,
51 1.1 jklos CH_GET_TCB,
52 1.1 jklos CH_READ_TCAM_WORD,
53 1.1 jklos CH_GET_MEM,
54 1.1 jklos CH_GET_SGE_CONTEXT,
55 1.1 jklos CH_GET_SGE_DESC,
56 1.1 jklos CH_LOAD_FW,
57 1.1 jklos CH_GET_PROTO,
58 1.1 jklos CH_SET_PROTO,
59 1.1 jklos CH_SET_TRACE_FILTER,
60 1.1 jklos CH_SET_QSET_PARAMS,
61 1.1 jklos CH_GET_QSET_PARAMS,
62 1.1 jklos CH_SET_QSET_NUM,
63 1.1 jklos CH_GET_QSET_NUM,
64 1.1 jklos CH_SET_PKTSCHED,
65 1.1 jklos CH_IFCONF_GETREGS,
66 1.1 jklos CH_GETMIIREGS,
67 1.1 jklos CH_SETMIIREGS,
68 1.1 jklos CH_SET_FILTER,
69 1.1 jklos CH_SET_HW_SCHED,
70 1.1 jklos CH_DEL_FILTER,
71 1.1 jklos };
72 1.1 jklos
73 1.1 jklos struct ch_reg {
74 1.1 jklos uint32_t addr;
75 1.1 jklos uint32_t val;
76 1.1 jklos };
77 1.1 jklos
78 1.1 jklos struct ch_cntxt {
79 1.1 jklos uint32_t cntxt_type;
80 1.1 jklos uint32_t cntxt_id;
81 1.1 jklos uint32_t data[4];
82 1.1 jklos };
83 1.1 jklos
84 1.1 jklos /* context types */
85 1.1 jklos enum { CNTXT_TYPE_EGRESS, CNTXT_TYPE_FL, CNTXT_TYPE_RSP, CNTXT_TYPE_CQ };
86 1.1 jklos
87 1.1 jklos struct ch_desc {
88 1.1 jklos uint32_t cmd;
89 1.1 jklos uint32_t queue_num;
90 1.1 jklos uint32_t idx;
91 1.1 jklos uint32_t size;
92 1.1 jklos uint8_t data[128];
93 1.1 jklos };
94 1.1 jklos
95 1.1 jklos struct ch_mem_range {
96 1.1 jklos uint32_t cmd;
97 1.1 jklos uint32_t mem_id;
98 1.1 jklos uint32_t addr;
99 1.1 jklos uint32_t len;
100 1.1 jklos uint32_t version;
101 1.1 jklos uint8_t *buf;
102 1.1 jklos };
103 1.1 jklos
104 1.1 jklos struct ch_qset_params {
105 1.1 jklos uint32_t qset_idx;
106 1.1 jklos int32_t txq_size[3];
107 1.1 jklos int32_t rspq_size;
108 1.1 jklos int32_t fl_size[2];
109 1.1 jklos int32_t intr_lat;
110 1.1 jklos int32_t polling;
111 1.1 jklos int32_t cong_thres;
112 1.1 jklos int32_t vector;
113 1.1 jklos int32_t qnum;
114 1.1 jklos };
115 1.1 jklos
116 1.1 jklos struct ch_pktsched_params {
117 1.1 jklos uint32_t cmd;
118 1.1 jklos uint8_t sched;
119 1.1 jklos uint8_t idx;
120 1.1 jklos uint8_t min;
121 1.1 jklos uint8_t max;
122 1.1 jklos uint8_t binding;
123 1.1 jklos };
124 1.1 jklos
125 1.1 jklos struct ch_hw_sched {
126 1.1 jklos uint32_t cmd;
127 1.1 jklos uint8_t sched;
128 1.1 jklos int8_t mode;
129 1.1 jklos int8_t channel;
130 1.1 jklos int32_t kbps; /* rate in Kbps */
131 1.1 jklos int32_t class_ipg; /* tenths of nanoseconds */
132 1.1 jklos uint32_t flow_ipg; /* usec */
133 1.1 jklos };
134 1.1 jklos
135 1.1 jklos struct ch_filter_tuple {
136 1.1 jklos uint32_t sip;
137 1.1 jklos uint32_t dip;
138 1.1 jklos uint16_t sport;
139 1.1 jklos uint16_t dport;
140 1.1 jklos uint16_t vlan:12;
141 1.1 jklos uint16_t vlan_prio:3;
142 1.1 jklos };
143 1.1 jklos
144 1.1 jklos struct ch_filter {
145 1.1 jklos uint32_t cmd;
146 1.1 jklos uint32_t filter_id;
147 1.1 jklos struct ch_filter_tuple val;
148 1.1 jklos struct ch_filter_tuple mask;
149 1.1 jklos uint16_t mac_addr_idx;
150 1.1 jklos uint8_t mac_hit:1;
151 1.1 jklos uint8_t proto:2;
152 1.1 jklos
153 1.1 jklos uint8_t want_filter_id:1; /* report filter TID instead of RSS hash */
154 1.1 jklos uint8_t pass:1; /* whether to pass or drop packets */
155 1.1 jklos uint8_t rss:1; /* use RSS or specified qset */
156 1.1 jklos uint8_t qset;
157 1.1 jklos };
158 1.1 jklos
159 1.1 jklos #ifndef TCB_SIZE
160 1.1 jklos # define TCB_SIZE 128
161 1.1 jklos #endif
162 1.1 jklos
163 1.1 jklos /* TCB size in 32-bit words */
164 1.1 jklos #define TCB_WORDS (TCB_SIZE / 4)
165 1.1 jklos
166 1.1 jklos enum { MEM_CM, MEM_PMRX, MEM_PMTX }; /* ch_mem_range.mem_id values */
167 1.1 jklos
168 1.1 jklos struct ch_mtus {
169 1.1 jklos uint32_t cmd;
170 1.1 jklos uint32_t nmtus;
171 1.1 jklos uint16_t mtus[NMTUS];
172 1.1 jklos };
173 1.1 jklos
174 1.1 jklos struct ch_pm {
175 1.1 jklos uint32_t cmd;
176 1.1 jklos uint32_t tx_pg_sz;
177 1.1 jklos uint32_t tx_num_pg;
178 1.1 jklos uint32_t rx_pg_sz;
179 1.1 jklos uint32_t rx_num_pg;
180 1.1 jklos uint32_t pm_total;
181 1.1 jklos };
182 1.1 jklos
183 1.1 jklos struct ch_tcam {
184 1.1 jklos uint32_t cmd;
185 1.1 jklos uint32_t tcam_size;
186 1.1 jklos uint32_t nservers;
187 1.1 jklos uint32_t nroutes;
188 1.1 jklos uint32_t nfilters;
189 1.1 jklos };
190 1.1 jklos
191 1.1 jklos struct ch_tcb {
192 1.1 jklos uint32_t cmd;
193 1.1 jklos uint32_t tcb_index;
194 1.1 jklos uint32_t tcb_data[TCB_WORDS];
195 1.1 jklos };
196 1.1 jklos
197 1.1 jklos struct ch_tcam_word {
198 1.1 jklos uint32_t cmd;
199 1.1 jklos uint32_t addr;
200 1.1 jklos uint32_t buf[3];
201 1.1 jklos };
202 1.1 jklos
203 1.1 jklos struct ch_trace {
204 1.1 jklos uint32_t cmd;
205 1.1 jklos uint32_t sip;
206 1.1 jklos uint32_t sip_mask;
207 1.1 jklos uint32_t dip;
208 1.1 jklos uint32_t dip_mask;
209 1.1 jklos uint16_t sport;
210 1.1 jklos uint16_t sport_mask;
211 1.1 jklos uint16_t dport;
212 1.1 jklos uint16_t dport_mask;
213 1.1 jklos uint32_t vlan:12,
214 1.1 jklos vlan_mask:12,
215 1.1 jklos intf:4,
216 1.1 jklos intf_mask:4;
217 1.1 jklos uint8_t proto;
218 1.1 jklos uint8_t proto_mask;
219 1.1 jklos uint8_t invert_match:1,
220 1.1 jklos config_tx:1,
221 1.1 jklos config_rx:1,
222 1.1 jklos trace_tx:1,
223 1.1 jklos trace_rx:1;
224 1.1 jklos };
225 1.1 jklos
226 1.1 jklos #define REGDUMP_SIZE (4 * 1024)
227 1.1 jklos
228 1.1 jklos struct ifconf_regs {
229 1.1 jklos uint32_t version;
230 1.1 jklos uint32_t len; /* bytes */
231 1.1 jklos uint8_t *data;
232 1.1 jklos };
233 1.1 jklos
234 1.1 jklos struct mii_data {
235 1.1 jklos uint32_t phy_id;
236 1.1 jklos uint32_t reg_num;
237 1.1 jklos uint32_t val_in;
238 1.1 jklos uint32_t val_out;
239 1.1 jklos };
240 1.1 jklos
241 1.1 jklos #define CHELSIO_SETREG _IOW('f', CH_SETREG, struct ch_reg)
242 1.1 jklos #define CHELSIO_GETREG _IOWR('f', CH_GETREG, struct ch_reg)
243 1.1 jklos #define CHELSIO_READ_TCAM_WORD _IOR('f', CH_READ_TCAM_WORD, struct ch_tcam)
244 1.1 jklos #define CHELSIO_GET_MEM _IOWR('f', CH_GET_MEM, struct ch_mem_range)
245 1.1 jklos #define CHELSIO_GET_SGE_CONTEXT _IOWR('f', CH_GET_SGE_CONTEXT, struct ch_cntxt)
246 1.1 jklos #define CHELSIO_GET_SGE_DESC _IOWR('f', CH_GET_SGE_DESC, struct ch_desc)
247 1.1 jklos #define CHELSIO_GET_QSET_PARAMS _IOWR('f', CH_GET_QSET_PARAMS, struct ch_qset_params)
248 1.1 jklos #define CHELSIO_SET_QSET_PARAMS _IOW('f', CH_SET_QSET_PARAMS, struct ch_qset_params)
249 1.1 jklos #define CHELSIO_GET_QSET_NUM _IOWR('f', CH_GET_QSET_NUM, struct ch_reg)
250 1.1 jklos #define CHELSIO_SET_QSET_NUM _IOW('f', CH_SET_QSET_NUM, struct ch_reg)
251 1.1 jklos #define CHELSIO_GETMTUTAB _IOR('f', CH_GET_QSET_NUM, struct ch_mtus)
252 1.1 jklos #define CHELSIO_SETMTUTAB _IOW('f', CH_SET_QSET_NUM, struct ch_mtus)
253 1.1 jklos
254 1.1 jklos
255 1.1 jklos #define CHELSIO_SET_TRACE_FILTER _IOW('f', CH_SET_TRACE_FILTER, struct ch_trace)
256 1.1 jklos #define CHELSIO_SET_PKTSCHED _IOW('f', CH_SET_PKTSCHED, struct ch_pktsched_params)
257 1.1 jklos #define CHELSIO_IFCONF_GETREGS _IOWR('f', CH_IFCONF_GETREGS, struct ifconf_regs)
258 1.1 jklos #define SIOCGMIIREG _IOWR('f', CH_GETMIIREGS, struct mii_data)
259 1.1 jklos #define SIOCSMIIREG _IOWR('f', CH_SETMIIREGS, struct mii_data)
260 1.1 jklos #define CHELSIO_SET_HW_SCHED _IOWR('f', CH_SET_HW_SCHED, struct ch_hw_sched)
261 1.1 jklos #define CHELSIO_SET_FILTER _IOW('f', CH_SET_FILTER, struct ch_filter)
262 1.1 jklos #define CHELSIO_DEL_FILTER _IOW('f', CH_DEL_FILTER, struct ch_filter)
263 1.1 jklos #define CHELSIO_DEVUP _IO('f', CH_DEVUP)
264 1.1 jklos #endif
265