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