| 3201 | } |
| 3202 | |
| 3203 | int ena_com_set_host_attributes(struct ena_com_dev *ena_dev) |
| 3204 | { |
| 3205 | struct ena_host_attribute *host_attr = &ena_dev->host_attr; |
| 3206 | struct ena_com_admin_queue *admin_queue; |
| 3207 | struct ena_admin_set_feat_cmd cmd; |
| 3208 | struct ena_admin_set_feat_resp resp; |
| 3209 | |
| 3210 | int ret; |
| 3211 | |
| 3212 | /* Host attribute config is called before ena_com_get_dev_attr_feat |
| 3213 | * so ena_com can't check if the feature is supported. |
| 3214 | */ |
| 3215 | |
| 3216 | memset(&cmd, 0x0, sizeof(cmd)); |
| 3217 | admin_queue = &ena_dev->admin_queue; |
| 3218 | |
| 3219 | cmd.aq_common_descriptor.opcode = ENA_ADMIN_SET_FEATURE; |
| 3220 | cmd.feat_common.feature_id = ENA_ADMIN_HOST_ATTR_CONFIG; |
| 3221 | |
| 3222 | ret = ena_com_mem_addr_set(ena_dev, |
| 3223 | &cmd.u.host_attr.debug_ba, |
| 3224 | host_attr->debug_area_dma_addr); |
| 3225 | if (unlikely(ret)) { |
| 3226 | ena_trc_err(ena_dev, "Memory address set failed\n"); |
| 3227 | return ret; |
| 3228 | } |
| 3229 | |
| 3230 | ret = ena_com_mem_addr_set(ena_dev, |
| 3231 | &cmd.u.host_attr.os_info_ba, |
| 3232 | host_attr->host_info_dma_addr); |
| 3233 | if (unlikely(ret)) { |
| 3234 | ena_trc_err(ena_dev, "Memory address set failed\n"); |
| 3235 | return ret; |
| 3236 | } |
| 3237 | |
| 3238 | cmd.u.host_attr.debug_area_size = host_attr->debug_area_size; |
| 3239 | |
| 3240 | ret = ena_com_execute_admin_command(admin_queue, |
| 3241 | (struct ena_admin_aq_entry *)&cmd, |
| 3242 | sizeof(cmd), |
| 3243 | (struct ena_admin_acq_entry *)&resp, |
| 3244 | sizeof(resp)); |
| 3245 | |
| 3246 | if (unlikely(ret)) |
| 3247 | ena_trc_err(ena_dev, "Failed to set host attributes: %d\n", ret); |
| 3248 | |
| 3249 | return ret; |
| 3250 | } |
| 3251 | |
| 3252 | /* Interrupt moderation */ |
| 3253 | bool ena_com_interrupt_moderation_supported(struct ena_com_dev *ena_dev) |
no test coverage detected