1 1.1 jdolecek /*- 2 1.1 jdolecek * BSD LICENSE 3 1.1 jdolecek * 4 1.1 jdolecek * Copyright (c) 2015-2017 Amazon.com, Inc. or its affiliates. 5 1.1 jdolecek * All rights reserved. 6 1.1 jdolecek * 7 1.1 jdolecek * Redistribution and use in source and binary forms, with or without 8 1.1 jdolecek * modification, are permitted provided that the following conditions 9 1.1 jdolecek * are met: 10 1.1 jdolecek * 11 1.1 jdolecek * * Redistributions of source code must retain the above copyright 12 1.1 jdolecek * notice, this list of conditions and the following disclaimer. 13 1.1 jdolecek * * Redistributions in binary form must reproduce the above copyright 14 1.1 jdolecek * notice, this list of conditions and the following disclaimer in 15 1.1 jdolecek * the documentation and/or other materials provided with the 16 1.1 jdolecek * distribution. 17 1.1 jdolecek * * Neither the name of copyright holder nor the names of its 18 1.1 jdolecek * contributors may be used to endorse or promote products derived 19 1.1 jdolecek * from this software without specific prior written permission. 20 1.1 jdolecek * 21 1.1 jdolecek * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 1.1 jdolecek * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 1.1 jdolecek * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 1.1 jdolecek * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 1.1 jdolecek * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 1.1 jdolecek * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 1.1 jdolecek * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 1.1 jdolecek * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 1.1 jdolecek * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 1.1 jdolecek * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 1.1 jdolecek * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 1.1 jdolecek */ 33 1.1 jdolecek #ifndef _ENA_ADMIN_H_ 34 1.1 jdolecek #define _ENA_ADMIN_H_ 35 1.1 jdolecek 36 1.1 jdolecek enum ena_admin_aq_opcode { 37 1.1 jdolecek ENA_ADMIN_CREATE_SQ = 1, 38 1.1 jdolecek 39 1.1 jdolecek ENA_ADMIN_DESTROY_SQ = 2, 40 1.1 jdolecek 41 1.1 jdolecek ENA_ADMIN_CREATE_CQ = 3, 42 1.1 jdolecek 43 1.1 jdolecek ENA_ADMIN_DESTROY_CQ = 4, 44 1.1 jdolecek 45 1.1 jdolecek ENA_ADMIN_GET_FEATURE = 8, 46 1.1 jdolecek 47 1.1 jdolecek ENA_ADMIN_SET_FEATURE = 9, 48 1.1 jdolecek 49 1.1 jdolecek ENA_ADMIN_GET_STATS = 11, 50 1.1 jdolecek }; 51 1.1 jdolecek 52 1.1 jdolecek enum ena_admin_aq_completion_status { 53 1.1 jdolecek ENA_ADMIN_SUCCESS = 0, 54 1.1 jdolecek 55 1.1 jdolecek ENA_ADMIN_RESOURCE_ALLOCATION_FAILURE = 1, 56 1.1 jdolecek 57 1.1 jdolecek ENA_ADMIN_BAD_OPCODE = 2, 58 1.1 jdolecek 59 1.1 jdolecek ENA_ADMIN_UNSUPPORTED_OPCODE = 3, 60 1.1 jdolecek 61 1.1 jdolecek ENA_ADMIN_MALFORMED_REQUEST = 4, 62 1.1 jdolecek 63 1.1 jdolecek /* Additional status is provided in ACQ entry extended_status */ 64 1.1 jdolecek ENA_ADMIN_ILLEGAL_PARAMETER = 5, 65 1.1 jdolecek 66 1.1 jdolecek ENA_ADMIN_UNKNOWN_ERROR = 6, 67 1.1 jdolecek }; 68 1.1 jdolecek 69 1.1 jdolecek enum ena_admin_aq_feature_id { 70 1.1 jdolecek ENA_ADMIN_DEVICE_ATTRIBUTES = 1, 71 1.1 jdolecek 72 1.1 jdolecek ENA_ADMIN_MAX_QUEUES_NUM = 2, 73 1.1 jdolecek 74 1.1 jdolecek ENA_ADMIN_HW_HINTS = 3, 75 1.1 jdolecek 76 1.1 jdolecek ENA_ADMIN_LLQ = 4, 77 1.1 jdolecek 78 1.1 jdolecek ENA_ADMIN_RSS_HASH_FUNCTION = 10, 79 1.1 jdolecek 80 1.1 jdolecek ENA_ADMIN_STATELESS_OFFLOAD_CONFIG = 11, 81 1.1 jdolecek 82 1.1 jdolecek ENA_ADMIN_RSS_REDIRECTION_TABLE_CONFIG = 12, 83 1.1 jdolecek 84 1.1 jdolecek ENA_ADMIN_MTU = 14, 85 1.1 jdolecek 86 1.1 jdolecek ENA_ADMIN_RSS_HASH_INPUT = 18, 87 1.1 jdolecek 88 1.1 jdolecek ENA_ADMIN_INTERRUPT_MODERATION = 20, 89 1.1 jdolecek 90 1.1 jdolecek ENA_ADMIN_AENQ_CONFIG = 26, 91 1.1 jdolecek 92 1.1 jdolecek ENA_ADMIN_LINK_CONFIG = 27, 93 1.1 jdolecek 94 1.1 jdolecek ENA_ADMIN_HOST_ATTR_CONFIG = 28, 95 1.1 jdolecek 96 1.1 jdolecek ENA_ADMIN_FEATURES_OPCODE_NUM = 32, 97 1.1 jdolecek }; 98 1.1 jdolecek 99 1.1 jdolecek enum ena_admin_placement_policy_type { 100 1.1 jdolecek /* descriptors and headers are in host memory */ 101 1.1 jdolecek ENA_ADMIN_PLACEMENT_POLICY_HOST = 1, 102 1.1 jdolecek 103 1.1 jdolecek /* descriptors and headers are in device memory (a.k.a Low Latency 104 1.1 jdolecek * Queue) 105 1.1 jdolecek */ 106 1.1 jdolecek ENA_ADMIN_PLACEMENT_POLICY_DEV = 3, 107 1.1 jdolecek }; 108 1.1 jdolecek 109 1.1 jdolecek enum ena_admin_link_types { 110 1.1 jdolecek ENA_ADMIN_LINK_SPEED_1G = 0x1, 111 1.1 jdolecek 112 1.1 jdolecek ENA_ADMIN_LINK_SPEED_2_HALF_G = 0x2, 113 1.1 jdolecek 114 1.1 jdolecek ENA_ADMIN_LINK_SPEED_5G = 0x4, 115 1.1 jdolecek 116 1.1 jdolecek ENA_ADMIN_LINK_SPEED_10G = 0x8, 117 1.1 jdolecek 118 1.1 jdolecek ENA_ADMIN_LINK_SPEED_25G = 0x10, 119 1.1 jdolecek 120 1.1 jdolecek ENA_ADMIN_LINK_SPEED_40G = 0x20, 121 1.1 jdolecek 122 1.1 jdolecek ENA_ADMIN_LINK_SPEED_50G = 0x40, 123 1.1 jdolecek 124 1.1 jdolecek ENA_ADMIN_LINK_SPEED_100G = 0x80, 125 1.1 jdolecek 126 1.1 jdolecek ENA_ADMIN_LINK_SPEED_200G = 0x100, 127 1.1 jdolecek 128 1.1 jdolecek ENA_ADMIN_LINK_SPEED_400G = 0x200, 129 1.1 jdolecek }; 130 1.1 jdolecek 131 1.1 jdolecek enum ena_admin_completion_policy_type { 132 1.1 jdolecek /* completion queue entry for each sq descriptor */ 133 1.1 jdolecek ENA_ADMIN_COMPLETION_POLICY_DESC = 0, 134 1.1 jdolecek 135 1.1 jdolecek /* completion queue entry upon request in sq descriptor */ 136 1.1 jdolecek ENA_ADMIN_COMPLETION_POLICY_DESC_ON_DEMAND = 1, 137 1.1 jdolecek 138 1.1 jdolecek /* current queue head pointer is updated in OS memory upon sq 139 1.1 jdolecek * descriptor request 140 1.1 jdolecek */ 141 1.1 jdolecek ENA_ADMIN_COMPLETION_POLICY_HEAD_ON_DEMAND = 2, 142 1.1 jdolecek 143 1.1 jdolecek /* current queue head pointer is updated in OS memory for each sq 144 1.1 jdolecek * descriptor 145 1.1 jdolecek */ 146 1.1 jdolecek ENA_ADMIN_COMPLETION_POLICY_HEAD = 3, 147 1.1 jdolecek }; 148 1.1 jdolecek 149 1.1 jdolecek /* basic stats return ena_admin_basic_stats while extanded stats return a 150 1.1 jdolecek * buffer (string format) with additional statistics per queue and per 151 1.1 jdolecek * device id 152 1.1 jdolecek */ 153 1.1 jdolecek enum ena_admin_get_stats_type { 154 1.1 jdolecek ENA_ADMIN_GET_STATS_TYPE_BASIC = 0, 155 1.1 jdolecek 156 1.1 jdolecek ENA_ADMIN_GET_STATS_TYPE_EXTENDED = 1, 157 1.1 jdolecek }; 158 1.1 jdolecek 159 1.1 jdolecek enum ena_admin_get_stats_scope { 160 1.1 jdolecek ENA_ADMIN_SPECIFIC_QUEUE = 0, 161 1.1 jdolecek 162 1.1 jdolecek ENA_ADMIN_ETH_TRAFFIC = 1, 163 1.1 jdolecek }; 164 1.1 jdolecek 165 1.1 jdolecek struct ena_admin_aq_common_desc { 166 1.1 jdolecek /* 11:0 : command_id 167 1.1 jdolecek * 15:12 : reserved12 168 1.1 jdolecek */ 169 1.1 jdolecek uint16_t command_id; 170 1.1 jdolecek 171 1.1 jdolecek /* as appears in ena_admin_aq_opcode */ 172 1.1 jdolecek uint8_t opcode; 173 1.1 jdolecek 174 1.1 jdolecek /* 0 : phase 175 1.1 jdolecek * 1 : ctrl_data - control buffer address valid 176 1.1 jdolecek * 2 : ctrl_data_indirect - control buffer address 177 1.1 jdolecek * points to list of pages with addresses of control 178 1.1 jdolecek * buffers 179 1.1 jdolecek * 7:3 : reserved3 180 1.1 jdolecek */ 181 1.1 jdolecek uint8_t flags; 182 1.1 jdolecek }; 183 1.1 jdolecek 184 1.1 jdolecek /* used in ena_admin_aq_entry. Can point directly to control data, or to a 185 1.1 jdolecek * page list chunk. Used also at the end of indirect mode page list chunks, 186 1.1 jdolecek * for chaining. 187 1.1 jdolecek */ 188 1.1 jdolecek struct ena_admin_ctrl_buff_info { 189 1.1 jdolecek uint32_t length; 190 1.1 jdolecek 191 1.1 jdolecek struct ena_common_mem_addr address; 192 1.1 jdolecek }; 193 1.1 jdolecek 194 1.1 jdolecek struct ena_admin_sq { 195 1.1 jdolecek uint16_t sq_idx; 196 1.1 jdolecek 197 1.1 jdolecek /* 4:0 : reserved 198 1.1 jdolecek * 7:5 : sq_direction - 0x1 - Tx; 0x2 - Rx 199 1.1 jdolecek */ 200 1.1 jdolecek uint8_t sq_identity; 201 1.1 jdolecek 202 1.1 jdolecek uint8_t reserved1; 203 1.1 jdolecek }; 204 1.1 jdolecek 205 1.1 jdolecek struct ena_admin_aq_entry { 206 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor; 207 1.1 jdolecek 208 1.1 jdolecek union { 209 1.1 jdolecek uint32_t inline_data_w1[3]; 210 1.1 jdolecek 211 1.1 jdolecek struct ena_admin_ctrl_buff_info control_buffer; 212 1.1 jdolecek } u; 213 1.1 jdolecek 214 1.1 jdolecek uint32_t inline_data_w4[12]; 215 1.1 jdolecek }; 216 1.1 jdolecek 217 1.1 jdolecek struct ena_admin_acq_common_desc { 218 1.1 jdolecek /* command identifier to associate it with the aq descriptor 219 1.1 jdolecek * 11:0 : command_id 220 1.1 jdolecek * 15:12 : reserved12 221 1.1 jdolecek */ 222 1.1 jdolecek uint16_t command; 223 1.1 jdolecek 224 1.1 jdolecek uint8_t status; 225 1.1 jdolecek 226 1.1 jdolecek /* 0 : phase 227 1.1 jdolecek * 7:1 : reserved1 228 1.1 jdolecek */ 229 1.1 jdolecek uint8_t flags; 230 1.1 jdolecek 231 1.1 jdolecek uint16_t extended_status; 232 1.1 jdolecek 233 1.1 jdolecek /* serves as a hint what AQ entries can be revoked */ 234 1.1 jdolecek uint16_t sq_head_indx; 235 1.1 jdolecek }; 236 1.1 jdolecek 237 1.1 jdolecek struct ena_admin_acq_entry { 238 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_descriptor; 239 1.1 jdolecek 240 1.1 jdolecek uint32_t response_specific_data[14]; 241 1.1 jdolecek }; 242 1.1 jdolecek 243 1.1 jdolecek struct ena_admin_aq_create_sq_cmd { 244 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor; 245 1.1 jdolecek 246 1.1 jdolecek /* 4:0 : reserved0_w1 247 1.1 jdolecek * 7:5 : sq_direction - 0x1 - Tx, 0x2 - Rx 248 1.1 jdolecek */ 249 1.1 jdolecek uint8_t sq_identity; 250 1.1 jdolecek 251 1.1 jdolecek uint8_t reserved8_w1; 252 1.1 jdolecek 253 1.1 jdolecek /* 3:0 : placement_policy - Describing where the SQ 254 1.1 jdolecek * descriptor ring and the SQ packet headers reside: 255 1.1 jdolecek * 0x1 - descriptors and headers are in OS memory, 256 1.1 jdolecek * 0x3 - descriptors and headers in device memory 257 1.1 jdolecek * (a.k.a Low Latency Queue) 258 1.1 jdolecek * 6:4 : completion_policy - Describing what policy 259 1.1 jdolecek * to use for generation completion entry (cqe) in 260 1.1 jdolecek * the CQ associated with this SQ: 0x0 - cqe for each 261 1.1 jdolecek * sq descriptor, 0x1 - cqe upon request in sq 262 1.1 jdolecek * descriptor, 0x2 - current queue head pointer is 263 1.1 jdolecek * updated in OS memory upon sq descriptor request 264 1.1 jdolecek * 0x3 - current queue head pointer is updated in OS 265 1.1 jdolecek * memory for each sq descriptor 266 1.1 jdolecek * 7 : reserved15_w1 267 1.1 jdolecek */ 268 1.1 jdolecek uint8_t sq_caps_2; 269 1.1 jdolecek 270 1.1 jdolecek /* 0 : is_physically_contiguous - Described if the 271 1.1 jdolecek * queue ring memory is allocated in physical 272 1.1 jdolecek * contiguous pages or split. 273 1.1 jdolecek * 7:1 : reserved17_w1 274 1.1 jdolecek */ 275 1.1 jdolecek uint8_t sq_caps_3; 276 1.1 jdolecek 277 1.1 jdolecek /* associated completion queue id. This CQ must be created prior to 278 1.1 jdolecek * SQ creation 279 1.1 jdolecek */ 280 1.1 jdolecek uint16_t cq_idx; 281 1.1 jdolecek 282 1.1 jdolecek /* submission queue depth in entries */ 283 1.1 jdolecek uint16_t sq_depth; 284 1.1 jdolecek 285 1.1 jdolecek /* SQ physical base address in OS memory. This field should not be 286 1.1 jdolecek * used for Low Latency queues. Has to be page aligned. 287 1.1 jdolecek */ 288 1.1 jdolecek struct ena_common_mem_addr sq_ba; 289 1.1 jdolecek 290 1.1 jdolecek /* specifies queue head writeback location in OS memory. Valid if 291 1.1 jdolecek * completion_policy is set to completion_policy_head_on_demand or 292 1.1 jdolecek * completion_policy_head. Has to be cache aligned 293 1.1 jdolecek */ 294 1.1 jdolecek struct ena_common_mem_addr sq_head_writeback; 295 1.1 jdolecek 296 1.1 jdolecek uint32_t reserved0_w7; 297 1.1 jdolecek 298 1.1 jdolecek uint32_t reserved0_w8; 299 1.1 jdolecek }; 300 1.1 jdolecek 301 1.1 jdolecek enum ena_admin_sq_direction { 302 1.1 jdolecek ENA_ADMIN_SQ_DIRECTION_TX = 1, 303 1.1 jdolecek 304 1.1 jdolecek ENA_ADMIN_SQ_DIRECTION_RX = 2, 305 1.1 jdolecek }; 306 1.1 jdolecek 307 1.1 jdolecek struct ena_admin_acq_create_sq_resp_desc { 308 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc; 309 1.1 jdolecek 310 1.1 jdolecek uint16_t sq_idx; 311 1.1 jdolecek 312 1.1 jdolecek uint16_t reserved; 313 1.1 jdolecek 314 1.1 jdolecek /* queue doorbell address as an offset to PCIe MMIO REG BAR */ 315 1.1 jdolecek uint32_t sq_doorbell_offset; 316 1.1 jdolecek 317 1.1 jdolecek /* low latency queue ring base address as an offset to PCIe MMIO 318 1.1 jdolecek * LLQ_MEM BAR 319 1.1 jdolecek */ 320 1.1 jdolecek uint32_t llq_descriptors_offset; 321 1.1 jdolecek 322 1.1 jdolecek /* low latency queue headers' memory as an offset to PCIe MMIO 323 1.1 jdolecek * LLQ_MEM BAR 324 1.1 jdolecek */ 325 1.1 jdolecek uint32_t llq_headers_offset; 326 1.1 jdolecek }; 327 1.1 jdolecek 328 1.1 jdolecek struct ena_admin_aq_destroy_sq_cmd { 329 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor; 330 1.1 jdolecek 331 1.1 jdolecek struct ena_admin_sq sq; 332 1.1 jdolecek }; 333 1.1 jdolecek 334 1.1 jdolecek struct ena_admin_acq_destroy_sq_resp_desc { 335 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc; 336 1.1 jdolecek }; 337 1.1 jdolecek 338 1.1 jdolecek struct ena_admin_aq_create_cq_cmd { 339 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor; 340 1.1 jdolecek 341 1.1 jdolecek /* 4:0 : reserved5 342 1.1 jdolecek * 5 : interrupt_mode_enabled - if set, cq operates 343 1.1 jdolecek * in interrupt mode, otherwise - polling 344 1.1 jdolecek * 7:6 : reserved6 345 1.1 jdolecek */ 346 1.1 jdolecek uint8_t cq_caps_1; 347 1.1 jdolecek 348 1.1 jdolecek /* 4:0 : cq_entry_size_words - size of CQ entry in 349 1.1 jdolecek * 32-bit words, valid values: 4, 8. 350 1.1 jdolecek * 7:5 : reserved7 351 1.1 jdolecek */ 352 1.1 jdolecek uint8_t cq_caps_2; 353 1.1 jdolecek 354 1.1 jdolecek /* completion queue depth in # of entries. must be power of 2 */ 355 1.1 jdolecek uint16_t cq_depth; 356 1.1 jdolecek 357 1.1 jdolecek /* msix vector assigned to this cq */ 358 1.1 jdolecek uint32_t msix_vector; 359 1.1 jdolecek 360 1.1 jdolecek /* cq physical base address in OS memory. CQ must be physically 361 1.1 jdolecek * contiguous 362 1.1 jdolecek */ 363 1.1 jdolecek struct ena_common_mem_addr cq_ba; 364 1.1 jdolecek }; 365 1.1 jdolecek 366 1.1 jdolecek struct ena_admin_acq_create_cq_resp_desc { 367 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc; 368 1.1 jdolecek 369 1.1 jdolecek uint16_t cq_idx; 370 1.1 jdolecek 371 1.1 jdolecek /* actual cq depth in number of entries */ 372 1.1 jdolecek uint16_t cq_actual_depth; 373 1.1 jdolecek 374 1.1 jdolecek uint32_t numa_node_register_offset; 375 1.1 jdolecek 376 1.1 jdolecek uint32_t cq_head_db_register_offset; 377 1.1 jdolecek 378 1.1 jdolecek uint32_t cq_interrupt_unmask_register_offset; 379 1.1 jdolecek }; 380 1.1 jdolecek 381 1.1 jdolecek struct ena_admin_aq_destroy_cq_cmd { 382 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor; 383 1.1 jdolecek 384 1.1 jdolecek uint16_t cq_idx; 385 1.1 jdolecek 386 1.1 jdolecek uint16_t reserved1; 387 1.1 jdolecek }; 388 1.1 jdolecek 389 1.1 jdolecek struct ena_admin_acq_destroy_cq_resp_desc { 390 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc; 391 1.1 jdolecek }; 392 1.1 jdolecek 393 1.1 jdolecek /* ENA AQ Get Statistics command. Extended statistics are placed in control 394 1.1 jdolecek * buffer pointed by AQ entry 395 1.1 jdolecek */ 396 1.1 jdolecek struct ena_admin_aq_get_stats_cmd { 397 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor; 398 1.1 jdolecek 399 1.1 jdolecek union { 400 1.1 jdolecek /* command specific inline data */ 401 1.1 jdolecek uint32_t inline_data_w1[3]; 402 1.1 jdolecek 403 1.1 jdolecek struct ena_admin_ctrl_buff_info control_buffer; 404 1.1 jdolecek } u; 405 1.1 jdolecek 406 1.1 jdolecek /* stats type as defined in enum ena_admin_get_stats_type */ 407 1.1 jdolecek uint8_t type; 408 1.1 jdolecek 409 1.1 jdolecek /* stats scope defined in enum ena_admin_get_stats_scope */ 410 1.1 jdolecek uint8_t scope; 411 1.1 jdolecek 412 1.1 jdolecek uint16_t reserved3; 413 1.1 jdolecek 414 1.1 jdolecek /* queue id. used when scope is specific_queue */ 415 1.1 jdolecek uint16_t queue_idx; 416 1.1 jdolecek 417 1.1 jdolecek /* device id, value 0xFFFF means mine. only privileged device can get 418 1.1 jdolecek * stats of other device 419 1.1 jdolecek */ 420 1.1 jdolecek uint16_t device_id; 421 1.1 jdolecek }; 422 1.1 jdolecek 423 1.1 jdolecek /* Basic Statistics Command. */ 424 1.1 jdolecek struct ena_admin_basic_stats { 425 1.1 jdolecek uint32_t tx_bytes_low; 426 1.1 jdolecek 427 1.1 jdolecek uint32_t tx_bytes_high; 428 1.1 jdolecek 429 1.1 jdolecek uint32_t tx_pkts_low; 430 1.1 jdolecek 431 1.1 jdolecek uint32_t tx_pkts_high; 432 1.1 jdolecek 433 1.1 jdolecek uint32_t rx_bytes_low; 434 1.1 jdolecek 435 1.1 jdolecek uint32_t rx_bytes_high; 436 1.1 jdolecek 437 1.1 jdolecek uint32_t rx_pkts_low; 438 1.1 jdolecek 439 1.1 jdolecek uint32_t rx_pkts_high; 440 1.1 jdolecek 441 1.1 jdolecek uint32_t rx_drops_low; 442 1.1 jdolecek 443 1.1 jdolecek uint32_t rx_drops_high; 444 1.1 jdolecek }; 445 1.1 jdolecek 446 1.1 jdolecek struct ena_admin_acq_get_stats_resp { 447 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc; 448 1.1 jdolecek 449 1.1 jdolecek struct ena_admin_basic_stats basic_stats; 450 1.1 jdolecek }; 451 1.1 jdolecek 452 1.1 jdolecek struct ena_admin_get_set_feature_common_desc { 453 1.1 jdolecek /* 1:0 : select - 0x1 - current value; 0x3 - default 454 1.1 jdolecek * value 455 1.1 jdolecek * 7:3 : reserved3 456 1.1 jdolecek */ 457 1.1 jdolecek uint8_t flags; 458 1.1 jdolecek 459 1.1 jdolecek /* as appears in ena_admin_aq_feature_id */ 460 1.1 jdolecek uint8_t feature_id; 461 1.1 jdolecek 462 1.1 jdolecek uint16_t reserved16; 463 1.1 jdolecek }; 464 1.1 jdolecek 465 1.1 jdolecek struct ena_admin_device_attr_feature_desc { 466 1.1 jdolecek uint32_t impl_id; 467 1.1 jdolecek 468 1.1 jdolecek uint32_t device_version; 469 1.1 jdolecek 470 1.1 jdolecek /* bitmap of ena_admin_aq_feature_id */ 471 1.1 jdolecek uint32_t supported_features; 472 1.1 jdolecek 473 1.1 jdolecek uint32_t reserved3; 474 1.1 jdolecek 475 1.1 jdolecek /* Indicates how many bits are used physical address access. */ 476 1.1 jdolecek uint32_t phys_addr_width; 477 1.1 jdolecek 478 1.1 jdolecek /* Indicates how many bits are used virtual address access. */ 479 1.1 jdolecek uint32_t virt_addr_width; 480 1.1 jdolecek 481 1.1 jdolecek /* unicast MAC address (in Network byte order) */ 482 1.1 jdolecek uint8_t mac_addr[6]; 483 1.1 jdolecek 484 1.1 jdolecek uint8_t reserved7[2]; 485 1.1 jdolecek 486 1.1 jdolecek uint32_t max_mtu; 487 1.1 jdolecek }; 488 1.1 jdolecek 489 1.1 jdolecek enum ena_admin_llq_header_location { 490 1.1 jdolecek /* header is in descriptor list */ 491 1.1 jdolecek ENA_ADMIN_INLINE_HEADER = 1, 492 1.1 jdolecek 493 1.1 jdolecek /* header in a separate ring, implies 16B descriptor list entry */ 494 1.1 jdolecek ENA_ADMIN_HEADER_RING = 2, 495 1.1 jdolecek }; 496 1.1 jdolecek 497 1.1 jdolecek enum ena_admin_llq_ring_entry_size { 498 1.1 jdolecek ENA_ADMIN_LIST_ENTRY_SIZE_128B = 1, 499 1.1 jdolecek 500 1.1 jdolecek ENA_ADMIN_LIST_ENTRY_SIZE_192B = 2, 501 1.1 jdolecek 502 1.1 jdolecek ENA_ADMIN_LIST_ENTRY_SIZE_256B = 4, 503 1.1 jdolecek }; 504 1.1 jdolecek 505 1.1 jdolecek enum ena_admin_llq_num_descs_before_header { 506 1.1 jdolecek ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_0 = 0, 507 1.1 jdolecek 508 1.1 jdolecek ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_1 = 1, 509 1.1 jdolecek 510 1.1 jdolecek ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_2 = 2, 511 1.1 jdolecek 512 1.1 jdolecek ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_4 = 4, 513 1.1 jdolecek 514 1.1 jdolecek ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_8 = 8, 515 1.1 jdolecek }; 516 1.1 jdolecek 517 1.1 jdolecek /* packet descriptor list entry always starts with one or more descriptors, 518 1.1 jdolecek * followed by a header. The rest of the descriptors are located in the 519 1.1 jdolecek * beginning of the subsequent entry. Stride refers to how the rest of the 520 1.1 jdolecek * descriptors are placed. This field is relevant only for inline header 521 1.1 jdolecek * mode 522 1.1 jdolecek */ 523 1.1 jdolecek enum ena_admin_llq_stride_ctrl { 524 1.1 jdolecek ENA_ADMIN_SINGLE_DESC_PER_ENTRY = 1, 525 1.1 jdolecek 526 1.1 jdolecek ENA_ADMIN_MULTIPLE_DESCS_PER_ENTRY = 2, 527 1.1 jdolecek }; 528 1.1 jdolecek 529 1.1 jdolecek struct ena_admin_feature_llq_desc { 530 1.1 jdolecek uint32_t max_llq_num; 531 1.1 jdolecek 532 1.1 jdolecek uint32_t max_llq_depth; 533 1.1 jdolecek 534 1.1 jdolecek /* use enum ena_admin_llq_header_location */ 535 1.1 jdolecek uint16_t header_location_ctrl; 536 1.1 jdolecek 537 1.1 jdolecek /* if inline header is specified - this is the size of descriptor 538 1.1 jdolecek * list entry. If header in a separate ring is specified - this is 539 1.1 jdolecek * the size of header ring entry. use enum 540 1.1 jdolecek * ena_admin_llq_ring_entry_size 541 1.1 jdolecek */ 542 1.1 jdolecek uint16_t entry_size_ctrl; 543 1.1 jdolecek 544 1.1 jdolecek /* valid only if inline header is specified. First entry associated 545 1.1 jdolecek * with the packet includes descriptors and header. Rest of the 546 1.1 jdolecek * entries occupied by descriptors. This parameter defines the max 547 1.1 jdolecek * number of descriptors precedding the header in the first entry. 548 1.1 jdolecek * Values: use enum llq_num_descs_before_header 549 1.1 jdolecek */ 550 1.1 jdolecek uint16_t desc_num_before_header_ctrl; 551 1.1 jdolecek 552 1.1 jdolecek /* valid, only if inline header is specified. Note, use enum 553 1.1 jdolecek * ena_admin_llq_stide_ctrl 554 1.1 jdolecek */ 555 1.1 jdolecek uint16_t descriptors_stride_ctrl; 556 1.1 jdolecek }; 557 1.1 jdolecek 558 1.1 jdolecek struct ena_admin_queue_feature_desc { 559 1.1 jdolecek /* including LLQs */ 560 1.1 jdolecek uint32_t max_sq_num; 561 1.1 jdolecek 562 1.1 jdolecek uint32_t max_sq_depth; 563 1.1 jdolecek 564 1.1 jdolecek uint32_t max_cq_num; 565 1.1 jdolecek 566 1.1 jdolecek uint32_t max_cq_depth; 567 1.1 jdolecek 568 1.1 jdolecek uint32_t max_legacy_llq_num; 569 1.1 jdolecek 570 1.1 jdolecek uint32_t max_legacy_llq_depth; 571 1.1 jdolecek 572 1.1 jdolecek uint32_t max_header_size; 573 1.1 jdolecek 574 1.1 jdolecek /* Maximum Descriptors number, including meta descriptor, allowed for 575 1.1 jdolecek * a single Tx packet 576 1.1 jdolecek */ 577 1.1 jdolecek uint16_t max_packet_tx_descs; 578 1.1 jdolecek 579 1.1 jdolecek /* Maximum Descriptors number allowed for a single Rx packet */ 580 1.1 jdolecek uint16_t max_packet_rx_descs; 581 1.1 jdolecek }; 582 1.1 jdolecek 583 1.1 jdolecek struct ena_admin_set_feature_mtu_desc { 584 1.1 jdolecek /* exclude L2 */ 585 1.1 jdolecek uint32_t mtu; 586 1.1 jdolecek }; 587 1.1 jdolecek 588 1.1 jdolecek struct ena_admin_set_feature_host_attr_desc { 589 1.1 jdolecek /* host OS info base address in OS memory. host info is 4KB of 590 1.1 jdolecek * physically contiguous 591 1.1 jdolecek */ 592 1.1 jdolecek struct ena_common_mem_addr os_info_ba; 593 1.1 jdolecek 594 1.1 jdolecek /* host debug area base address in OS memory. debug area must be 595 1.1 jdolecek * physically contiguous 596 1.1 jdolecek */ 597 1.1 jdolecek struct ena_common_mem_addr debug_ba; 598 1.1 jdolecek 599 1.1 jdolecek /* debug area size */ 600 1.1 jdolecek uint32_t debug_area_size; 601 1.1 jdolecek }; 602 1.1 jdolecek 603 1.1 jdolecek struct ena_admin_feature_intr_moder_desc { 604 1.1 jdolecek /* interrupt delay granularity in usec */ 605 1.1 jdolecek uint16_t intr_delay_resolution; 606 1.1 jdolecek 607 1.1 jdolecek uint16_t reserved; 608 1.1 jdolecek }; 609 1.1 jdolecek 610 1.1 jdolecek struct ena_admin_get_feature_link_desc { 611 1.1 jdolecek /* Link speed in Mb */ 612 1.1 jdolecek uint32_t speed; 613 1.1 jdolecek 614 1.1 jdolecek /* bit field of enum ena_admin_link types */ 615 1.1 jdolecek uint32_t supported; 616 1.1 jdolecek 617 1.1 jdolecek /* 0 : autoneg 618 1.1 jdolecek * 1 : duplex - Full Duplex 619 1.1 jdolecek * 31:2 : reserved2 620 1.1 jdolecek */ 621 1.1 jdolecek uint32_t flags; 622 1.1 jdolecek }; 623 1.1 jdolecek 624 1.1 jdolecek struct ena_admin_feature_aenq_desc { 625 1.1 jdolecek /* bitmask for AENQ groups the device can report */ 626 1.1 jdolecek uint32_t supported_groups; 627 1.1 jdolecek 628 1.1 jdolecek /* bitmask for AENQ groups to report */ 629 1.1 jdolecek uint32_t enabled_groups; 630 1.1 jdolecek }; 631 1.1 jdolecek 632 1.1 jdolecek struct ena_admin_feature_offload_desc { 633 1.1 jdolecek /* 0 : TX_L3_csum_ipv4 634 1.1 jdolecek * 1 : TX_L4_ipv4_csum_part - The checksum field 635 1.1 jdolecek * should be initialized with pseudo header checksum 636 1.1 jdolecek * 2 : TX_L4_ipv4_csum_full 637 1.1 jdolecek * 3 : TX_L4_ipv6_csum_part - The checksum field 638 1.1 jdolecek * should be initialized with pseudo header checksum 639 1.1 jdolecek * 4 : TX_L4_ipv6_csum_full 640 1.1 jdolecek * 5 : tso_ipv4 641 1.1 jdolecek * 6 : tso_ipv6 642 1.1 jdolecek * 7 : tso_ecn 643 1.1 jdolecek */ 644 1.1 jdolecek uint32_t tx; 645 1.1 jdolecek 646 1.1 jdolecek /* Receive side supported stateless offload 647 1.1 jdolecek * 0 : RX_L3_csum_ipv4 - IPv4 checksum 648 1.1 jdolecek * 1 : RX_L4_ipv4_csum - TCP/UDP/IPv4 checksum 649 1.1 jdolecek * 2 : RX_L4_ipv6_csum - TCP/UDP/IPv6 checksum 650 1.1 jdolecek * 3 : RX_hash - Hash calculation 651 1.1 jdolecek */ 652 1.1 jdolecek uint32_t rx_supported; 653 1.1 jdolecek 654 1.1 jdolecek uint32_t rx_enabled; 655 1.1 jdolecek }; 656 1.1 jdolecek 657 1.1 jdolecek enum ena_admin_hash_functions { 658 1.1 jdolecek ENA_ADMIN_TOEPLITZ = 1, 659 1.1 jdolecek 660 1.1 jdolecek ENA_ADMIN_CRC32 = 2, 661 1.1 jdolecek }; 662 1.1 jdolecek 663 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_control { 664 1.1 jdolecek uint32_t keys_num; 665 1.1 jdolecek 666 1.1 jdolecek uint32_t reserved; 667 1.1 jdolecek 668 1.1 jdolecek uint32_t key[10]; 669 1.1 jdolecek }; 670 1.1 jdolecek 671 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_function { 672 1.1 jdolecek /* 7:0 : funcs - bitmask of ena_admin_hash_functions */ 673 1.1 jdolecek uint32_t supported_func; 674 1.1 jdolecek 675 1.1 jdolecek /* 7:0 : selected_func - bitmask of 676 1.1 jdolecek * ena_admin_hash_functions 677 1.1 jdolecek */ 678 1.1 jdolecek uint32_t selected_func; 679 1.1 jdolecek 680 1.1 jdolecek /* initial value */ 681 1.1 jdolecek uint32_t init_val; 682 1.1 jdolecek }; 683 1.1 jdolecek 684 1.1 jdolecek /* RSS flow hash protocols */ 685 1.1 jdolecek enum ena_admin_flow_hash_proto { 686 1.1 jdolecek ENA_ADMIN_RSS_TCP4 = 0, 687 1.1 jdolecek 688 1.1 jdolecek ENA_ADMIN_RSS_UDP4 = 1, 689 1.1 jdolecek 690 1.1 jdolecek ENA_ADMIN_RSS_TCP6 = 2, 691 1.1 jdolecek 692 1.1 jdolecek ENA_ADMIN_RSS_UDP6 = 3, 693 1.1 jdolecek 694 1.1 jdolecek ENA_ADMIN_RSS_IP4 = 4, 695 1.1 jdolecek 696 1.1 jdolecek ENA_ADMIN_RSS_IP6 = 5, 697 1.1 jdolecek 698 1.1 jdolecek ENA_ADMIN_RSS_IP4_FRAG = 6, 699 1.1 jdolecek 700 1.1 jdolecek ENA_ADMIN_RSS_NOT_IP = 7, 701 1.1 jdolecek 702 1.1 jdolecek /* TCPv6 with extension header */ 703 1.1 jdolecek ENA_ADMIN_RSS_TCP6_EX = 8, 704 1.1 jdolecek 705 1.1 jdolecek /* IPv6 with extension header */ 706 1.1 jdolecek ENA_ADMIN_RSS_IP6_EX = 9, 707 1.1 jdolecek 708 1.1 jdolecek ENA_ADMIN_RSS_PROTO_NUM = 16, 709 1.1 jdolecek }; 710 1.1 jdolecek 711 1.1 jdolecek /* RSS flow hash fields */ 712 1.1 jdolecek enum ena_admin_flow_hash_fields { 713 1.1 jdolecek /* Ethernet Dest Addr */ 714 1.1 jdolecek ENA_ADMIN_RSS_L2_DA = BIT(0), 715 1.1 jdolecek 716 1.1 jdolecek /* Ethernet Src Addr */ 717 1.1 jdolecek ENA_ADMIN_RSS_L2_SA = BIT(1), 718 1.1 jdolecek 719 1.1 jdolecek /* ipv4/6 Dest Addr */ 720 1.1 jdolecek ENA_ADMIN_RSS_L3_DA = BIT(2), 721 1.1 jdolecek 722 1.1 jdolecek /* ipv4/6 Src Addr */ 723 1.1 jdolecek ENA_ADMIN_RSS_L3_SA = BIT(3), 724 1.1 jdolecek 725 1.1 jdolecek /* tcp/udp Dest Port */ 726 1.1 jdolecek ENA_ADMIN_RSS_L4_DP = BIT(4), 727 1.1 jdolecek 728 1.1 jdolecek /* tcp/udp Src Port */ 729 1.1 jdolecek ENA_ADMIN_RSS_L4_SP = BIT(5), 730 1.1 jdolecek }; 731 1.1 jdolecek 732 1.1 jdolecek struct ena_admin_proto_input { 733 1.1 jdolecek /* flow hash fields (bitwise according to ena_admin_flow_hash_fields) */ 734 1.1 jdolecek uint16_t fields; 735 1.1 jdolecek 736 1.1 jdolecek uint16_t reserved2; 737 1.1 jdolecek }; 738 1.1 jdolecek 739 1.1 jdolecek struct ena_admin_feature_rss_hash_control { 740 1.1 jdolecek struct ena_admin_proto_input supported_fields[ENA_ADMIN_RSS_PROTO_NUM]; 741 1.1 jdolecek 742 1.1 jdolecek struct ena_admin_proto_input selected_fields[ENA_ADMIN_RSS_PROTO_NUM]; 743 1.1 jdolecek 744 1.1 jdolecek struct ena_admin_proto_input reserved2[ENA_ADMIN_RSS_PROTO_NUM]; 745 1.1 jdolecek 746 1.1 jdolecek struct ena_admin_proto_input reserved3[ENA_ADMIN_RSS_PROTO_NUM]; 747 1.1 jdolecek }; 748 1.1 jdolecek 749 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_input { 750 1.1 jdolecek /* supported hash input sorting 751 1.1 jdolecek * 1 : L3_sort - support swap L3 addresses if DA is 752 1.1 jdolecek * smaller than SA 753 1.1 jdolecek * 2 : L4_sort - support swap L4 ports if DP smaller 754 1.1 jdolecek * SP 755 1.1 jdolecek */ 756 1.1 jdolecek uint16_t supported_input_sort; 757 1.1 jdolecek 758 1.1 jdolecek /* enabled hash input sorting 759 1.1 jdolecek * 1 : enable_L3_sort - enable swap L3 addresses if 760 1.1 jdolecek * DA smaller than SA 761 1.1 jdolecek * 2 : enable_L4_sort - enable swap L4 ports if DP 762 1.1 jdolecek * smaller than SP 763 1.1 jdolecek */ 764 1.1 jdolecek uint16_t enabled_input_sort; 765 1.1 jdolecek }; 766 1.1 jdolecek 767 1.1 jdolecek enum ena_admin_os_type { 768 1.1 jdolecek ENA_ADMIN_OS_LINUX = 1, 769 1.1 jdolecek 770 1.1 jdolecek ENA_ADMIN_OS_WIN = 2, 771 1.1 jdolecek 772 1.1 jdolecek ENA_ADMIN_OS_DPDK = 3, 773 1.1 jdolecek 774 1.1 jdolecek ENA_ADMIN_OS_FREEBSD = 4, 775 1.1 jdolecek 776 1.1 jdolecek ENA_ADMIN_OS_IPXE = 5, 777 1.1 jdolecek }; 778 1.1 jdolecek 779 1.1 jdolecek struct ena_admin_host_info { 780 1.1 jdolecek /* defined in enum ena_admin_os_type */ 781 1.1 jdolecek uint32_t os_type; 782 1.1 jdolecek 783 1.1 jdolecek /* os distribution string format */ 784 1.1 jdolecek uint8_t os_dist_str[128]; 785 1.1 jdolecek 786 1.1 jdolecek /* OS distribution numeric format */ 787 1.1 jdolecek uint32_t os_dist; 788 1.1 jdolecek 789 1.1 jdolecek /* kernel version string format */ 790 1.1 jdolecek uint8_t kernel_ver_str[32]; 791 1.1 jdolecek 792 1.1 jdolecek /* Kernel version numeric format */ 793 1.1 jdolecek uint32_t kernel_ver; 794 1.1 jdolecek 795 1.1 jdolecek /* 7:0 : major 796 1.1 jdolecek * 15:8 : minor 797 1.1 jdolecek * 23:16 : sub_minor 798 1.1 jdolecek */ 799 1.1 jdolecek uint32_t driver_version; 800 1.1 jdolecek 801 1.1 jdolecek /* features bitmap */ 802 1.1 jdolecek uint32_t supported_network_features[4]; 803 1.1 jdolecek }; 804 1.1 jdolecek 805 1.1 jdolecek struct ena_admin_rss_ind_table_entry { 806 1.1 jdolecek uint16_t cq_idx; 807 1.1 jdolecek 808 1.1 jdolecek uint16_t reserved; 809 1.1 jdolecek }; 810 1.1 jdolecek 811 1.1 jdolecek struct ena_admin_feature_rss_ind_table { 812 1.1 jdolecek /* min supported table size (2^min_size) */ 813 1.1 jdolecek uint16_t min_size; 814 1.1 jdolecek 815 1.1 jdolecek /* max supported table size (2^max_size) */ 816 1.1 jdolecek uint16_t max_size; 817 1.1 jdolecek 818 1.1 jdolecek /* table size (2^size) */ 819 1.1 jdolecek uint16_t size; 820 1.1 jdolecek 821 1.1 jdolecek uint16_t reserved; 822 1.1 jdolecek 823 1.1 jdolecek /* index of the inline entry. 0xFFFFFFFF means invalid */ 824 1.1 jdolecek uint32_t inline_index; 825 1.1 jdolecek 826 1.1 jdolecek /* used for updating single entry, ignored when setting the entire 827 1.1 jdolecek * table through the control buffer. 828 1.1 jdolecek */ 829 1.1 jdolecek struct ena_admin_rss_ind_table_entry inline_entry; 830 1.1 jdolecek }; 831 1.1 jdolecek 832 1.1 jdolecek /* When hint value is 0, driver should use it's own predefined value */ 833 1.1 jdolecek struct ena_admin_ena_hw_hints { 834 1.1 jdolecek /* value in ms */ 835 1.1 jdolecek uint16_t mmio_read_timeout; 836 1.1 jdolecek 837 1.1 jdolecek /* value in ms */ 838 1.1 jdolecek uint16_t driver_watchdog_timeout; 839 1.1 jdolecek 840 1.1 jdolecek /* Per packet tx completion timeout. value in ms */ 841 1.1 jdolecek uint16_t missing_tx_completion_timeout; 842 1.1 jdolecek 843 1.1 jdolecek uint16_t missed_tx_completion_count_threshold_to_reset; 844 1.1 jdolecek 845 1.1 jdolecek /* value in ms */ 846 1.1 jdolecek uint16_t admin_completion_tx_timeout; 847 1.1 jdolecek 848 1.1 jdolecek uint16_t netdev_wd_timeout; 849 1.1 jdolecek 850 1.1 jdolecek uint16_t max_tx_sgl_size; 851 1.1 jdolecek 852 1.1 jdolecek uint16_t max_rx_sgl_size; 853 1.1 jdolecek 854 1.1 jdolecek uint16_t reserved[8]; 855 1.1 jdolecek }; 856 1.1 jdolecek 857 1.1 jdolecek struct ena_admin_get_feat_cmd { 858 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor; 859 1.1 jdolecek 860 1.1 jdolecek struct ena_admin_ctrl_buff_info control_buffer; 861 1.1 jdolecek 862 1.1 jdolecek struct ena_admin_get_set_feature_common_desc feat_common; 863 1.1 jdolecek 864 1.1 jdolecek uint32_t raw[11]; 865 1.1 jdolecek }; 866 1.1 jdolecek 867 1.1 jdolecek struct ena_admin_get_feat_resp { 868 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc; 869 1.1 jdolecek 870 1.1 jdolecek union { 871 1.1 jdolecek uint32_t raw[14]; 872 1.1 jdolecek 873 1.1 jdolecek struct ena_admin_device_attr_feature_desc dev_attr; 874 1.1 jdolecek 875 1.1 jdolecek struct ena_admin_feature_llq_desc llq; 876 1.1 jdolecek 877 1.1 jdolecek struct ena_admin_queue_feature_desc max_queue; 878 1.1 jdolecek 879 1.1 jdolecek struct ena_admin_feature_aenq_desc aenq; 880 1.1 jdolecek 881 1.1 jdolecek struct ena_admin_get_feature_link_desc link; 882 1.1 jdolecek 883 1.1 jdolecek struct ena_admin_feature_offload_desc offload; 884 1.1 jdolecek 885 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_function flow_hash_func; 886 1.1 jdolecek 887 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_input flow_hash_input; 888 1.1 jdolecek 889 1.1 jdolecek struct ena_admin_feature_rss_ind_table ind_table; 890 1.1 jdolecek 891 1.1 jdolecek struct ena_admin_feature_intr_moder_desc intr_moderation; 892 1.1 jdolecek 893 1.1 jdolecek struct ena_admin_ena_hw_hints hw_hints; 894 1.1 jdolecek } u; 895 1.1 jdolecek }; 896 1.1 jdolecek 897 1.1 jdolecek struct ena_admin_set_feat_cmd { 898 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor; 899 1.1 jdolecek 900 1.1 jdolecek struct ena_admin_ctrl_buff_info control_buffer; 901 1.1 jdolecek 902 1.1 jdolecek struct ena_admin_get_set_feature_common_desc feat_common; 903 1.1 jdolecek 904 1.1 jdolecek union { 905 1.1 jdolecek uint32_t raw[11]; 906 1.1 jdolecek 907 1.1 jdolecek /* mtu size */ 908 1.1 jdolecek struct ena_admin_set_feature_mtu_desc mtu; 909 1.1 jdolecek 910 1.1 jdolecek /* host attributes */ 911 1.1 jdolecek struct ena_admin_set_feature_host_attr_desc host_attr; 912 1.1 jdolecek 913 1.1 jdolecek /* AENQ configuration */ 914 1.1 jdolecek struct ena_admin_feature_aenq_desc aenq; 915 1.1 jdolecek 916 1.1 jdolecek /* rss flow hash function */ 917 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_function flow_hash_func; 918 1.1 jdolecek 919 1.1 jdolecek /* rss flow hash input */ 920 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_input flow_hash_input; 921 1.1 jdolecek 922 1.1 jdolecek /* rss indirection table */ 923 1.1 jdolecek struct ena_admin_feature_rss_ind_table ind_table; 924 1.1 jdolecek } u; 925 1.1 jdolecek }; 926 1.1 jdolecek 927 1.1 jdolecek struct ena_admin_set_feat_resp { 928 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc; 929 1.1 jdolecek 930 1.1 jdolecek union { 931 1.1 jdolecek uint32_t raw[14]; 932 1.1 jdolecek } u; 933 1.1 jdolecek }; 934 1.1 jdolecek 935 1.1 jdolecek struct ena_admin_aenq_common_desc { 936 1.1 jdolecek uint16_t group; 937 1.1 jdolecek 938 1.1 jdolecek uint16_t syndrom; 939 1.1 jdolecek 940 1.1 jdolecek /* 0 : phase */ 941 1.1 jdolecek uint8_t flags; 942 1.1 jdolecek 943 1.1 jdolecek uint8_t reserved1[3]; 944 1.1 jdolecek 945 1.1 jdolecek uint32_t timestamp_low; 946 1.1 jdolecek 947 1.1 jdolecek uint32_t timestamp_high; 948 1.1 jdolecek }; 949 1.1 jdolecek 950 1.1 jdolecek /* asynchronous event notification groups */ 951 1.1 jdolecek enum ena_admin_aenq_group { 952 1.1 jdolecek ENA_ADMIN_LINK_CHANGE = 0, 953 1.1 jdolecek 954 1.1 jdolecek ENA_ADMIN_FATAL_ERROR = 1, 955 1.1 jdolecek 956 1.1 jdolecek ENA_ADMIN_WARNING = 2, 957 1.1 jdolecek 958 1.1 jdolecek ENA_ADMIN_NOTIFICATION = 3, 959 1.1 jdolecek 960 1.1 jdolecek ENA_ADMIN_KEEP_ALIVE = 4, 961 1.1 jdolecek 962 1.1 jdolecek ENA_ADMIN_AENQ_GROUPS_NUM = 5, 963 1.1 jdolecek }; 964 1.1 jdolecek 965 1.1 jdolecek enum ena_admin_aenq_notification_syndrom { 966 1.1 jdolecek ENA_ADMIN_SUSPEND = 0, 967 1.1 jdolecek 968 1.1 jdolecek ENA_ADMIN_RESUME = 1, 969 1.1 jdolecek 970 1.1 jdolecek ENA_ADMIN_UPDATE_HINTS = 2, 971 1.1 jdolecek }; 972 1.1 jdolecek 973 1.1 jdolecek struct ena_admin_aenq_entry { 974 1.1 jdolecek struct ena_admin_aenq_common_desc aenq_common_desc; 975 1.1 jdolecek 976 1.1 jdolecek /* command specific inline data */ 977 1.1 jdolecek uint32_t inline_data_w4[12]; 978 1.1 jdolecek }; 979 1.1 jdolecek 980 1.1 jdolecek struct ena_admin_aenq_link_change_desc { 981 1.1 jdolecek struct ena_admin_aenq_common_desc aenq_common_desc; 982 1.1 jdolecek 983 1.1 jdolecek /* 0 : link_status */ 984 1.1 jdolecek uint32_t flags; 985 1.1 jdolecek }; 986 1.1 jdolecek 987 1.1 jdolecek struct ena_admin_aenq_keep_alive_desc { 988 1.1 jdolecek struct ena_admin_aenq_common_desc aenq_common_desc; 989 1.1 jdolecek 990 1.1 jdolecek uint32_t rx_drops_low; 991 1.1 jdolecek 992 1.1 jdolecek uint32_t rx_drops_high; 993 1.1 jdolecek }; 994 1.1 jdolecek 995 1.1 jdolecek struct ena_admin_ena_mmio_req_read_less_resp { 996 1.1 jdolecek uint16_t req_id; 997 1.1 jdolecek 998 1.1 jdolecek uint16_t reg_off; 999 1.1 jdolecek 1000 1.1 jdolecek /* value is valid when poll is cleared */ 1001 1.1 jdolecek uint32_t reg_val; 1002 1.1 jdolecek }; 1003 1.1 jdolecek 1004 1.1 jdolecek /* aq_common_desc */ 1005 1.1 jdolecek #define ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK GENMASK(11, 0) 1006 1.1 jdolecek #define ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK BIT(0) 1007 1.1 jdolecek #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT 1 1008 1.1 jdolecek #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK BIT(1) 1009 1.1 jdolecek #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT 2 1010 1.1 jdolecek #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK BIT(2) 1011 1.1 jdolecek 1012 1.1 jdolecek /* sq */ 1013 1.1 jdolecek #define ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT 5 1014 1.1 jdolecek #define ENA_ADMIN_SQ_SQ_DIRECTION_MASK GENMASK(7, 5) 1015 1.1 jdolecek 1016 1.1 jdolecek /* acq_common_desc */ 1017 1.1 jdolecek #define ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK GENMASK(11, 0) 1018 1.1 jdolecek #define ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK BIT(0) 1019 1.1 jdolecek 1020 1.1 jdolecek /* aq_create_sq_cmd */ 1021 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT 5 1022 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK GENMASK(7, 5) 1023 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK GENMASK(3, 0) 1024 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT 4 1025 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK GENMASK(6, 4) 1026 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK BIT(0) 1027 1.1 jdolecek 1028 1.1 jdolecek /* aq_create_cq_cmd */ 1029 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT 5 1030 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK BIT(5) 1031 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK GENMASK(4, 0) 1032 1.1 jdolecek 1033 1.1 jdolecek /* get_set_feature_common_desc */ 1034 1.1 jdolecek #define ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK GENMASK(1, 0) 1035 1.1 jdolecek 1036 1.1 jdolecek /* get_feature_link_desc */ 1037 1.1 jdolecek #define ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK BIT(0) 1038 1.1 jdolecek #define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT 1 1039 1.1 jdolecek #define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK BIT(1) 1040 1.1 jdolecek 1041 1.1 jdolecek /* feature_offload_desc */ 1042 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK BIT(0) 1043 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT 1 1044 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK BIT(1) 1045 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT 2 1046 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK BIT(2) 1047 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT 3 1048 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK BIT(3) 1049 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT 4 1050 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK BIT(4) 1051 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT 5 1052 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK BIT(5) 1053 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT 6 1054 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK BIT(6) 1055 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT 7 1056 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK BIT(7) 1057 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK BIT(0) 1058 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT 1 1059 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK BIT(1) 1060 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT 2 1061 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK BIT(2) 1062 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT 3 1063 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK BIT(3) 1064 1.1 jdolecek 1065 1.1 jdolecek /* feature_rss_flow_hash_function */ 1066 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK GENMASK(7, 0) 1067 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK GENMASK(7, 0) 1068 1.1 jdolecek 1069 1.1 jdolecek /* feature_rss_flow_hash_input */ 1070 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT 1 1071 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK BIT(1) 1072 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT 2 1073 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK BIT(2) 1074 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_SHIFT 1 1075 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_MASK BIT(1) 1076 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_SHIFT 2 1077 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_MASK BIT(2) 1078 1.1 jdolecek 1079 1.1 jdolecek /* host_info */ 1080 1.1 jdolecek #define ENA_ADMIN_HOST_INFO_MAJOR_MASK GENMASK(7, 0) 1081 1.1 jdolecek #define ENA_ADMIN_HOST_INFO_MINOR_SHIFT 8 1082 1.1 jdolecek #define ENA_ADMIN_HOST_INFO_MINOR_MASK GENMASK(15, 8) 1083 1.1 jdolecek #define ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT 16 1084 1.1 jdolecek #define ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK GENMASK(23, 16) 1085 1.1 jdolecek 1086 1.1 jdolecek /* aenq_common_desc */ 1087 1.1 jdolecek #define ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK BIT(0) 1088 1.1 jdolecek 1089 1.1 jdolecek /* aenq_link_change_desc */ 1090 1.1 jdolecek #define ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK BIT(0) 1091 1.1 jdolecek 1092 1.1 jdolecek #if !defined(ENA_DEFS_LINUX_MAINLINE) 1093 1.1 jdolecek static inline uint16_t get_ena_admin_aq_common_desc_command_id(const struct ena_admin_aq_common_desc *p) 1094 1.1 jdolecek { 1095 1.1 jdolecek return p->command_id & ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK; 1096 1.1 jdolecek } 1097 1.1 jdolecek 1098 1.1 jdolecek static inline void set_ena_admin_aq_common_desc_command_id(struct ena_admin_aq_common_desc *p, uint16_t val) 1099 1.1 jdolecek { 1100 1.1 jdolecek p->command_id |= val & ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK; 1101 1.1 jdolecek } 1102 1.1 jdolecek 1103 1.1 jdolecek static inline uint8_t get_ena_admin_aq_common_desc_phase(const struct ena_admin_aq_common_desc *p) 1104 1.1 jdolecek { 1105 1.1 jdolecek return p->flags & ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK; 1106 1.1 jdolecek } 1107 1.1 jdolecek 1108 1.1 jdolecek static inline void set_ena_admin_aq_common_desc_phase(struct ena_admin_aq_common_desc *p, uint8_t val) 1109 1.1 jdolecek { 1110 1.1 jdolecek p->flags |= val & ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK; 1111 1.1 jdolecek } 1112 1.1 jdolecek 1113 1.1 jdolecek static inline uint8_t get_ena_admin_aq_common_desc_ctrl_data(const struct ena_admin_aq_common_desc *p) 1114 1.1 jdolecek { 1115 1.1 jdolecek return (p->flags & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK) >> ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT; 1116 1.1 jdolecek } 1117 1.1 jdolecek 1118 1.1 jdolecek static inline void set_ena_admin_aq_common_desc_ctrl_data(struct ena_admin_aq_common_desc *p, uint8_t val) 1119 1.1 jdolecek { 1120 1.1 jdolecek p->flags |= (val << ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT) & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK; 1121 1.1 jdolecek } 1122 1.1 jdolecek 1123 1.1 jdolecek static inline uint8_t get_ena_admin_aq_common_desc_ctrl_data_indirect(const struct ena_admin_aq_common_desc *p) 1124 1.1 jdolecek { 1125 1.1 jdolecek return (p->flags & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK) >> ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT; 1126 1.1 jdolecek } 1127 1.1 jdolecek 1128 1.1 jdolecek static inline void set_ena_admin_aq_common_desc_ctrl_data_indirect(struct ena_admin_aq_common_desc *p, uint8_t val) 1129 1.1 jdolecek { 1130 1.1 jdolecek p->flags |= (val << ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT) & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK; 1131 1.1 jdolecek } 1132 1.1 jdolecek 1133 1.1 jdolecek static inline uint8_t get_ena_admin_sq_sq_direction(const struct ena_admin_sq *p) 1134 1.1 jdolecek { 1135 1.1 jdolecek return (p->sq_identity & ENA_ADMIN_SQ_SQ_DIRECTION_MASK) >> ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT; 1136 1.1 jdolecek } 1137 1.1 jdolecek 1138 1.1 jdolecek static inline void set_ena_admin_sq_sq_direction(struct ena_admin_sq *p, uint8_t val) 1139 1.1 jdolecek { 1140 1.1 jdolecek p->sq_identity |= (val << ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT) & ENA_ADMIN_SQ_SQ_DIRECTION_MASK; 1141 1.1 jdolecek } 1142 1.1 jdolecek 1143 1.1 jdolecek static inline uint16_t get_ena_admin_acq_common_desc_command_id(const struct ena_admin_acq_common_desc *p) 1144 1.1 jdolecek { 1145 1.1 jdolecek return p->command & ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK; 1146 1.1 jdolecek } 1147 1.1 jdolecek 1148 1.1 jdolecek static inline void set_ena_admin_acq_common_desc_command_id(struct ena_admin_acq_common_desc *p, uint16_t val) 1149 1.1 jdolecek { 1150 1.1 jdolecek p->command |= val & ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK; 1151 1.1 jdolecek } 1152 1.1 jdolecek 1153 1.1 jdolecek static inline uint8_t get_ena_admin_acq_common_desc_phase(const struct ena_admin_acq_common_desc *p) 1154 1.1 jdolecek { 1155 1.1 jdolecek return p->flags & ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK; 1156 1.1 jdolecek } 1157 1.1 jdolecek 1158 1.1 jdolecek static inline void set_ena_admin_acq_common_desc_phase(struct ena_admin_acq_common_desc *p, uint8_t val) 1159 1.1 jdolecek { 1160 1.1 jdolecek p->flags |= val & ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK; 1161 1.1 jdolecek } 1162 1.1 jdolecek 1163 1.1 jdolecek static inline uint8_t get_ena_admin_aq_create_sq_cmd_sq_direction(const struct ena_admin_aq_create_sq_cmd *p) 1164 1.1 jdolecek { 1165 1.1 jdolecek return (p->sq_identity & ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK) >> ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT; 1166 1.1 jdolecek } 1167 1.1 jdolecek 1168 1.1 jdolecek static inline void set_ena_admin_aq_create_sq_cmd_sq_direction(struct ena_admin_aq_create_sq_cmd *p, uint8_t val) 1169 1.1 jdolecek { 1170 1.1 jdolecek p->sq_identity |= (val << ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT) & ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK; 1171 1.1 jdolecek } 1172 1.1 jdolecek 1173 1.1 jdolecek static inline uint8_t get_ena_admin_aq_create_sq_cmd_placement_policy(const struct ena_admin_aq_create_sq_cmd *p) 1174 1.1 jdolecek { 1175 1.1 jdolecek return p->sq_caps_2 & ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK; 1176 1.1 jdolecek } 1177 1.1 jdolecek 1178 1.1 jdolecek static inline void set_ena_admin_aq_create_sq_cmd_placement_policy(struct ena_admin_aq_create_sq_cmd *p, uint8_t val) 1179 1.1 jdolecek { 1180 1.1 jdolecek p->sq_caps_2 |= val & ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK; 1181 1.1 jdolecek } 1182 1.1 jdolecek 1183 1.1 jdolecek static inline uint8_t get_ena_admin_aq_create_sq_cmd_completion_policy(const struct ena_admin_aq_create_sq_cmd *p) 1184 1.1 jdolecek { 1185 1.1 jdolecek return (p->sq_caps_2 & ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK) >> ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT; 1186 1.1 jdolecek } 1187 1.1 jdolecek 1188 1.1 jdolecek static inline void set_ena_admin_aq_create_sq_cmd_completion_policy(struct ena_admin_aq_create_sq_cmd *p, uint8_t val) 1189 1.1 jdolecek { 1190 1.1 jdolecek p->sq_caps_2 |= (val << ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT) & ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK; 1191 1.1 jdolecek } 1192 1.1 jdolecek 1193 1.1 jdolecek static inline uint8_t get_ena_admin_aq_create_sq_cmd_is_physically_contiguous(const struct ena_admin_aq_create_sq_cmd *p) 1194 1.1 jdolecek { 1195 1.1 jdolecek return p->sq_caps_3 & ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK; 1196 1.1 jdolecek } 1197 1.1 jdolecek 1198 1.1 jdolecek static inline void set_ena_admin_aq_create_sq_cmd_is_physically_contiguous(struct ena_admin_aq_create_sq_cmd *p, uint8_t val) 1199 1.1 jdolecek { 1200 1.1 jdolecek p->sq_caps_3 |= val & ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK; 1201 1.1 jdolecek } 1202 1.1 jdolecek 1203 1.1 jdolecek static inline uint8_t get_ena_admin_aq_create_cq_cmd_interrupt_mode_enabled(const struct ena_admin_aq_create_cq_cmd *p) 1204 1.1 jdolecek { 1205 1.1 jdolecek return (p->cq_caps_1 & ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK) >> ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT; 1206 1.1 jdolecek } 1207 1.1 jdolecek 1208 1.1 jdolecek static inline void set_ena_admin_aq_create_cq_cmd_interrupt_mode_enabled(struct ena_admin_aq_create_cq_cmd *p, uint8_t val) 1209 1.1 jdolecek { 1210 1.1 jdolecek p->cq_caps_1 |= (val << ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT) & ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK; 1211 1.1 jdolecek } 1212 1.1 jdolecek 1213 1.1 jdolecek static inline uint8_t get_ena_admin_aq_create_cq_cmd_cq_entry_size_words(const struct ena_admin_aq_create_cq_cmd *p) 1214 1.1 jdolecek { 1215 1.1 jdolecek return p->cq_caps_2 & ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK; 1216 1.1 jdolecek } 1217 1.1 jdolecek 1218 1.1 jdolecek static inline void set_ena_admin_aq_create_cq_cmd_cq_entry_size_words(struct ena_admin_aq_create_cq_cmd *p, uint8_t val) 1219 1.1 jdolecek { 1220 1.1 jdolecek p->cq_caps_2 |= val & ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK; 1221 1.1 jdolecek } 1222 1.1 jdolecek 1223 1.1 jdolecek static inline uint8_t get_ena_admin_get_set_feature_common_desc_select(const struct ena_admin_get_set_feature_common_desc *p) 1224 1.1 jdolecek { 1225 1.1 jdolecek return p->flags & ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK; 1226 1.1 jdolecek } 1227 1.1 jdolecek 1228 1.1 jdolecek static inline void set_ena_admin_get_set_feature_common_desc_select(struct ena_admin_get_set_feature_common_desc *p, uint8_t val) 1229 1.1 jdolecek { 1230 1.1 jdolecek p->flags |= val & ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK; 1231 1.1 jdolecek } 1232 1.1 jdolecek 1233 1.1 jdolecek static inline uint32_t get_ena_admin_get_feature_link_desc_autoneg(const struct ena_admin_get_feature_link_desc *p) 1234 1.1 jdolecek { 1235 1.1 jdolecek return p->flags & ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK; 1236 1.1 jdolecek } 1237 1.1 jdolecek 1238 1.1 jdolecek static inline void set_ena_admin_get_feature_link_desc_autoneg(struct ena_admin_get_feature_link_desc *p, uint32_t val) 1239 1.1 jdolecek { 1240 1.1 jdolecek p->flags |= val & ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK; 1241 1.1 jdolecek } 1242 1.1 jdolecek 1243 1.1 jdolecek static inline uint32_t get_ena_admin_get_feature_link_desc_duplex(const struct ena_admin_get_feature_link_desc *p) 1244 1.1 jdolecek { 1245 1.1 jdolecek return (p->flags & ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK) >> ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT; 1246 1.1 jdolecek } 1247 1.1 jdolecek 1248 1.1 jdolecek static inline void set_ena_admin_get_feature_link_desc_duplex(struct ena_admin_get_feature_link_desc *p, uint32_t val) 1249 1.1 jdolecek { 1250 1.1 jdolecek p->flags |= (val << ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT) & ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK; 1251 1.1 jdolecek } 1252 1.1 jdolecek 1253 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_TX_L3_csum_ipv4(const struct ena_admin_feature_offload_desc *p) 1254 1.1 jdolecek { 1255 1.1 jdolecek return p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK; 1256 1.1 jdolecek } 1257 1.1 jdolecek 1258 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_TX_L3_csum_ipv4(struct ena_admin_feature_offload_desc *p, uint32_t val) 1259 1.1 jdolecek { 1260 1.1 jdolecek p->tx |= val & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK; 1261 1.1 jdolecek } 1262 1.1 jdolecek 1263 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_part(const struct ena_admin_feature_offload_desc *p) 1264 1.1 jdolecek { 1265 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT; 1266 1.1 jdolecek } 1267 1.1 jdolecek 1268 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_part(struct ena_admin_feature_offload_desc *p, uint32_t val) 1269 1.1 jdolecek { 1270 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK; 1271 1.1 jdolecek } 1272 1.1 jdolecek 1273 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_full(const struct ena_admin_feature_offload_desc *p) 1274 1.1 jdolecek { 1275 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT; 1276 1.1 jdolecek } 1277 1.1 jdolecek 1278 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_full(struct ena_admin_feature_offload_desc *p, uint32_t val) 1279 1.1 jdolecek { 1280 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK; 1281 1.1 jdolecek } 1282 1.1 jdolecek 1283 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_part(const struct ena_admin_feature_offload_desc *p) 1284 1.1 jdolecek { 1285 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT; 1286 1.1 jdolecek } 1287 1.1 jdolecek 1288 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_part(struct ena_admin_feature_offload_desc *p, uint32_t val) 1289 1.1 jdolecek { 1290 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK; 1291 1.1 jdolecek } 1292 1.1 jdolecek 1293 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_full(const struct ena_admin_feature_offload_desc *p) 1294 1.1 jdolecek { 1295 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT; 1296 1.1 jdolecek } 1297 1.1 jdolecek 1298 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_full(struct ena_admin_feature_offload_desc *p, uint32_t val) 1299 1.1 jdolecek { 1300 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK; 1301 1.1 jdolecek } 1302 1.1 jdolecek 1303 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_tso_ipv4(const struct ena_admin_feature_offload_desc *p) 1304 1.1 jdolecek { 1305 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT; 1306 1.1 jdolecek } 1307 1.1 jdolecek 1308 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_tso_ipv4(struct ena_admin_feature_offload_desc *p, uint32_t val) 1309 1.1 jdolecek { 1310 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK; 1311 1.1 jdolecek } 1312 1.1 jdolecek 1313 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_tso_ipv6(const struct ena_admin_feature_offload_desc *p) 1314 1.1 jdolecek { 1315 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT; 1316 1.1 jdolecek } 1317 1.1 jdolecek 1318 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_tso_ipv6(struct ena_admin_feature_offload_desc *p, uint32_t val) 1319 1.1 jdolecek { 1320 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK; 1321 1.1 jdolecek } 1322 1.1 jdolecek 1323 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_tso_ecn(const struct ena_admin_feature_offload_desc *p) 1324 1.1 jdolecek { 1325 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT; 1326 1.1 jdolecek } 1327 1.1 jdolecek 1328 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_tso_ecn(struct ena_admin_feature_offload_desc *p, uint32_t val) 1329 1.1 jdolecek { 1330 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK; 1331 1.1 jdolecek } 1332 1.1 jdolecek 1333 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_RX_L3_csum_ipv4(const struct ena_admin_feature_offload_desc *p) 1334 1.1 jdolecek { 1335 1.1 jdolecek return p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK; 1336 1.1 jdolecek } 1337 1.1 jdolecek 1338 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_RX_L3_csum_ipv4(struct ena_admin_feature_offload_desc *p, uint32_t val) 1339 1.1 jdolecek { 1340 1.1 jdolecek p->rx_supported |= val & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK; 1341 1.1 jdolecek } 1342 1.1 jdolecek 1343 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_RX_L4_ipv4_csum(const struct ena_admin_feature_offload_desc *p) 1344 1.1 jdolecek { 1345 1.1 jdolecek return (p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT; 1346 1.1 jdolecek } 1347 1.1 jdolecek 1348 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_RX_L4_ipv4_csum(struct ena_admin_feature_offload_desc *p, uint32_t val) 1349 1.1 jdolecek { 1350 1.1 jdolecek p->rx_supported |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK; 1351 1.1 jdolecek } 1352 1.1 jdolecek 1353 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_RX_L4_ipv6_csum(const struct ena_admin_feature_offload_desc *p) 1354 1.1 jdolecek { 1355 1.1 jdolecek return (p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT; 1356 1.1 jdolecek } 1357 1.1 jdolecek 1358 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_RX_L4_ipv6_csum(struct ena_admin_feature_offload_desc *p, uint32_t val) 1359 1.1 jdolecek { 1360 1.1 jdolecek p->rx_supported |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK; 1361 1.1 jdolecek } 1362 1.1 jdolecek 1363 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_RX_hash(const struct ena_admin_feature_offload_desc *p) 1364 1.1 jdolecek { 1365 1.1 jdolecek return (p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT; 1366 1.1 jdolecek } 1367 1.1 jdolecek 1368 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_RX_hash(struct ena_admin_feature_offload_desc *p, uint32_t val) 1369 1.1 jdolecek { 1370 1.1 jdolecek p->rx_supported |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK; 1371 1.1 jdolecek } 1372 1.1 jdolecek 1373 1.1 jdolecek static inline uint32_t get_ena_admin_feature_rss_flow_hash_function_funcs(const struct ena_admin_feature_rss_flow_hash_function *p) 1374 1.1 jdolecek { 1375 1.1 jdolecek return p->supported_func & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK; 1376 1.1 jdolecek } 1377 1.1 jdolecek 1378 1.1 jdolecek static inline void set_ena_admin_feature_rss_flow_hash_function_funcs(struct ena_admin_feature_rss_flow_hash_function *p, uint32_t val) 1379 1.1 jdolecek { 1380 1.1 jdolecek p->supported_func |= val & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK; 1381 1.1 jdolecek } 1382 1.1 jdolecek 1383 1.1 jdolecek static inline uint32_t get_ena_admin_feature_rss_flow_hash_function_selected_func(const struct ena_admin_feature_rss_flow_hash_function *p) 1384 1.1 jdolecek { 1385 1.1 jdolecek return p->selected_func & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK; 1386 1.1 jdolecek } 1387 1.1 jdolecek 1388 1.1 jdolecek static inline void set_ena_admin_feature_rss_flow_hash_function_selected_func(struct ena_admin_feature_rss_flow_hash_function *p, uint32_t val) 1389 1.1 jdolecek { 1390 1.1 jdolecek p->selected_func |= val & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK; 1391 1.1 jdolecek } 1392 1.1 jdolecek 1393 1.1 jdolecek static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_L3_sort(const struct ena_admin_feature_rss_flow_hash_input *p) 1394 1.1 jdolecek { 1395 1.1 jdolecek return (p->supported_input_sort & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK) >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT; 1396 1.1 jdolecek } 1397 1.1 jdolecek 1398 1.1 jdolecek static inline void set_ena_admin_feature_rss_flow_hash_input_L3_sort(struct ena_admin_feature_rss_flow_hash_input *p, uint16_t val) 1399 1.1 jdolecek { 1400 1.1 jdolecek p->supported_input_sort |= (val << ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT) & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK; 1401 1.1 jdolecek } 1402 1.1 jdolecek 1403 1.1 jdolecek static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_L4_sort(const struct ena_admin_feature_rss_flow_hash_input *p) 1404 1.1 jdolecek { 1405 1.1 jdolecek return (p->supported_input_sort & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK) >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT; 1406 1.1 jdolecek } 1407 1.1 jdolecek 1408 1.1 jdolecek static inline void set_ena_admin_feature_rss_flow_hash_input_L4_sort(struct ena_admin_feature_rss_flow_hash_input *p, uint16_t val) 1409 1.1 jdolecek { 1410 1.1 jdolecek p->supported_input_sort |= (val << ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT) & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK; 1411 1.1 jdolecek } 1412 1.1 jdolecek 1413 1.1 jdolecek static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_enable_L3_sort(const struct ena_admin_feature_rss_flow_hash_input *p) 1414 1.1 jdolecek { 1415 1.1 jdolecek return (p->enabled_input_sort & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_MASK) >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_SHIFT; 1416 1.1 jdolecek } 1417 1.1 jdolecek 1418 1.1 jdolecek static inline void set_ena_admin_feature_rss_flow_hash_input_enable_L3_sort(struct ena_admin_feature_rss_flow_hash_input *p, uint16_t val) 1419 1.1 jdolecek { 1420 1.1 jdolecek p->enabled_input_sort |= (val << ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_SHIFT) & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_MASK; 1421 1.1 jdolecek } 1422 1.1 jdolecek 1423 1.1 jdolecek static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_enable_L4_sort(const struct ena_admin_feature_rss_flow_hash_input *p) 1424 1.1 jdolecek { 1425 1.1 jdolecek return (p->enabled_input_sort & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_MASK) >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_SHIFT; 1426 1.1 jdolecek } 1427 1.1 jdolecek 1428 1.1 jdolecek static inline void set_ena_admin_feature_rss_flow_hash_input_enable_L4_sort(struct ena_admin_feature_rss_flow_hash_input *p, uint16_t val) 1429 1.1 jdolecek { 1430 1.1 jdolecek p->enabled_input_sort |= (val << ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_SHIFT) & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_MASK; 1431 1.1 jdolecek } 1432 1.1 jdolecek 1433 1.1 jdolecek static inline uint32_t get_ena_admin_host_info_major(const struct ena_admin_host_info *p) 1434 1.1 jdolecek { 1435 1.1 jdolecek return p->driver_version & ENA_ADMIN_HOST_INFO_MAJOR_MASK; 1436 1.1 jdolecek } 1437 1.1 jdolecek 1438 1.1 jdolecek static inline void set_ena_admin_host_info_major(struct ena_admin_host_info *p, uint32_t val) 1439 1.1 jdolecek { 1440 1.1 jdolecek p->driver_version |= val & ENA_ADMIN_HOST_INFO_MAJOR_MASK; 1441 1.1 jdolecek } 1442 1.1 jdolecek 1443 1.1 jdolecek static inline uint32_t get_ena_admin_host_info_minor(const struct ena_admin_host_info *p) 1444 1.1 jdolecek { 1445 1.1 jdolecek return (p->driver_version & ENA_ADMIN_HOST_INFO_MINOR_MASK) >> ENA_ADMIN_HOST_INFO_MINOR_SHIFT; 1446 1.1 jdolecek } 1447 1.1 jdolecek 1448 1.1 jdolecek static inline void set_ena_admin_host_info_minor(struct ena_admin_host_info *p, uint32_t val) 1449 1.1 jdolecek { 1450 1.1 jdolecek p->driver_version |= (val << ENA_ADMIN_HOST_INFO_MINOR_SHIFT) & ENA_ADMIN_HOST_INFO_MINOR_MASK; 1451 1.1 jdolecek } 1452 1.1 jdolecek 1453 1.1 jdolecek static inline uint32_t get_ena_admin_host_info_sub_minor(const struct ena_admin_host_info *p) 1454 1.1 jdolecek { 1455 1.1 jdolecek return (p->driver_version & ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK) >> ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT; 1456 1.1 jdolecek } 1457 1.1 jdolecek 1458 1.1 jdolecek static inline void set_ena_admin_host_info_sub_minor(struct ena_admin_host_info *p, uint32_t val) 1459 1.1 jdolecek { 1460 1.1 jdolecek p->driver_version |= (val << ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT) & ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK; 1461 1.1 jdolecek } 1462 1.1 jdolecek 1463 1.1 jdolecek static inline uint8_t get_ena_admin_aenq_common_desc_phase(const struct ena_admin_aenq_common_desc *p) 1464 1.1 jdolecek { 1465 1.1 jdolecek return p->flags & ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK; 1466 1.1 jdolecek } 1467 1.1 jdolecek 1468 1.1 jdolecek static inline void set_ena_admin_aenq_common_desc_phase(struct ena_admin_aenq_common_desc *p, uint8_t val) 1469 1.1 jdolecek { 1470 1.1 jdolecek p->flags |= val & ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK; 1471 1.1 jdolecek } 1472 1.1 jdolecek 1473 1.1 jdolecek static inline uint32_t get_ena_admin_aenq_link_change_desc_link_status(const struct ena_admin_aenq_link_change_desc *p) 1474 1.1 jdolecek { 1475 1.1 jdolecek return p->flags & ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK; 1476 1.1 jdolecek } 1477 1.1 jdolecek 1478 1.1 jdolecek static inline void set_ena_admin_aenq_link_change_desc_link_status(struct ena_admin_aenq_link_change_desc *p, uint32_t val) 1479 1.1 jdolecek { 1480 1.1 jdolecek p->flags |= val & ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK; 1481 1.1 jdolecek } 1482 1.1 jdolecek 1483 1.1 jdolecek #endif /* !defined(ENA_DEFS_LINUX_MAINLINE) */ 1484 1.1 jdolecek #endif /*_ENA_ADMIN_H_ */ 1485