X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fhinic%2Fhinic_pmd_ethdev.c;h=8493f6e42c6e2ad5e21d5bafb65973b8a3bef49f;hb=1b7b9f170fcebbbd0708fab554dcb5a7badef8cf;hp=9f37a404becaa9fc809148e51aaa7299c5fb8e30;hpb=483b4817ff84362574575cdb27f534ea1ea34ce3;p=dpdk.git diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c index 9f37a404be..8493f6e42c 100644 --- a/drivers/net/hinic/hinic_pmd_ethdev.c +++ b/drivers/net/hinic/hinic_pmd_ethdev.c @@ -57,6 +57,7 @@ #define HINIC_DEFAULT_BURST_SIZE 32 #define HINIC_DEFAULT_NB_QUEUES 1 #define HINIC_DEFAULT_RING_SIZE 1024 +#define HINIC_MAX_LRO_SIZE 65536 /* * vlan_id is a 12 bit number. @@ -318,6 +319,9 @@ static int hinic_dev_configure(struct rte_eth_dev *dev) return -EINVAL; } + if (dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) + dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH; + /* mtu size is 256~9600 */ if (dev->data->dev_conf.rxmode.max_rx_pkt_len < HINIC_MIN_FRAME_SIZE || dev->data->dev_conf.rxmode.max_rx_pkt_len > @@ -436,7 +440,7 @@ static int hinic_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, nic_dev->rxqs[queue_idx] = rxq; /* alloc rx sq hw wqepage*/ - rc = hinic_create_rq(hwdev, queue_idx, rq_depth); + rc = hinic_create_rq(hwdev, queue_idx, rq_depth, socket_id); if (rc) { PMD_DRV_LOG(ERR, "Create rxq[%d] failed, dev_name: %s, rq_depth: %d", queue_idx, dev->data->name, rq_depth); @@ -463,6 +467,7 @@ static int hinic_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, rxq->q_depth = rq_depth; rxq->buf_len = (u16)buf_size; rxq->rx_free_thresh = rx_free_thresh; + rxq->socket_id = socket_id; /* the last point cant do mbuf rearm in bulk */ rxq->rxinfo_align_end = rxq->q_depth - rxq->rx_free_thresh; @@ -590,7 +595,7 @@ static int hinic_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, nic_dev->txqs[queue_idx] = txq; /* alloc tx sq hw wqepage */ - rc = hinic_create_sq(hwdev, queue_idx, sq_depth); + rc = hinic_create_sq(hwdev, queue_idx, sq_depth, socket_id); if (rc) { PMD_DRV_LOG(ERR, "Create txq[%d] failed, dev_name: %s, sq_depth: %d", queue_idx, dev->data->name, sq_depth); @@ -609,6 +614,7 @@ static int hinic_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, txq->sq_bot_sge_addr = HINIC_GET_WQ_TAIL(txq) - sizeof(struct hinic_sq_bufdesc); txq->cos = nic_dev->default_cos; + txq->socket_id = socket_id; /* alloc software txinfo */ rc = hinic_setup_tx_resources(txq); @@ -740,7 +746,8 @@ hinic_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info) DEV_RX_OFFLOAD_VLAN_FILTER | DEV_RX_OFFLOAD_SCATTER | DEV_RX_OFFLOAD_JUMBO_FRAME | - DEV_RX_OFFLOAD_TCP_LRO; + DEV_RX_OFFLOAD_TCP_LRO | + DEV_RX_OFFLOAD_RSS_HASH; info->tx_queue_offload_capa = 0; info->tx_offload_capa = DEV_TX_OFFLOAD_VLAN_INSERT | @@ -2960,14 +2967,10 @@ static int hinic_func_init(struct rte_eth_dev *eth_dev) /* EAL is SECONDARY and eth_dev is already created */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) { - rc = rte_intr_callback_register(&pci_dev->intr_handle, - hinic_dev_interrupt_handler, - (void *)eth_dev); - if (rc) - PMD_DRV_LOG(ERR, "Initialize %s failed in secondary process", - eth_dev->data->name); + PMD_DRV_LOG(INFO, "Initialize %s in secondary process", + eth_dev->data->name); - return rc; + return 0; } nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(eth_dev);