Home | History | Annotate | Line # | Download | only in cxgb
      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