1167514Skmacy/************************************************************************** 2167514Skmacy 3177340SkmacyCopyright (c) 2007-2008, 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$ 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_GETMTUTAB, 41167514Skmacy CH_SETMTUTAB, 42167514Skmacy CH_SET_PM, 43167514Skmacy CH_GET_PM, 44167514Skmacy CH_READ_TCAM_WORD, 45167514Skmacy CH_GET_MEM, 46167514Skmacy CH_GET_SGE_CONTEXT, 47167514Skmacy CH_GET_SGE_DESC, 48167514Skmacy CH_LOAD_FW, 49167514Skmacy CH_SET_TRACE_FILTER, 50167514Skmacy CH_GET_QSET_PARAMS, 51167514Skmacy CH_GET_QSET_NUM, 52167514Skmacy CH_SET_PKTSCHED, 53167514Skmacy CH_IFCONF_GETREGS, 54182679Skmacy CH_GET_MIIREG, 55182679Skmacy CH_SET_MIIREG, 56182679Skmacy CH_GET_EEPROM, 57169978Skmacy CH_SET_HW_SCHED, 58182679Skmacy CH_LOAD_BOOT, 59182679Skmacy CH_CLEAR_STATS, 60189643Sgnn CH_GET_UP_LA, 61189643Sgnn CH_GET_UP_IOQS, 62207643Snp CH_SET_FILTER, 63207643Snp CH_DEL_FILTER, 64207643Snp CH_GET_FILTER, 65167514Skmacy}; 66167514Skmacy 67182679Skmacy/* statistics categories */ 68182679Skmacyenum { 69182679Skmacy STATS_PORT = 1 << 1, 70182679Skmacy STATS_QUEUE = 1 << 2, 71182679Skmacy}; 72182679Skmacy 73167514Skmacystruct ch_reg { 74167514Skmacy uint32_t addr; 75167514Skmacy uint32_t val; 76167514Skmacy}; 77167514Skmacy 78167514Skmacystruct ch_cntxt { 79167514Skmacy uint32_t cntxt_type; 80167514Skmacy uint32_t cntxt_id; 81167514Skmacy uint32_t data[4]; 82167514Skmacy}; 83167514Skmacy 84167514Skmacy/* context types */ 85167514Skmacyenum { CNTXT_TYPE_EGRESS, CNTXT_TYPE_FL, CNTXT_TYPE_RSP, CNTXT_TYPE_CQ }; 86167514Skmacy 87167514Skmacystruct ch_desc { 88167514Skmacy uint32_t queue_num; 89167514Skmacy uint32_t idx; 90167514Skmacy uint32_t size; 91167514Skmacy uint8_t data[128]; 92167514Skmacy}; 93167514Skmacy 94167514Skmacystruct ch_mem_range { 95167514Skmacy uint32_t mem_id; 96167514Skmacy uint32_t addr; 97167514Skmacy uint32_t len; 98167514Skmacy uint32_t version; 99167514Skmacy uint8_t *buf; 100167514Skmacy}; 101167514Skmacy 102182679Skmacyenum { MEM_CM, MEM_PMRX, MEM_PMTX }; /* ch_mem_range.mem_id values */ 103182679Skmacy 104167514Skmacystruct ch_qset_params { 105182679Skmacy uint32_t qset_idx; 106182679Skmacy int32_t txq_size[3]; 107182679Skmacy int32_t rspq_size; 108182679Skmacy int32_t fl_size[2]; 109182679Skmacy int32_t intr_lat; 110182679Skmacy int32_t polling; 111182679Skmacy int32_t lro; 112182679Skmacy int32_t cong_thres; 113182679Skmacy int32_t vector; 114182679Skmacy int32_t qnum; 115167514Skmacy}; 116167514Skmacy 117167514Skmacystruct ch_pktsched_params { 118167514Skmacy uint8_t sched; 119167514Skmacy uint8_t idx; 120167514Skmacy uint8_t min; 121167514Skmacy uint8_t max; 122167514Skmacy uint8_t binding; 123167514Skmacy}; 124167514Skmacy 125167746Skmacystruct ch_hw_sched { 126167746Skmacy uint8_t sched; 127167746Skmacy int8_t mode; 128167746Skmacy int8_t channel; 129167746Skmacy int32_t kbps; /* rate in Kbps */ 130167746Skmacy int32_t class_ipg; /* tenths of nanoseconds */ 131182679Skmacy int32_t flow_ipg; /* usec */ 132167746Skmacy}; 133167746Skmacy 134167514Skmacystruct ch_mtus { 135167514Skmacy uint32_t nmtus; 136167514Skmacy uint16_t mtus[NMTUS]; 137167514Skmacy}; 138167514Skmacy 139167514Skmacystruct ch_pm { 140167514Skmacy uint32_t tx_pg_sz; 141167514Skmacy uint32_t tx_num_pg; 142167514Skmacy uint32_t rx_pg_sz; 143167514Skmacy uint32_t rx_num_pg; 144167514Skmacy uint32_t pm_total; 145167514Skmacy}; 146167514Skmacy 147167514Skmacystruct ch_tcam_word { 148167514Skmacy uint32_t addr; 149167514Skmacy uint32_t buf[3]; 150167514Skmacy}; 151167514Skmacy 152167514Skmacystruct ch_trace { 153167514Skmacy uint32_t sip; 154167514Skmacy uint32_t sip_mask; 155167514Skmacy uint32_t dip; 156167514Skmacy uint32_t dip_mask; 157167514Skmacy uint16_t sport; 158167514Skmacy uint16_t sport_mask; 159167514Skmacy uint16_t dport; 160167514Skmacy uint16_t dport_mask; 161182679Skmacy uint32_t vlan:12; 162182679Skmacy uint32_t vlan_mask:12; 163182679Skmacy uint32_t intf:4; 164182679Skmacy uint32_t intf_mask:4; 165167514Skmacy uint8_t proto; 166167514Skmacy uint8_t proto_mask; 167182679Skmacy uint8_t invert_match:1; 168182679Skmacy uint8_t config_tx:1; 169182679Skmacy uint8_t config_rx:1; 170182679Skmacy uint8_t trace_tx:1; 171182679Skmacy uint8_t trace_rx:1; 172167514Skmacy}; 173167514Skmacy 174167514Skmacy#define REGDUMP_SIZE (4 * 1024) 175167514Skmacy 176182679Skmacystruct ch_ifconf_regs { 177167514Skmacy uint32_t version; 178167514Skmacy uint32_t len; /* bytes */ 179167514Skmacy uint8_t *data; 180167514Skmacy}; 181167514Skmacy 182182679Skmacystruct ch_mii_data { 183167514Skmacy uint32_t phy_id; 184167514Skmacy uint32_t reg_num; 185167514Skmacy uint32_t val_in; 186167514Skmacy uint32_t val_out; 187167514Skmacy}; 188167514Skmacy 189182679Skmacystruct ch_eeprom { 190182679Skmacy uint32_t magic; 191182679Skmacy uint32_t offset; 192182679Skmacy uint32_t len; 193182679Skmacy uint8_t *data; 194182679Skmacy}; 195167514Skmacy 196189643Sgnn#define LA_BUFSIZE (2 * 1024) 197189643Sgnnstruct ch_up_la { 198189643Sgnn uint32_t stopped; 199189643Sgnn uint32_t idx; 200189643Sgnn uint32_t bufsize; 201189643Sgnn uint32_t *data; 202189643Sgnn}; 203189643Sgnn 204189643Sgnnstruct t3_ioq_entry { 205189643Sgnn uint32_t ioq_cp; 206189643Sgnn uint32_t ioq_pp; 207189643Sgnn uint32_t ioq_alen; 208189643Sgnn uint32_t ioq_stats; 209189643Sgnn}; 210189643Sgnn 211189643Sgnn#define IOQS_BUFSIZE (1024) 212189643Sgnnstruct ch_up_ioqs { 213189643Sgnn uint32_t ioq_rx_enable; 214189643Sgnn uint32_t ioq_tx_enable; 215189643Sgnn uint32_t ioq_rx_status; 216189643Sgnn uint32_t ioq_tx_status; 217189643Sgnn uint32_t bufsize; 218189643Sgnn struct t3_ioq_entry *data; 219189643Sgnn}; 220189643Sgnn 221207643Snpstruct ch_filter_tuple { 222207643Snp uint32_t sip; 223207643Snp uint32_t dip; 224207643Snp uint16_t sport; 225207643Snp uint16_t dport; 226207643Snp uint16_t vlan:12; 227207643Snp uint16_t vlan_prio:3; 228207643Snp}; 229207643Snp 230207643Snpstruct ch_filter { 231207643Snp uint32_t filter_id; 232207643Snp struct ch_filter_tuple val; 233207643Snp struct ch_filter_tuple mask; 234207643Snp uint16_t mac_addr_idx; 235207643Snp uint8_t mac_hit:1; 236207643Snp uint8_t proto:2; 237207643Snp 238207643Snp uint8_t want_filter_id:1; 239207643Snp uint8_t pass:1; 240207643Snp uint8_t rss:1; 241207643Snp uint8_t qset; 242207643Snp}; 243207643Snp 244182679Skmacy#define CHELSIO_SETREG _IOW('f', CH_SETREG, struct ch_reg) 245182679Skmacy#define CHELSIO_GETREG _IOWR('f', CH_GETREG, struct ch_reg) 246182679Skmacy#define CHELSIO_GETMTUTAB _IOR('f', CH_GETMTUTAB, struct ch_mtus) 247182679Skmacy#define CHELSIO_SETMTUTAB _IOW('f', CH_SETMTUTAB, struct ch_mtus) 248182679Skmacy#define CHELSIO_SET_PM _IOW('f', CH_SET_PM, struct ch_pm) 249182679Skmacy#define CHELSIO_GET_PM _IOR('f', CH_GET_PM, struct ch_pm) 250182679Skmacy#define CHELSIO_READ_TCAM_WORD _IOWR('f', CH_READ_TCAM_WORD, struct ch_tcam_word) 251182679Skmacy#define CHELSIO_GET_MEM _IOWR('f', CH_GET_MEM, struct ch_mem_range) 252182679Skmacy#define CHELSIO_GET_SGE_CONTEXT _IOWR('f', CH_GET_SGE_CONTEXT, struct ch_cntxt) 253182679Skmacy#define CHELSIO_GET_SGE_DESC _IOWR('f', CH_GET_SGE_DESC, struct ch_desc) 254182679Skmacy#define CHELSIO_LOAD_FW _IOWR('f', CH_LOAD_FW, struct ch_mem_range) 255182679Skmacy#define CHELSIO_SET_TRACE_FILTER _IOW('f', CH_SET_TRACE_FILTER, struct ch_trace) 256182679Skmacy#define CHELSIO_GET_QSET_PARAMS _IOWR('f', CH_GET_QSET_PARAMS, struct ch_qset_params) 257182679Skmacy#define CHELSIO_GET_QSET_NUM _IOR('f', CH_GET_QSET_NUM, struct ch_reg) 258182679Skmacy#define CHELSIO_SET_PKTSCHED _IOW('f', CH_SET_PKTSCHED, struct ch_pktsched_params) 259182679Skmacy#define CHELSIO_SET_HW_SCHED _IOW('f', CH_SET_HW_SCHED, struct ch_hw_sched) 260182679Skmacy#define CHELSIO_LOAD_BOOT _IOW('f', CH_LOAD_BOOT, struct ch_mem_range) 261182679Skmacy#define CHELSIO_CLEAR_STATS _IO('f', CH_CLEAR_STATS) 262182679Skmacy#define CHELSIO_IFCONF_GETREGS _IOWR('f', CH_IFCONF_GETREGS, struct ch_ifconf_regs) 263182679Skmacy#define CHELSIO_GET_MIIREG _IOWR('f', CH_GET_MIIREG, struct ch_mii_data) 264182679Skmacy#define CHELSIO_SET_MIIREG _IOW('f', CH_SET_MIIREG, struct ch_mii_data) 265182679Skmacy#define CHELSIO_GET_EEPROM _IOWR('f', CH_GET_EEPROM, struct ch_eeprom) 266189643Sgnn#define CHELSIO_GET_UP_LA _IOWR('f', CH_GET_UP_LA, struct ch_up_la) 267189643Sgnn#define CHELSIO_GET_UP_IOQS _IOWR('f', CH_GET_UP_IOQS, struct ch_up_ioqs) 268207643Snp#define CHELSIO_SET_FILTER _IOW('f', CH_SET_FILTER, struct ch_filter) 269207643Snp#define CHELSIO_DEL_FILTER _IOW('f', CH_DEL_FILTER, struct ch_filter) 270207643Snp#define CHELSIO_GET_FILTER _IOWR('f', CH_GET_FILTER, struct ch_filter) 271167514Skmacy#endif 272