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