diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 4 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 151 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h | 15 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/t4_regs.h | 33 |
4 files changed, 193 insertions, 10 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h index 24ce797ddbbd..46ddd432cdf2 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | |||
| @@ -35,6 +35,8 @@ | |||
| 35 | #ifndef __CXGB4_H__ | 35 | #ifndef __CXGB4_H__ |
| 36 | #define __CXGB4_H__ | 36 | #define __CXGB4_H__ |
| 37 | 37 | ||
| 38 | #include "t4_hw.h" | ||
| 39 | |||
| 38 | #include <linux/bitops.h> | 40 | #include <linux/bitops.h> |
| 39 | #include <linux/cache.h> | 41 | #include <linux/cache.h> |
| 40 | #include <linux/interrupt.h> | 42 | #include <linux/interrupt.h> |
| @@ -212,6 +214,8 @@ struct tp_err_stats { | |||
| 212 | struct tp_params { | 214 | struct tp_params { |
| 213 | unsigned int ntxchan; /* # of Tx channels */ | 215 | unsigned int ntxchan; /* # of Tx channels */ |
| 214 | unsigned int tre; /* log2 of core clocks per TP tick */ | 216 | unsigned int tre; /* log2 of core clocks per TP tick */ |
| 217 | unsigned short tx_modq_map; /* TX modulation scheduler queue to */ | ||
| 218 | /* channel map */ | ||
| 215 | 219 | ||
| 216 | uint32_t dack_re; /* DACK timer resolution */ | 220 | uint32_t dack_re; /* DACK timer resolution */ |
| 217 | unsigned short tx_modq[NCHAN]; /* channel to modulation queue map */ | 221 | unsigned short tx_modq[NCHAN]; /* channel to modulation queue map */ |
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c index 41537a403eef..888bc7fc7a38 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | |||
| @@ -2481,8 +2481,34 @@ int cxgb4_alloc_stid(struct tid_info *t, int family, void *data) | |||
| 2481 | } | 2481 | } |
| 2482 | EXPORT_SYMBOL(cxgb4_alloc_stid); | 2482 | EXPORT_SYMBOL(cxgb4_alloc_stid); |
| 2483 | 2483 | ||
| 2484 | /* | 2484 | /* Allocate a server filter TID and set it to the supplied value. |
| 2485 | * Release a server TID. | 2485 | */ |
| 2486 | int cxgb4_alloc_sftid(struct tid_info *t, int family, void *data) | ||
| 2487 | { | ||
| 2488 | int stid; | ||
| 2489 | |||
| 2490 | spin_lock_bh(&t->stid_lock); | ||
| 2491 | if (family == PF_INET) { | ||
| 2492 | stid = find_next_zero_bit(t->stid_bmap, | ||
| 2493 | t->nstids + t->nsftids, t->nstids); | ||
| 2494 | if (stid < (t->nstids + t->nsftids)) | ||
| 2495 | __set_bit(stid, t->stid_bmap); | ||
| 2496 | else | ||
| 2497 | stid = -1; | ||
| 2498 | } else { | ||
| 2499 | stid = -1; | ||
| 2500 | } | ||
| 2501 | if (stid >= 0) { | ||
| 2502 | t->stid_tab[stid].data = data; | ||
| 2503 | stid += t->stid_base; | ||
| 2504 | t->stids_in_use++; | ||
| 2505 | } | ||
| 2506 | spin_unlock_bh(&t->stid_lock); | ||
| 2507 | return stid; | ||
| 2508 | } | ||
| 2509 | EXPORT_SYMBOL(cxgb4_alloc_sftid); | ||
| 2510 | |||
| 2511 | /* Release a server TID. | ||
| 2486 | */ | 2512 | */ |
| 2487 | void cxgb4_free_stid(struct tid_info *t, unsigned int stid, int family) | 2513 | void cxgb4_free_stid(struct tid_info *t, unsigned int stid, int family) |
| 2488 | { | 2514 | { |
| @@ -2597,12 +2623,14 @@ static int tid_init(struct tid_info *t) | |||
| 2597 | unsigned int stid_bmap_size; | 2623 | unsigned int stid_bmap_size; |
| 2598 | unsigned int natids = t->natids; | 2624 | unsigned int natids = t->natids; |
| 2599 | 2625 | ||
| 2600 | stid_bmap_size = BITS_TO_LONGS(t->nstids); | 2626 | stid_bmap_size = BITS_TO_LONGS(t->nstids + t->nsftids); |
| 2601 | size = t->ntids * sizeof(*t->tid_tab) + | 2627 | size = t->ntids * sizeof(*t->tid_tab) + |
| 2602 | natids * sizeof(*t->atid_tab) + | 2628 | natids * sizeof(*t->atid_tab) + |
| 2603 | t->nstids * sizeof(*t->stid_tab) + | 2629 | t->nstids * sizeof(*t->stid_tab) + |
| 2630 | t->nsftids * sizeof(*t->stid_tab) + | ||
| 2604 | stid_bmap_size * sizeof(long) + | 2631 | stid_bmap_size * sizeof(long) + |
| 2605 | t->nftids * sizeof(*t->ftid_tab); | 2632 | t->nftids * sizeof(*t->ftid_tab) + |
| 2633 | t->nsftids * sizeof(*t->ftid_tab); | ||
| 2606 | 2634 | ||
| 2607 | t->tid_tab = t4_alloc_mem(size); | 2635 | t->tid_tab = t4_alloc_mem(size); |
| 2608 | if (!t->tid_tab) | 2636 | if (!t->tid_tab) |
| @@ -2610,7 +2638,7 @@ static int tid_init(struct tid_info *t) | |||
| 2610 | 2638 | ||
| 2611 | t->atid_tab = (union aopen_entry *)&t->tid_tab[t->ntids]; | 2639 | t->atid_tab = (union aopen_entry *)&t->tid_tab[t->ntids]; |
| 2612 | t->stid_tab = (struct serv_entry *)&t->atid_tab[natids]; | 2640 | t->stid_tab = (struct serv_entry *)&t->atid_tab[natids]; |
| 2613 | t->stid_bmap = (unsigned long *)&t->stid_tab[t->nstids]; | 2641 | t->stid_bmap = (unsigned long *)&t->stid_tab[t->nstids + t->nsftids]; |
| 2614 | t->ftid_tab = (struct filter_entry *)&t->stid_bmap[stid_bmap_size]; | 2642 | t->ftid_tab = (struct filter_entry *)&t->stid_bmap[stid_bmap_size]; |
| 2615 | spin_lock_init(&t->stid_lock); | 2643 | spin_lock_init(&t->stid_lock); |
| 2616 | spin_lock_init(&t->atid_lock); | 2644 | spin_lock_init(&t->atid_lock); |
| @@ -2626,7 +2654,7 @@ static int tid_init(struct tid_info *t) | |||
| 2626 | t->atid_tab[natids - 1].next = &t->atid_tab[natids]; | 2654 | t->atid_tab[natids - 1].next = &t->atid_tab[natids]; |
| 2627 | t->afree = t->atid_tab; | 2655 | t->afree = t->atid_tab; |
| 2628 | } | 2656 | } |
| 2629 | bitmap_zero(t->stid_bmap, t->nstids); | 2657 | bitmap_zero(t->stid_bmap, t->nstids + t->nsftids); |
| 2630 | return 0; | 2658 | return 0; |
| 2631 | } | 2659 | } |
| 2632 | 2660 | ||
| @@ -2988,6 +3016,7 @@ static void uld_attach(struct adapter *adap, unsigned int uld) | |||
| 2988 | { | 3016 | { |
| 2989 | void *handle; | 3017 | void *handle; |
| 2990 | struct cxgb4_lld_info lli; | 3018 | struct cxgb4_lld_info lli; |
| 3019 | unsigned short i; | ||
| 2991 | 3020 | ||
| 2992 | lli.pdev = adap->pdev; | 3021 | lli.pdev = adap->pdev; |
| 2993 | lli.l2t = adap->l2t; | 3022 | lli.l2t = adap->l2t; |
| @@ -3014,10 +3043,16 @@ static void uld_attach(struct adapter *adap, unsigned int uld) | |||
| 3014 | lli.ucq_density = 1 << QUEUESPERPAGEPF0_GET( | 3043 | lli.ucq_density = 1 << QUEUESPERPAGEPF0_GET( |
| 3015 | t4_read_reg(adap, SGE_INGRESS_QUEUES_PER_PAGE_PF) >> | 3044 | t4_read_reg(adap, SGE_INGRESS_QUEUES_PER_PAGE_PF) >> |
| 3016 | (adap->fn * 4)); | 3045 | (adap->fn * 4)); |
| 3046 | lli.filt_mode = tp_vlan_pri_map; | ||
| 3047 | /* MODQ_REQ_MAP sets queues 0-3 to chan 0-3 */ | ||
| 3048 | for (i = 0; i < NCHAN; i++) | ||
| 3049 | lli.tx_modq[i] = i; | ||
| 3017 | lli.gts_reg = adap->regs + MYPF_REG(SGE_PF_GTS); | 3050 | lli.gts_reg = adap->regs + MYPF_REG(SGE_PF_GTS); |
| 3018 | lli.db_reg = adap->regs + MYPF_REG(SGE_PF_KDOORBELL); | 3051 | lli.db_reg = adap->regs + MYPF_REG(SGE_PF_KDOORBELL); |
| 3019 | lli.fw_vers = adap->params.fw_vers; | 3052 | lli.fw_vers = adap->params.fw_vers; |
| 3020 | lli.dbfifo_int_thresh = dbfifo_int_thresh; | 3053 | lli.dbfifo_int_thresh = dbfifo_int_thresh; |
| 3054 | lli.sge_pktshift = adap->sge.pktshift; | ||
| 3055 | lli.enable_fw_ofld_conn = adap->flags & FW_OFLD_CONN; | ||
| 3021 | 3056 | ||
| 3022 | handle = ulds[uld].add(&lli); | 3057 | handle = ulds[uld].add(&lli); |
| 3023 | if (IS_ERR(handle)) { | 3058 | if (IS_ERR(handle)) { |
| @@ -3258,7 +3293,7 @@ static int delete_filter(struct adapter *adapter, unsigned int fidx) | |||
| 3258 | struct filter_entry *f; | 3293 | struct filter_entry *f; |
| 3259 | int ret; | 3294 | int ret; |
| 3260 | 3295 | ||
| 3261 | if (fidx >= adapter->tids.nftids) | 3296 | if (fidx >= adapter->tids.nftids + adapter->tids.nsftids) |
| 3262 | return -EINVAL; | 3297 | return -EINVAL; |
| 3263 | 3298 | ||
| 3264 | f = &adapter->tids.ftid_tab[fidx]; | 3299 | f = &adapter->tids.ftid_tab[fidx]; |
| @@ -3271,6 +3306,77 @@ static int delete_filter(struct adapter *adapter, unsigned int fidx) | |||
| 3271 | return 0; | 3306 | return 0; |
| 3272 | } | 3307 | } |
| 3273 | 3308 | ||
| 3309 | int cxgb4_create_server_filter(const struct net_device *dev, unsigned int stid, | ||
| 3310 | __be32 sip, __be16 sport, unsigned int queue) | ||
| 3311 | { | ||
| 3312 | int ret; | ||
| 3313 | struct filter_entry *f; | ||
| 3314 | struct adapter *adap; | ||
| 3315 | int i; | ||
| 3316 | u8 *val; | ||
| 3317 | |||
| 3318 | adap = netdev2adap(dev); | ||
| 3319 | |||
| 3320 | /* Check to make sure the filter requested is writable ... | ||
| 3321 | */ | ||
| 3322 | f = &adap->tids.ftid_tab[stid]; | ||
| 3323 | ret = writable_filter(f); | ||
| 3324 | if (ret) | ||
| 3325 | return ret; | ||
| 3326 | |||
| 3327 | /* Clear out any old resources being used by the filter before | ||
| 3328 | * we start constructing the new filter. | ||
| 3329 | */ | ||
| 3330 | if (f->valid) | ||
| 3331 | clear_filter(adap, f); | ||
| 3332 | |||
| 3333 | /* Clear out filter specifications */ | ||
| 3334 | memset(&f->fs, 0, sizeof(struct ch_filter_specification)); | ||
| 3335 | f->fs.val.lport = cpu_to_be16(sport); | ||
| 3336 | f->fs.mask.lport = ~0; | ||
| 3337 | val = (u8 *)&sip; | ||
| 3338 | if ((val[0] | val[1] | val[2] | val[3]) != 0) | ||
| 3339 | for (i = 0; i < 4; i++) { | ||
| 3340 | f->fs.val.lip[i] = val[i]; | ||
| 3341 | f->fs.mask.lip[i] = ~0; | ||
| 3342 | } | ||
| 3343 | |||
| 3344 | f->fs.dirsteer = 1; | ||
| 3345 | f->fs.iq = queue; | ||
| 3346 | /* Mark filter as locked */ | ||
| 3347 | f->locked = 1; | ||
| 3348 | f->fs.rpttid = 1; | ||
| 3349 | |||
| 3350 | ret = set_filter_wr(adap, stid); | ||
| 3351 | if (ret) { | ||
| 3352 | clear_filter(adap, f); | ||
| 3353 | return ret; | ||
| 3354 | } | ||
| 3355 | |||
| 3356 | return 0; | ||
| 3357 | } | ||
| 3358 | EXPORT_SYMBOL(cxgb4_create_server_filter); | ||
| 3359 | |||
| 3360 | int cxgb4_remove_server_filter(const struct net_device *dev, unsigned int stid, | ||
| 3361 | unsigned int queue, bool ipv6) | ||
| 3362 | { | ||
| 3363 | int ret; | ||
| 3364 | struct filter_entry *f; | ||
| 3365 | struct adapter *adap; | ||
| 3366 | |||
| 3367 | adap = netdev2adap(dev); | ||
| 3368 | f = &adap->tids.ftid_tab[stid]; | ||
| 3369 | /* Unlock the filter */ | ||
| 3370 | f->locked = 0; | ||
| 3371 | |||
| 3372 | ret = delete_filter(adap, stid); | ||
| 3373 | if (ret) | ||
| 3374 | return ret; | ||
| 3375 | |||
| 3376 | return 0; | ||
| 3377 | } | ||
| 3378 | EXPORT_SYMBOL(cxgb4_remove_server_filter); | ||
| 3379 | |||
| 3274 | static struct rtnl_link_stats64 *cxgb_get_stats(struct net_device *dev, | 3380 | static struct rtnl_link_stats64 *cxgb_get_stats(struct net_device *dev, |
| 3275 | struct rtnl_link_stats64 *ns) | 3381 | struct rtnl_link_stats64 *ns) |
| 3276 | { | 3382 | { |
| @@ -3517,6 +3623,34 @@ static int adap_init1(struct adapter *adap, struct fw_caps_config_cmd *c) | |||
| 3517 | v = t4_read_reg(adap, TP_PIO_DATA); | 3623 | v = t4_read_reg(adap, TP_PIO_DATA); |
| 3518 | t4_write_reg(adap, TP_PIO_DATA, v & ~CSUM_HAS_PSEUDO_HDR); | 3624 | t4_write_reg(adap, TP_PIO_DATA, v & ~CSUM_HAS_PSEUDO_HDR); |
| 3519 | 3625 | ||
| 3626 | /* first 4 Tx modulation queues point to consecutive Tx channels */ | ||
| 3627 | adap->params.tp.tx_modq_map = 0xE4; | ||
| 3628 | t4_write_reg(adap, A_TP_TX_MOD_QUEUE_REQ_MAP, | ||
| 3629 | V_TX_MOD_QUEUE_REQ_MAP(adap->params.tp.tx_modq_map)); | ||
| 3630 | |||
| 3631 | /* associate each Tx modulation queue with consecutive Tx channels */ | ||
| 3632 | v = 0x84218421; | ||
| 3633 | t4_write_indirect(adap, TP_PIO_ADDR, TP_PIO_DATA, | ||
| 3634 | &v, 1, A_TP_TX_SCHED_HDR); | ||
| 3635 | t4_write_indirect(adap, TP_PIO_ADDR, TP_PIO_DATA, | ||
| 3636 | &v, 1, A_TP_TX_SCHED_FIFO); | ||
| 3637 | t4_write_indirect(adap, TP_PIO_ADDR, TP_PIO_DATA, | ||
| 3638 | &v, 1, A_TP_TX_SCHED_PCMD); | ||
| 3639 | |||
| 3640 | #define T4_TX_MODQ_10G_WEIGHT_DEFAULT 16 /* in KB units */ | ||
| 3641 | if (is_offload(adap)) { | ||
| 3642 | t4_write_reg(adap, A_TP_TX_MOD_QUEUE_WEIGHT0, | ||
| 3643 | V_TX_MODQ_WEIGHT0(T4_TX_MODQ_10G_WEIGHT_DEFAULT) | | ||
| 3644 | V_TX_MODQ_WEIGHT1(T4_TX_MODQ_10G_WEIGHT_DEFAULT) | | ||
| 3645 | V_TX_MODQ_WEIGHT2(T4_TX_MODQ_10G_WEIGHT_DEFAULT) | | ||
| 3646 | V_TX_MODQ_WEIGHT3(T4_TX_MODQ_10G_WEIGHT_DEFAULT)); | ||
| 3647 | t4_write_reg(adap, A_TP_TX_MOD_CHANNEL_WEIGHT, | ||
| 3648 | V_TX_MODQ_WEIGHT0(T4_TX_MODQ_10G_WEIGHT_DEFAULT) | | ||
| 3649 | V_TX_MODQ_WEIGHT1(T4_TX_MODQ_10G_WEIGHT_DEFAULT) | | ||
| 3650 | V_TX_MODQ_WEIGHT2(T4_TX_MODQ_10G_WEIGHT_DEFAULT) | | ||
| 3651 | V_TX_MODQ_WEIGHT3(T4_TX_MODQ_10G_WEIGHT_DEFAULT)); | ||
| 3652 | } | ||
| 3653 | |||
| 3520 | /* get basic stuff going */ | 3654 | /* get basic stuff going */ |
| 3521 | return t4_early_init(adap, adap->fn); | 3655 | return t4_early_init(adap, adap->fn); |
| 3522 | } | 3656 | } |
| @@ -4938,7 +5072,8 @@ static void remove_one(struct pci_dev *pdev) | |||
| 4938 | */ | 5072 | */ |
| 4939 | if (adapter->tids.ftid_tab) { | 5073 | if (adapter->tids.ftid_tab) { |
| 4940 | struct filter_entry *f = &adapter->tids.ftid_tab[0]; | 5074 | struct filter_entry *f = &adapter->tids.ftid_tab[0]; |
| 4941 | for (i = 0; i < adapter->tids.nftids; i++, f++) | 5075 | for (i = 0; i < (adapter->tids.nftids + |
| 5076 | adapter->tids.nsftids); i++, f++) | ||
| 4942 | if (f->valid) | 5077 | if (f->valid) |
| 4943 | clear_filter(adapter, f); | 5078 | clear_filter(adapter, f); |
| 4944 | } | 5079 | } |
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h index 59a61332b78c..065bbd5b2411 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h | |||
| @@ -131,7 +131,7 @@ static inline void *lookup_atid(const struct tid_info *t, unsigned int atid) | |||
| 131 | static inline void *lookup_stid(const struct tid_info *t, unsigned int stid) | 131 | static inline void *lookup_stid(const struct tid_info *t, unsigned int stid) |
| 132 | { | 132 | { |
| 133 | stid -= t->stid_base; | 133 | stid -= t->stid_base; |
| 134 | return stid < t->nstids ? t->stid_tab[stid].data : NULL; | 134 | return stid < (t->nstids + t->nsftids) ? t->stid_tab[stid].data : NULL; |
| 135 | } | 135 | } |
| 136 | 136 | ||
| 137 | static inline void cxgb4_insert_tid(struct tid_info *t, void *data, | 137 | static inline void cxgb4_insert_tid(struct tid_info *t, void *data, |
| @@ -143,6 +143,7 @@ static inline void cxgb4_insert_tid(struct tid_info *t, void *data, | |||
| 143 | 143 | ||
| 144 | int cxgb4_alloc_atid(struct tid_info *t, void *data); | 144 | int cxgb4_alloc_atid(struct tid_info *t, void *data); |
| 145 | int cxgb4_alloc_stid(struct tid_info *t, int family, void *data); | 145 | int cxgb4_alloc_stid(struct tid_info *t, int family, void *data); |
| 146 | int cxgb4_alloc_sftid(struct tid_info *t, int family, void *data); | ||
| 146 | void cxgb4_free_atid(struct tid_info *t, unsigned int atid); | 147 | void cxgb4_free_atid(struct tid_info *t, unsigned int atid); |
| 147 | void cxgb4_free_stid(struct tid_info *t, unsigned int stid, int family); | 148 | void cxgb4_free_stid(struct tid_info *t, unsigned int stid, int family); |
| 148 | void cxgb4_remove_tid(struct tid_info *t, unsigned int qid, unsigned int tid); | 149 | void cxgb4_remove_tid(struct tid_info *t, unsigned int qid, unsigned int tid); |
| @@ -151,7 +152,10 @@ struct in6_addr; | |||
| 151 | 152 | ||
| 152 | int cxgb4_create_server(const struct net_device *dev, unsigned int stid, | 153 | int cxgb4_create_server(const struct net_device *dev, unsigned int stid, |
| 153 | __be32 sip, __be16 sport, unsigned int queue); | 154 | __be32 sip, __be16 sport, unsigned int queue); |
| 154 | 155 | int cxgb4_create_server_filter(const struct net_device *dev, unsigned int stid, | |
| 156 | __be32 sip, __be16 sport, unsigned int queue); | ||
| 157 | int cxgb4_remove_server_filter(const struct net_device *dev, unsigned int stid, | ||
| 158 | unsigned int queue, bool ipv6); | ||
| 155 | static inline void set_wr_txq(struct sk_buff *skb, int prio, int queue) | 159 | static inline void set_wr_txq(struct sk_buff *skb, int prio, int queue) |
| 156 | { | 160 | { |
| 157 | skb_set_queue_mapping(skb, (queue << 1) | prio); | 161 | skb_set_queue_mapping(skb, (queue << 1) | prio); |
| @@ -223,9 +227,16 @@ struct cxgb4_lld_info { | |||
| 223 | unsigned int iscsi_iolen; /* iSCSI max I/O length */ | 227 | unsigned int iscsi_iolen; /* iSCSI max I/O length */ |
| 224 | unsigned short udb_density; /* # of user DB/page */ | 228 | unsigned short udb_density; /* # of user DB/page */ |
| 225 | unsigned short ucq_density; /* # of user CQs/page */ | 229 | unsigned short ucq_density; /* # of user CQs/page */ |
| 230 | unsigned short filt_mode; /* filter optional components */ | ||
| 231 | unsigned short tx_modq[NCHAN]; /* maps each tx channel to a */ | ||
| 232 | /* scheduler queue */ | ||
| 226 | void __iomem *gts_reg; /* address of GTS register */ | 233 | void __iomem *gts_reg; /* address of GTS register */ |
| 227 | void __iomem *db_reg; /* address of kernel doorbell */ | 234 | void __iomem *db_reg; /* address of kernel doorbell */ |
| 228 | int dbfifo_int_thresh; /* doorbell fifo int threshold */ | 235 | int dbfifo_int_thresh; /* doorbell fifo int threshold */ |
| 236 | unsigned int sge_pktshift; /* Padding between CPL and */ | ||
| 237 | /* packet data */ | ||
| 238 | bool enable_fw_ofld_conn; /* Enable connection through fw */ | ||
| 239 | /* WR */ | ||
| 229 | }; | 240 | }; |
| 230 | 241 | ||
| 231 | struct cxgb4_uld_info { | 242 | struct cxgb4_uld_info { |
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h b/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h index 75393f5cff41..aef529198922 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h +++ b/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h | |||
| @@ -1064,4 +1064,37 @@ | |||
| 1064 | #define ADDRESS(x) ((x) << ADDRESS_SHIFT) | 1064 | #define ADDRESS(x) ((x) << ADDRESS_SHIFT) |
| 1065 | 1065 | ||
| 1066 | #define XGMAC_PORT_INT_CAUSE 0x10dc | 1066 | #define XGMAC_PORT_INT_CAUSE 0x10dc |
| 1067 | |||
| 1068 | #define A_TP_TX_MOD_QUEUE_REQ_MAP 0x7e28 | ||
| 1069 | |||
| 1070 | #define A_TP_TX_MOD_CHANNEL_WEIGHT 0x7e34 | ||
| 1071 | |||
| 1072 | #define S_TX_MOD_QUEUE_REQ_MAP 0 | ||
| 1073 | #define M_TX_MOD_QUEUE_REQ_MAP 0xffffU | ||
| 1074 | #define V_TX_MOD_QUEUE_REQ_MAP(x) ((x) << S_TX_MOD_QUEUE_REQ_MAP) | ||
| 1075 | |||
| 1076 | #define A_TP_TX_MOD_QUEUE_WEIGHT0 0x7e30 | ||
| 1077 | |||
| 1078 | #define S_TX_MODQ_WEIGHT3 24 | ||
| 1079 | #define M_TX_MODQ_WEIGHT3 0xffU | ||
| 1080 | #define V_TX_MODQ_WEIGHT3(x) ((x) << S_TX_MODQ_WEIGHT3) | ||
| 1081 | |||
| 1082 | #define S_TX_MODQ_WEIGHT2 16 | ||
| 1083 | #define M_TX_MODQ_WEIGHT2 0xffU | ||
| 1084 | #define V_TX_MODQ_WEIGHT2(x) ((x) << S_TX_MODQ_WEIGHT2) | ||
| 1085 | |||
| 1086 | #define S_TX_MODQ_WEIGHT1 8 | ||
| 1087 | #define M_TX_MODQ_WEIGHT1 0xffU | ||
| 1088 | #define V_TX_MODQ_WEIGHT1(x) ((x) << S_TX_MODQ_WEIGHT1) | ||
| 1089 | |||
| 1090 | #define S_TX_MODQ_WEIGHT0 0 | ||
| 1091 | #define M_TX_MODQ_WEIGHT0 0xffU | ||
| 1092 | #define V_TX_MODQ_WEIGHT0(x) ((x) << S_TX_MODQ_WEIGHT0) | ||
| 1093 | |||
| 1094 | #define A_TP_TX_SCHED_HDR 0x23 | ||
| 1095 | |||
| 1096 | #define A_TP_TX_SCHED_FIFO 0x24 | ||
| 1097 | |||
| 1098 | #define A_TP_TX_SCHED_PCMD 0x25 | ||
| 1099 | |||
| 1067 | #endif /* __T4_REGS_H */ | 1100 | #endif /* __T4_REGS_H */ |
