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