cxgb_ioctl.h revision 169978
1167514Skmacy/**************************************************************************
2167514Skmacy
3167514SkmacyCopyright (c) 2007, Chelsio Inc.
4167514SkmacyAll rights reserved.
5167514Skmacy
6167514SkmacyRedistribution and use in source and binary forms, with or without
7167514Skmacymodification, are permitted provided that the following conditions are met:
8167514Skmacy
9167514Skmacy 1. Redistributions of source code must retain the above copyright notice,
10167514Skmacy    this list of conditions and the following disclaimer.
11167514Skmacy
12169978Skmacy 2. Neither the name of the Chelsio Corporation nor the names of its
13167514Skmacy    contributors may be used to endorse or promote products derived from
14167514Skmacy    this software without specific prior written permission.
15167514Skmacy
16167514SkmacyTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17167514SkmacyAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18167514SkmacyIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19167514SkmacyARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20167514SkmacyLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21167514SkmacyCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22167514SkmacySUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23167514SkmacyINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24167514SkmacyCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25167514SkmacyARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26167514SkmacyPOSSIBILITY OF SUCH DAMAGE.
27167514Skmacy
28167514Skmacy$FreeBSD: head/sys/dev/cxgb/cxgb_ioctl.h 169978 2007-05-25 09:48:20Z kmacy $
29167514Skmacy
30167514Skmacy***************************************************************************/
31167514Skmacy#ifndef __CHIOCTL_H__
32167514Skmacy#define __CHIOCTL_H__
33167514Skmacy
34167514Skmacy/*
35167514Skmacy * Ioctl commands specific to this driver.
36167514Skmacy */
37167514Skmacyenum {
38167514Skmacy	CH_SETREG = 0x40,
39167514Skmacy	CH_GETREG,
40167514Skmacy	CH_SETTPI,
41167514Skmacy	CH_GETTPI,
42167514Skmacy	CH_DEVUP,
43167514Skmacy	CH_GETMTUTAB,
44167514Skmacy	CH_SETMTUTAB,
45167514Skmacy	CH_GETMTU,
46167514Skmacy	CH_SET_PM,
47167514Skmacy	CH_GET_PM,
48167514Skmacy	CH_GET_TCAM,
49167514Skmacy	CH_SET_TCAM,
50167514Skmacy	CH_GET_TCB,
51167514Skmacy	CH_READ_TCAM_WORD,
52167514Skmacy	CH_GET_MEM,
53167514Skmacy	CH_GET_SGE_CONTEXT,
54167514Skmacy	CH_GET_SGE_DESC,
55167514Skmacy	CH_LOAD_FW,
56167514Skmacy	CH_GET_PROTO,
57167514Skmacy	CH_SET_PROTO,
58167514Skmacy	CH_SET_TRACE_FILTER,
59167514Skmacy	CH_SET_QSET_PARAMS,
60167514Skmacy	CH_GET_QSET_PARAMS,
61167514Skmacy	CH_SET_QSET_NUM,
62167514Skmacy	CH_GET_QSET_NUM,
63167514Skmacy	CH_SET_PKTSCHED,
64167514Skmacy	CH_IFCONF_GETREGS,
65167514Skmacy	CH_GETMIIREGS,
66167514Skmacy	CH_SETMIIREGS,
67169978Skmacy	CH_SET_FILTER,
68169978Skmacy	CH_SET_HW_SCHED,
69167514Skmacy};
70167514Skmacy
71167514Skmacystruct ch_reg {
72167514Skmacy	uint32_t addr;
73167514Skmacy	uint32_t val;
74167514Skmacy};
75167514Skmacy
76167514Skmacystruct ch_cntxt {
77167514Skmacy	uint32_t cntxt_type;
78167514Skmacy	uint32_t cntxt_id;
79167514Skmacy	uint32_t data[4];
80167514Skmacy};
81167514Skmacy
82167514Skmacy/* context types */
83167514Skmacyenum { CNTXT_TYPE_EGRESS, CNTXT_TYPE_FL, CNTXT_TYPE_RSP, CNTXT_TYPE_CQ };
84167514Skmacy
85167514Skmacystruct ch_desc {
86167514Skmacy	uint32_t cmd;
87167514Skmacy	uint32_t queue_num;
88167514Skmacy	uint32_t idx;
89167514Skmacy	uint32_t size;
90167514Skmacy	uint8_t  data[128];
91167514Skmacy};
92167514Skmacy
93167514Skmacystruct ch_mem_range {
94167514Skmacy	uint32_t cmd;
95167514Skmacy	uint32_t mem_id;
96167514Skmacy	uint32_t addr;
97167514Skmacy	uint32_t len;
98167514Skmacy	uint32_t version;
99167514Skmacy	uint8_t  *buf;
100167514Skmacy};
101167514Skmacy
102167514Skmacystruct ch_qset_params {
103167514Skmacy	uint32_t qset_idx;
104167514Skmacy	int32_t  txq_size[3];
105167514Skmacy	int32_t  rspq_size;
106167514Skmacy	int32_t  fl_size[2];
107167514Skmacy	int32_t  intr_lat;
108167514Skmacy	int32_t  polling;
109167514Skmacy	int32_t  cong_thres;
110167746Skmacy	int32_t  vector;
111167746Skmacy	int32_t  qnum;
112167514Skmacy};
113167514Skmacy
114167514Skmacystruct ch_pktsched_params {
115167514Skmacy	uint32_t cmd;
116167514Skmacy	uint8_t  sched;
117167514Skmacy	uint8_t  idx;
118167514Skmacy	uint8_t  min;
119167514Skmacy	uint8_t  max;
120167514Skmacy	uint8_t  binding;
121167514Skmacy};
122167514Skmacy
123167746Skmacystruct ch_hw_sched {
124167746Skmacy	uint32_t cmd;
125167746Skmacy	uint8_t  sched;
126167746Skmacy	int8_t   mode;
127167746Skmacy	int8_t   channel;
128167746Skmacy	int32_t  kbps;        /* rate in Kbps */
129167746Skmacy	int32_t  class_ipg;   /* tenths of nanoseconds */
130167746Skmacy	int32_t  flow_ipg;    /* usec */
131167746Skmacy};
132167746Skmacy
133167514Skmacy#ifndef TCB_SIZE
134167514Skmacy# define TCB_SIZE   128
135167514Skmacy#endif
136167514Skmacy
137167514Skmacy/* TCB size in 32-bit words */
138167514Skmacy#define TCB_WORDS (TCB_SIZE / 4)
139167514Skmacy
140167514Skmacyenum { MEM_CM, MEM_PMRX, MEM_PMTX };   /* ch_mem_range.mem_id values */
141167514Skmacy
142167514Skmacystruct ch_mtus {
143167514Skmacy	uint32_t cmd;
144167514Skmacy	uint32_t nmtus;
145167514Skmacy	uint16_t mtus[NMTUS];
146167514Skmacy};
147167514Skmacy
148167514Skmacystruct ch_pm {
149167514Skmacy	uint32_t cmd;
150167514Skmacy	uint32_t tx_pg_sz;
151167514Skmacy	uint32_t tx_num_pg;
152167514Skmacy	uint32_t rx_pg_sz;
153167514Skmacy	uint32_t rx_num_pg;
154167514Skmacy	uint32_t pm_total;
155167514Skmacy};
156167514Skmacy
157167514Skmacystruct ch_tcam {
158167514Skmacy	uint32_t cmd;
159167514Skmacy	uint32_t tcam_size;
160167514Skmacy	uint32_t nservers;
161167514Skmacy	uint32_t nroutes;
162167514Skmacy	uint32_t nfilters;
163167514Skmacy};
164167514Skmacy
165167514Skmacystruct ch_tcb {
166167514Skmacy	uint32_t cmd;
167167514Skmacy	uint32_t tcb_index;
168167514Skmacy	uint32_t tcb_data[TCB_WORDS];
169167514Skmacy};
170167514Skmacy
171167514Skmacystruct ch_tcam_word {
172167514Skmacy	uint32_t cmd;
173167514Skmacy	uint32_t addr;
174167514Skmacy	uint32_t buf[3];
175167514Skmacy};
176167514Skmacy
177167514Skmacystruct ch_trace {
178167514Skmacy	uint32_t cmd;
179167514Skmacy	uint32_t sip;
180167514Skmacy	uint32_t sip_mask;
181167514Skmacy	uint32_t dip;
182167514Skmacy	uint32_t dip_mask;
183167514Skmacy	uint16_t sport;
184167514Skmacy	uint16_t sport_mask;
185167514Skmacy	uint16_t dport;
186167514Skmacy	uint16_t dport_mask;
187167514Skmacy	uint32_t vlan:12,
188167514Skmacy		vlan_mask:12,
189167514Skmacy		intf:4,
190167514Skmacy		intf_mask:4;
191167514Skmacy	uint8_t  proto;
192167514Skmacy	uint8_t  proto_mask;
193167514Skmacy	uint8_t  invert_match:1,
194167514Skmacy		config_tx:1,
195167514Skmacy		config_rx:1,
196167514Skmacy		trace_tx:1,
197167514Skmacy		trace_rx:1;
198167514Skmacy};
199167514Skmacy
200167514Skmacy#define REGDUMP_SIZE  (4 * 1024)
201167514Skmacy
202167514Skmacystruct ifconf_regs {
203167514Skmacy	uint32_t  version;
204167514Skmacy	uint32_t  len; /* bytes */
205167514Skmacy	uint8_t   *data;
206167514Skmacy};
207167514Skmacy
208167514Skmacystruct mii_data {
209167514Skmacy	uint32_t phy_id;
210167514Skmacy	uint32_t reg_num;
211167514Skmacy	uint32_t val_in;
212167514Skmacy	uint32_t val_out;
213167514Skmacy};
214167514Skmacy
215167514Skmacy#define CHELSIO_SETREG              _IOW('f', CH_SETREG, struct ch_reg)
216167514Skmacy#define CHELSIO_GETREG              _IOWR('f', CH_GETREG, struct ch_reg)
217169978Skmacy#define CHELSIO_READ_TCAM_WORD      _IOR('f', CH_READ_TCAM_WORD, struct ch_tcam)
218167514Skmacy#define CHELSIO_GET_MEM             _IOWR('f', CH_GET_MEM, struct ch_mem_range)
219167514Skmacy#define CHELSIO_GET_SGE_CONTEXT     _IOWR('f', CH_GET_SGE_CONTEXT, struct ch_cntxt)
220167514Skmacy#define CHELSIO_GET_SGE_DESC        _IOWR('f', CH_GET_SGE_DESC, struct ch_desc)
221167514Skmacy#define CHELSIO_GET_QSET_PARAMS     _IOWR('f', CH_GET_QSET_PARAMS, struct ch_qset_params)
222167514Skmacy#define CHELSIO_SET_QSET_PARAMS     _IOW('f', CH_SET_QSET_PARAMS, struct ch_qset_params)
223167514Skmacy#define CHELSIO_GET_QSET_NUM        _IOWR('f', CH_GET_QSET_NUM, struct ch_reg)
224167514Skmacy#define CHELSIO_SET_QSET_NUM        _IOW('f', CH_SET_QSET_NUM, struct ch_reg)
225169978Skmacy#define CHELSIO_GETMTUTAB           _IOR('f', CH_GET_QSET_NUM, struct ch_mtus)
226169978Skmacy#define CHELSIO_SETMTUTAB           _IOW('f', CH_SET_QSET_NUM, struct ch_mtus)
227167514Skmacy
228167514Skmacy
229167514Skmacy#define CHELSIO_SET_TRACE_FILTER    _IOW('f', CH_SET_TRACE_FILTER, struct ch_trace)
230167514Skmacy#define CHELSIO_SET_PKTSCHED        _IOW('f', CH_SET_PKTSCHED, struct ch_pktsched_params)
231167514Skmacy#define CHELSIO_IFCONF_GETREGS      _IOWR('f', CH_IFCONF_GETREGS, struct ifconf_regs)
232167514Skmacy#define SIOCGMIIREG                 _IOWR('f', CH_GETMIIREGS, struct mii_data)
233167514Skmacy#define SIOCSMIIREG                 _IOWR('f', CH_SETMIIREGS, struct mii_data)
234169978Skmacy#define CHELSIO_SET_HW_SCHED        _IOWR('f', CH_SET_HW_SCHED, struct ch_hw_sched)
235169978Skmacy#define CHELSIO_DEVUP               _IO('f', CH_DEVUP)
236167514Skmacy#endif
237