static int
dpaa_eth_dev_configure(struct rte_eth_dev *dev)
{
struct dpaa_if *dpaa_intf = dev->data->dev_private;
struct rte_eth_conf *eth_conf = &dev->data->dev_conf;
uint64_t rx_offloads = eth_conf->rxmode.offloads;
uint64_t tx_offloads = eth_conf->txmode.offloads;
PMD_INIT_FUNC_TRACE();
/* Rx offloads which are enabled by default */
if (dev_rx_offloads_nodis & ~rx_offloads) {
DPAA_PMD_INFO(
"Some of Rx offloads enabled by default - requested 0x%" PRIx64
" fixed are 0x%" PRIx64,
rx_offloads, dev_rx_offloads_nodis);
}
/* Tx offloads which are enabled by default */
if (dev_tx_offloads_nodis & ~tx_offloads) {
DPAA_PMD_INFO(
"Some of Tx offloads enabled by default - requested 0x%" PRIx64
" fixed are 0x%" PRIx64,
tx_offloads, dev_tx_offloads_nodis);
}
if (rx_offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) {
uint32_t max_len;
DPAA_PMD_DEBUG("enabling jumbo");
if (dev->data->dev_conf.rxmode.max_rx_pkt_len <=
DPAA_MAX_RX_PKT_LEN)
max_len = dev->data->dev_conf.rxmode.max_rx_pkt_len;
else {
DPAA_PMD_INFO("enabling jumbo override conf max len=%d "
"supported is %d",
dev->data->dev_conf.rxmode.max_rx_pkt_len,
DPAA_MAX_RX_PKT_LEN);
max_len = DPAA_MAX_RX_PKT_LEN;
}
fman_if_set_maxfrm(dpaa_intf->fif, max_len);
dev->data->mtu = max_len
- ETHER_HDR_LEN - ETHER_CRC_LEN - VLAN_TAG_SIZE;
}
if (rx_offloads & DEV_RX_OFFLOAD_SCATTER) {
DPAA_PMD_DEBUG("enabling scatter mode");
fman_if_set_sg(dpaa_intf->fif, 1);
dev->data->scattered_rx = 1;
}
if (!(default_q || fmc_q)) {
if (dpaa_fm_config(dev,
eth_conf->rx_adv_conf.rss_conf.rss_hf)) {
dpaa_write_fm_config_to_file();
DPAA_PMD_ERR("FM port configuration: Failed\n");
return -1;
}
dpaa_write_fm_config_to_file();
}
return 0;
}