Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/ena/ena.c
Show All 24 Lines | |||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
*/ | */ | ||||
#include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||
__FBSDID("$FreeBSD$"); | __FBSDID("$FreeBSD$"); | ||||
#include "opt_rss.h" | |||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#include <sys/bus.h> | #include <sys/bus.h> | ||||
#include <sys/endian.h> | #include <sys/endian.h> | ||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/kthread.h> | #include <sys/kthread.h> | ||||
#include <sys/malloc.h> | #include <sys/malloc.h> | ||||
#include <sys/mbuf.h> | #include <sys/mbuf.h> | ||||
Show All 15 Lines | |||||
#include <net/ethernet.h> | #include <net/ethernet.h> | ||||
#include <net/if.h> | #include <net/if.h> | ||||
#include <net/if_var.h> | #include <net/if_var.h> | ||||
#include <net/if_arp.h> | #include <net/if_arp.h> | ||||
#include <net/if_dl.h> | #include <net/if_dl.h> | ||||
#include <net/if_media.h> | #include <net/if_media.h> | ||||
#include <net/if_types.h> | #include <net/if_types.h> | ||||
#include <net/if_vlan_var.h> | #include <net/if_vlan_var.h> | ||||
#ifdef RSS | |||||
#include <net/rss_config.h> | |||||
#endif | |||||
#include <netinet/in_systm.h> | #include <netinet/in_systm.h> | ||||
#include <netinet/in.h> | #include <netinet/in.h> | ||||
#include <netinet/if_ether.h> | #include <netinet/if_ether.h> | ||||
#include <netinet/ip.h> | #include <netinet/ip.h> | ||||
#include <netinet/ip6.h> | #include <netinet/ip6.h> | ||||
#include <netinet/tcp.h> | #include <netinet/tcp.h> | ||||
#include <netinet/udp.h> | #include <netinet/udp.h> | ||||
▲ Show 20 Lines • Show All 2,623 Lines • ▼ Show 20 Lines | for (i = 0; i < ENA_RX_RSS_TABLE_SIZE; i++) { | ||||
rc = ena_com_indirect_table_fill_entry(ena_dev, i, | rc = ena_com_indirect_table_fill_entry(ena_dev, i, | ||||
ENA_IO_RXQ_IDX(qid)); | ENA_IO_RXQ_IDX(qid)); | ||||
if (unlikely((rc != 0) && (rc != EOPNOTSUPP))) { | if (unlikely((rc != 0) && (rc != EOPNOTSUPP))) { | ||||
device_printf(dev, "Cannot fill indirect table\n"); | device_printf(dev, "Cannot fill indirect table\n"); | ||||
goto err_rss_destroy; | goto err_rss_destroy; | ||||
} | } | ||||
} | } | ||||
#ifdef RSS | |||||
uint8_t rss_algo = rss_gethashalgo(); | |||||
if (rss_algo == RSS_HASH_TOEPLITZ) { | |||||
uint8_t hash_key[RSS_KEYSIZE]; | |||||
rss_getkey(hash_key); | |||||
rc = ena_com_fill_hash_function(ena_dev, ENA_ADMIN_TOEPLITZ, | |||||
hash_key, RSS_KEYSIZE, 0xFFFFFFFF); | |||||
} else | |||||
#endif | |||||
rc = ena_com_fill_hash_function(ena_dev, ENA_ADMIN_CRC32, NULL, | rc = ena_com_fill_hash_function(ena_dev, ENA_ADMIN_CRC32, NULL, | ||||
ENA_HASH_KEY_SIZE, 0xFFFFFFFF); | ENA_HASH_KEY_SIZE, 0xFFFFFFFF); | ||||
if (unlikely((rc != 0) && (rc != EOPNOTSUPP))) { | if (unlikely((rc != 0) && (rc != EOPNOTSUPP))) { | ||||
device_printf(dev, "Cannot fill hash function\n"); | device_printf(dev, "Cannot fill hash function\n"); | ||||
goto err_rss_destroy; | goto err_rss_destroy; | ||||
} | } | ||||
rc = ena_com_set_default_hash_ctrl(ena_dev); | rc = ena_com_set_default_hash_ctrl(ena_dev); | ||||
▲ Show 20 Lines • Show All 1,129 Lines • Show Last 20 Lines |