2018-01-10 09:17:10 +00:00
|
|
|
/* SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
* Copyright 2008-2017 Cisco Systems, Inc. All rights reserved.
|
2014-11-25 17:26:43 +00:00
|
|
|
* Copyright 2007 Nuova Systems, Inc. All rights reserved.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _ENIC_RES_H_
|
|
|
|
#define _ENIC_RES_H_
|
|
|
|
|
|
|
|
#include "wq_enet_desc.h"
|
|
|
|
#include "rq_enet_desc.h"
|
|
|
|
#include "vnic_wq.h"
|
|
|
|
#include "vnic_rq.h"
|
|
|
|
|
|
|
|
#define ENIC_MIN_WQ_DESCS 64
|
|
|
|
#define ENIC_MAX_WQ_DESCS 4096
|
|
|
|
#define ENIC_MIN_RQ_DESCS 64
|
|
|
|
#define ENIC_MAX_RQ_DESCS 4096
|
|
|
|
|
2018-06-29 09:29:34 +00:00
|
|
|
/* A descriptor ring has a multiple of 32 descriptors */
|
|
|
|
#define ENIC_ALIGN_DESCS 32
|
|
|
|
#define ENIC_ALIGN_DESCS_MASK ~(ENIC_ALIGN_DESCS - 1)
|
|
|
|
|
2018-06-29 09:29:39 +00:00
|
|
|
/* Request a completion index every 32 buffers (roughly packets) */
|
|
|
|
#define ENIC_WQ_CQ_THRESH 32
|
|
|
|
|
2014-11-25 17:26:43 +00:00
|
|
|
#define ENIC_MIN_MTU 68
|
2016-06-24 22:29:27 +00:00
|
|
|
|
|
|
|
/* Does not include (possible) inserted VLAN tag and FCS */
|
2017-02-03 01:18:40 +00:00
|
|
|
#define ENIC_DEFAULT_RX_MAX_PKT_SIZE 9022
|
|
|
|
|
|
|
|
/* Does not include (possible) inserted VLAN tag and FCS */
|
|
|
|
#define ENIC_TX_MAX_PKT_SIZE 9208
|
2014-11-25 17:26:43 +00:00
|
|
|
|
|
|
|
#define ENIC_MULTICAST_PERFECT_FILTERS 32
|
|
|
|
#define ENIC_UNICAST_PERFECT_FILTERS 32
|
|
|
|
|
|
|
|
#define ENIC_NON_TSO_MAX_DESC 16
|
2016-03-04 21:09:00 +00:00
|
|
|
#define ENIC_DEFAULT_RX_FREE_THRESH 32
|
2016-06-03 00:22:53 +00:00
|
|
|
#define ENIC_TX_XMIT_MAX 64
|
2018-06-29 09:29:42 +00:00
|
|
|
#define ENIC_RX_BURST_MAX 64
|
2014-11-25 17:26:43 +00:00
|
|
|
|
2018-06-29 09:29:34 +00:00
|
|
|
/* Defaults for dev_info.default_{rx,tx}portconf */
|
|
|
|
#define ENIC_DEFAULT_RX_BURST 32
|
|
|
|
#define ENIC_DEFAULT_RX_RINGS 1
|
|
|
|
#define ENIC_DEFAULT_RX_RING_SIZE 512
|
|
|
|
#define ENIC_DEFAULT_TX_BURST 32
|
|
|
|
#define ENIC_DEFAULT_TX_RINGS 1
|
|
|
|
#define ENIC_DEFAULT_TX_RING_SIZE 512
|
|
|
|
|
net/enic: allow to change RSS settings
Currently, when more than 1 receive queues are configured, the driver
always enables RSS with the driver's own default hash type, key, and
RETA. The user is unable to change any of the RSS settings. Address
this by implementing the ethdev RSS API as follows.
Correctly report the RETA size, key size, and supported hash types
through rte_eth_dev_info.
During dev_configure(), initialize RSS according to the device's
mq_mode and rss_conf. Start with the default RETA, and use the default
key unless a custom key is provided.
Add the RETA and rss_conf query/set handlers to let the user change
RSS settings after the initial configuration. The hardware is able to
change hash type, key, and RETA individually. So, the handlers change
only the affected settings.
Refactor/rename several functions in order to make their intentions
clear. For example, remove all traces of RSS from
enicpmd_vlan_offload_set() as it is confusing.
Signed-off-by: Hyong Youb Kim <hyonkim@cisco.com>
Reviewed-by: John Daley <johndale@cisco.com>
2018-03-08 02:46:54 +00:00
|
|
|
#define ENIC_RSS_DEFAULT_CPU 0
|
|
|
|
#define ENIC_RSS_BASE_CPU 0
|
|
|
|
#define ENIC_RSS_HASH_BITS 7
|
|
|
|
#define ENIC_RSS_RETA_SIZE (1 << ENIC_RSS_HASH_BITS)
|
|
|
|
#define ENIC_RSS_HASH_KEY_SIZE 40
|
|
|
|
|
2014-11-25 17:26:43 +00:00
|
|
|
#define ENIC_SETTING(enic, f) ((enic->config.flags & VENETF_##f) ? 1 : 0)
|
|
|
|
|
|
|
|
|
|
|
|
struct enic;
|
|
|
|
|
|
|
|
int enic_get_vnic_config(struct enic *);
|
|
|
|
int enic_add_vlan(struct enic *enic, u16 vlanid);
|
|
|
|
int enic_del_vlan(struct enic *enic, u16 vlanid);
|
|
|
|
int enic_set_nic_cfg(struct enic *enic, u8 rss_default_cpu, u8 rss_hash_type,
|
|
|
|
u8 rss_hash_bits, u8 rss_base_cpu, u8 rss_enable, u8 tso_ipid_split_en,
|
|
|
|
u8 ig_vlan_strip_en);
|
|
|
|
int enic_set_rss_key(struct enic *enic, dma_addr_t key_pa, u64 len);
|
|
|
|
int enic_set_rss_cpu(struct enic *enic, dma_addr_t cpu_pa, u64 len);
|
|
|
|
void enic_get_res_counts(struct enic *enic);
|
|
|
|
void enic_init_vnic_resources(struct enic *enic);
|
|
|
|
int enic_alloc_vnic_resources(struct enic *);
|
|
|
|
void enic_free_vnic_resources(struct enic *);
|
|
|
|
|
|
|
|
#endif /* _ENIC_RES_H_ */
|