| 1025 | } |
| 1026 | |
| 1027 | static int ena_com_get_feature_ex(struct ena_com_dev *ena_dev, |
| 1028 | struct ena_admin_get_feat_resp *get_resp, |
| 1029 | enum ena_admin_aq_feature_id feature_id, |
| 1030 | dma_addr_t control_buf_dma_addr, |
| 1031 | u32 control_buff_size, |
| 1032 | u8 feature_ver) |
| 1033 | { |
| 1034 | struct ena_com_admin_queue *admin_queue; |
| 1035 | struct ena_admin_get_feat_cmd get_cmd; |
| 1036 | int ret; |
| 1037 | |
| 1038 | if (!ena_com_check_supported_feature_id(ena_dev, feature_id)) { |
| 1039 | ena_trc_dbg(ena_dev, "Feature %d isn't supported\n", feature_id); |
| 1040 | return ENA_COM_UNSUPPORTED; |
| 1041 | } |
| 1042 | |
| 1043 | memset(&get_cmd, 0x0, sizeof(get_cmd)); |
| 1044 | admin_queue = &ena_dev->admin_queue; |
| 1045 | |
| 1046 | get_cmd.aq_common_descriptor.opcode = ENA_ADMIN_GET_FEATURE; |
| 1047 | |
| 1048 | if (control_buff_size) |
| 1049 | get_cmd.aq_common_descriptor.flags = |
| 1050 | ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK; |
| 1051 | else |
| 1052 | get_cmd.aq_common_descriptor.flags = 0; |
| 1053 | |
| 1054 | ret = ena_com_mem_addr_set(ena_dev, |
| 1055 | &get_cmd.control_buffer.address, |
| 1056 | control_buf_dma_addr); |
| 1057 | if (unlikely(ret)) { |
| 1058 | ena_trc_err(ena_dev, "Memory address set failed\n"); |
| 1059 | return ret; |
| 1060 | } |
| 1061 | |
| 1062 | get_cmd.control_buffer.length = control_buff_size; |
| 1063 | get_cmd.feat_common.feature_version = feature_ver; |
| 1064 | get_cmd.feat_common.feature_id = feature_id; |
| 1065 | |
| 1066 | ret = ena_com_execute_admin_command(admin_queue, |
| 1067 | (struct ena_admin_aq_entry *) |
| 1068 | &get_cmd, |
| 1069 | sizeof(get_cmd), |
| 1070 | (struct ena_admin_acq_entry *) |
| 1071 | get_resp, |
| 1072 | sizeof(*get_resp)); |
| 1073 | |
| 1074 | if (unlikely(ret)) |
| 1075 | ena_trc_err(ena_dev, "Failed to submit get_feature command %d error: %d\n", |
| 1076 | feature_id, ret); |
| 1077 | |
| 1078 | return ret; |
| 1079 | } |
| 1080 | |
| 1081 | static int ena_com_get_feature(struct ena_com_dev *ena_dev, |
| 1082 | struct ena_admin_get_feat_resp *get_resp, |
no test coverage detected