MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ena_com_set_hash_function

Function ena_com_set_hash_function

dpdk/drivers/net/ena/base/ena_com.c:2648–2707  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2646}
2647
2648int ena_com_set_hash_function(struct ena_com_dev *ena_dev)
2649{
2650 struct ena_com_admin_queue *admin_queue = &ena_dev->admin_queue;
2651 struct ena_rss *rss = &ena_dev->rss;
2652 struct ena_admin_set_feat_cmd cmd;
2653 struct ena_admin_set_feat_resp resp;
2654 struct ena_admin_get_feat_resp get_resp;
2655 int ret;
2656
2657 if (!ena_com_check_supported_feature_id(ena_dev,
2658 ENA_ADMIN_RSS_HASH_FUNCTION)) {
2659 ena_trc_dbg(ena_dev, "Feature %d isn't supported\n",
2660 ENA_ADMIN_RSS_HASH_FUNCTION);
2661 return ENA_COM_UNSUPPORTED;
2662 }
2663
2664 /* Validate hash function is supported */
2665 ret = ena_com_get_feature(ena_dev, &get_resp,
2666 ENA_ADMIN_RSS_HASH_FUNCTION, 0);
2667 if (unlikely(ret))
2668 return ret;
2669
2670 if (!(get_resp.u.flow_hash_func.supported_func & BIT(rss->hash_func))) {
2671 ena_trc_err(ena_dev, "Func hash %d isn't supported by device, abort\n",
2672 rss->hash_func);
2673 return ENA_COM_UNSUPPORTED;
2674 }
2675
2676 memset(&cmd, 0x0, sizeof(cmd));
2677
2678 cmd.aq_common_descriptor.opcode = ENA_ADMIN_SET_FEATURE;
2679 cmd.aq_common_descriptor.flags =
2680 ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK;
2681 cmd.feat_common.feature_id = ENA_ADMIN_RSS_HASH_FUNCTION;
2682 cmd.u.flow_hash_func.init_val = rss->hash_init_val;
2683 cmd.u.flow_hash_func.selected_func = 1 << rss->hash_func;
2684
2685 ret = ena_com_mem_addr_set(ena_dev,
2686 &cmd.control_buffer.address,
2687 rss->hash_key_dma_addr);
2688 if (unlikely(ret)) {
2689 ena_trc_err(ena_dev, "Memory address set failed\n");
2690 return ret;
2691 }
2692
2693 cmd.control_buffer.length = sizeof(*rss->hash_key);
2694
2695 ret = ena_com_execute_admin_command(admin_queue,
2696 (struct ena_admin_aq_entry *)&cmd,
2697 sizeof(cmd),
2698 (struct ena_admin_acq_entry *)&resp,
2699 sizeof(resp));
2700 if (unlikely(ret)) {
2701 ena_trc_err(ena_dev, "Failed to set hash function %d. error: %d\n",
2702 rss->hash_func, ret);
2703 return ENA_COM_INVAL;
2704 }
2705

Callers 1

Calls 5

memsetFunction · 0.85
ena_com_get_featureFunction · 0.70
ena_com_mem_addr_setFunction · 0.70

Tested by

no test coverage detected