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_ETH_IO_H_ 35 1.1 jdolecek #define _ENA_ETH_IO_H_ 36 1.1 jdolecek 37 1.1 jdolecek enum ena_eth_io_l3_proto_index { 38 1.1 jdolecek ENA_ETH_IO_L3_PROTO_UNKNOWN = 0, 39 1.1 jdolecek 40 1.1 jdolecek ENA_ETH_IO_L3_PROTO_IPV4 = 8, 41 1.1 jdolecek 42 1.1 jdolecek ENA_ETH_IO_L3_PROTO_IPV6 = 11, 43 1.1 jdolecek 44 1.1 jdolecek ENA_ETH_IO_L3_PROTO_FCOE = 21, 45 1.1 jdolecek 46 1.1 jdolecek ENA_ETH_IO_L3_PROTO_ROCE = 22, 47 1.1 jdolecek }; 48 1.1 jdolecek 49 1.1 jdolecek enum ena_eth_io_l4_proto_index { 50 1.1 jdolecek ENA_ETH_IO_L4_PROTO_UNKNOWN = 0, 51 1.1 jdolecek 52 1.1 jdolecek ENA_ETH_IO_L4_PROTO_TCP = 12, 53 1.1 jdolecek 54 1.1 jdolecek ENA_ETH_IO_L4_PROTO_UDP = 13, 55 1.1 jdolecek 56 1.1 jdolecek ENA_ETH_IO_L4_PROTO_ROUTEABLE_ROCE = 23, 57 1.1 jdolecek }; 58 1.1 jdolecek 59 1.1 jdolecek struct ena_eth_io_tx_desc { 60 1.1 jdolecek /* 15:0 : length - Buffer length in bytes, must 61 1.1 jdolecek * include any packet trailers that the ENA supposed 62 1.1 jdolecek * to update like End-to-End CRC, Authentication GMAC 63 1.1 jdolecek * etc. This length must not include the 64 1.1 jdolecek * 'Push_Buffer' length. This length must not include 65 1.1 jdolecek * the 4-byte added in the end for 802.3 Ethernet FCS 66 1.1 jdolecek * 21:16 : req_id_hi - Request ID[15:10] 67 1.1 jdolecek * 22 : reserved22 - MBZ 68 1.1 jdolecek * 23 : meta_desc - MBZ 69 1.1 jdolecek * 24 : phase 70 1.1 jdolecek * 25 : reserved1 - MBZ 71 1.1 jdolecek * 26 : first - Indicates first descriptor in 72 1.1 jdolecek * transaction 73 1.1 jdolecek * 27 : last - Indicates last descriptor in 74 1.1 jdolecek * transaction 75 1.1 jdolecek * 28 : comp_req - Indicates whether completion 76 1.1 jdolecek * should be posted, after packet is transmitted. 77 1.1 jdolecek * Valid only for first descriptor 78 1.1 jdolecek * 30:29 : reserved29 - MBZ 79 1.1 jdolecek * 31 : reserved31 - MBZ 80 1.1 jdolecek */ 81 1.1 jdolecek uint32_t len_ctrl; 82 1.1 jdolecek 83 1.1 jdolecek /* 3:0 : l3_proto_idx - L3 protocol. This field 84 1.1 jdolecek * required when l3_csum_en,l3_csum or tso_en are set. 85 1.1 jdolecek * 4 : DF - IPv4 DF, must be 0 if packet is IPv4 and 86 1.1 jdolecek * DF flags of the IPv4 header is 0. Otherwise must 87 1.1 jdolecek * be set to 1 88 1.1 jdolecek * 6:5 : reserved5 89 1.1 jdolecek * 7 : tso_en - Enable TSO, For TCP only. 90 1.1 jdolecek * 12:8 : l4_proto_idx - L4 protocol. This field need 91 1.1 jdolecek * to be set when l4_csum_en or tso_en are set. 92 1.1 jdolecek * 13 : l3_csum_en - enable IPv4 header checksum. 93 1.1 jdolecek * 14 : l4_csum_en - enable TCP/UDP checksum. 94 1.1 jdolecek * 15 : ethernet_fcs_dis - when set, the controller 95 1.1 jdolecek * will not append the 802.3 Ethernet Frame Check 96 1.1 jdolecek * Sequence to the packet 97 1.1 jdolecek * 16 : reserved16 98 1.1 jdolecek * 17 : l4_csum_partial - L4 partial checksum. when 99 1.1 jdolecek * set to 0, the ENA calculates the L4 checksum, 100 1.1 jdolecek * where the Destination Address required for the 101 1.1 jdolecek * TCP/UDP pseudo-header is taken from the actual 102 1.1 jdolecek * packet L3 header. when set to 1, the ENA doesn't 103 1.1 jdolecek * calculate the sum of the pseudo-header, instead, 104 1.1 jdolecek * the checksum field of the L4 is used instead. When 105 1.1 jdolecek * TSO enabled, the checksum of the pseudo-header 106 1.1 jdolecek * must not include the tcp length field. L4 partial 107 1.1 jdolecek * checksum should be used for IPv6 packet that 108 1.1 jdolecek * contains Routing Headers. 109 1.1 jdolecek * 20:18 : reserved18 - MBZ 110 1.1 jdolecek * 21 : reserved21 - MBZ 111 1.1 jdolecek * 31:22 : req_id_lo - Request ID[9:0] 112 1.1 jdolecek */ 113 1.1 jdolecek uint32_t meta_ctrl; 114 1.1 jdolecek 115 1.1 jdolecek uint32_t buff_addr_lo; 116 1.1 jdolecek 117 1.1 jdolecek /* address high and header size 118 1.1 jdolecek * 15:0 : addr_hi - Buffer Pointer[47:32] 119 1.1 jdolecek * 23:16 : reserved16_w2 120 1.1 jdolecek * 31:24 : header_length - Header length. For Low 121 1.1 jdolecek * Latency Queues, this fields indicates the number 122 1.1 jdolecek * of bytes written to the headers' memory. For 123 1.1 jdolecek * normal queues, if packet is TCP or UDP, and longer 124 1.1 jdolecek * than max_header_size, then this field should be 125 1.1 jdolecek * set to the sum of L4 header offset and L4 header 126 1.1 jdolecek * size(without options), otherwise, this field 127 1.1 jdolecek * should be set to 0. For both modes, this field 128 1.1 jdolecek * must not exceed the max_header_size. 129 1.1 jdolecek * max_header_size value is reported by the Max 130 1.1 jdolecek * Queues Feature descriptor 131 1.1 jdolecek */ 132 1.1 jdolecek uint32_t buff_addr_hi_hdr_sz; 133 1.1 jdolecek }; 134 1.1 jdolecek 135 1.1 jdolecek struct ena_eth_io_tx_meta_desc { 136 1.1 jdolecek /* 9:0 : req_id_lo - Request ID[9:0] 137 1.1 jdolecek * 11:10 : reserved10 - MBZ 138 1.1 jdolecek * 12 : reserved12 - MBZ 139 1.1 jdolecek * 13 : reserved13 - MBZ 140 1.1 jdolecek * 14 : ext_valid - if set, offset fields in Word2 141 1.1 jdolecek * are valid Also MSS High in Word 0 and bits [31:24] 142 1.1 jdolecek * in Word 3 143 1.1 jdolecek * 15 : reserved15 144 1.1 jdolecek * 19:16 : mss_hi 145 1.1 jdolecek * 20 : eth_meta_type - 0: Tx Metadata Descriptor, 1: 146 1.1 jdolecek * Extended Metadata Descriptor 147 1.1 jdolecek * 21 : meta_store - Store extended metadata in queue 148 1.1 jdolecek * cache 149 1.1 jdolecek * 22 : reserved22 - MBZ 150 1.1 jdolecek * 23 : meta_desc - MBO 151 1.1 jdolecek * 24 : phase 152 1.1 jdolecek * 25 : reserved25 - MBZ 153 1.1 jdolecek * 26 : first - Indicates first descriptor in 154 1.1 jdolecek * transaction 155 1.1 jdolecek * 27 : last - Indicates last descriptor in 156 1.1 jdolecek * transaction 157 1.1 jdolecek * 28 : comp_req - Indicates whether completion 158 1.1 jdolecek * should be posted, after packet is transmitted. 159 1.1 jdolecek * Valid only for first descriptor 160 1.1 jdolecek * 30:29 : reserved29 - MBZ 161 1.1 jdolecek * 31 : reserved31 - MBZ 162 1.1 jdolecek */ 163 1.1 jdolecek uint32_t len_ctrl; 164 1.1 jdolecek 165 1.1 jdolecek /* 5:0 : req_id_hi 166 1.1 jdolecek * 31:6 : reserved6 - MBZ 167 1.1 jdolecek */ 168 1.1 jdolecek uint32_t word1; 169 1.1 jdolecek 170 1.1 jdolecek /* 7:0 : l3_hdr_len 171 1.1 jdolecek * 15:8 : l3_hdr_off 172 1.1 jdolecek * 21:16 : l4_hdr_len_in_words - counts the L4 header 173 1.1 jdolecek * length in words. there is an explicit assumption 174 1.1 jdolecek * that L4 header appears right after L3 header and 175 1.1 jdolecek * L4 offset is based on l3_hdr_off+l3_hdr_len 176 1.1 jdolecek * 31:22 : mss_lo 177 1.1 jdolecek */ 178 1.1 jdolecek uint32_t word2; 179 1.1 jdolecek 180 1.1 jdolecek uint32_t reserved; 181 1.1 jdolecek }; 182 1.1 jdolecek 183 1.1 jdolecek struct ena_eth_io_tx_cdesc { 184 1.1 jdolecek /* Request ID[15:0] */ 185 1.1 jdolecek uint16_t req_id; 186 1.1 jdolecek 187 1.1 jdolecek uint8_t status; 188 1.1 jdolecek 189 1.1 jdolecek /* flags 190 1.1 jdolecek * 0 : phase 191 1.1 jdolecek * 7:1 : reserved1 192 1.1 jdolecek */ 193 1.1 jdolecek uint8_t flags; 194 1.1 jdolecek 195 1.1 jdolecek uint16_t sub_qid; 196 1.1 jdolecek 197 1.1 jdolecek uint16_t sq_head_idx; 198 1.1 jdolecek }; 199 1.1 jdolecek 200 1.1 jdolecek struct ena_eth_io_rx_desc { 201 1.1 jdolecek /* In bytes. 0 means 64KB */ 202 1.1 jdolecek uint16_t length; 203 1.1 jdolecek 204 1.1 jdolecek /* MBZ */ 205 1.1 jdolecek uint8_t reserved2; 206 1.1 jdolecek 207 1.1 jdolecek /* 0 : phase 208 1.1 jdolecek * 1 : reserved1 - MBZ 209 1.1 jdolecek * 2 : first - Indicates first descriptor in 210 1.1 jdolecek * transaction 211 1.1 jdolecek * 3 : last - Indicates last descriptor in transaction 212 1.1 jdolecek * 4 : comp_req 213 1.1 jdolecek * 5 : reserved5 - MBO 214 1.1 jdolecek * 7:6 : reserved6 - MBZ 215 1.1 jdolecek */ 216 1.1 jdolecek uint8_t ctrl; 217 1.1 jdolecek 218 1.1 jdolecek uint16_t req_id; 219 1.1 jdolecek 220 1.1 jdolecek /* MBZ */ 221 1.1 jdolecek uint16_t reserved6; 222 1.1 jdolecek 223 1.1 jdolecek uint32_t buff_addr_lo; 224 1.1 jdolecek 225 1.1 jdolecek uint16_t buff_addr_hi; 226 1.1 jdolecek 227 1.1 jdolecek /* MBZ */ 228 1.1 jdolecek uint16_t reserved16_w3; 229 1.1 jdolecek }; 230 1.1 jdolecek 231 1.1 jdolecek /* 4-word format Note: all ethernet parsing information are valid only when 232 1.1 jdolecek * last=1 233 1.1 jdolecek */ 234 1.1 jdolecek struct ena_eth_io_rx_cdesc_base { 235 1.1 jdolecek /* 4:0 : l3_proto_idx 236 1.1 jdolecek * 6:5 : src_vlan_cnt 237 1.1 jdolecek * 7 : reserved7 - MBZ 238 1.1 jdolecek * 12:8 : l4_proto_idx 239 1.1 jdolecek * 13 : l3_csum_err - when set, either the L3 240 1.1 jdolecek * checksum error detected, or, the controller didn't 241 1.1 jdolecek * validate the checksum. This bit is valid only when 242 1.1 jdolecek * l3_proto_idx indicates IPv4 packet 243 1.1 jdolecek * 14 : l4_csum_err - when set, either the L4 244 1.1 jdolecek * checksum error detected, or, the controller didn't 245 1.1 jdolecek * validate the checksum. This bit is valid only when 246 1.1 jdolecek * l4_proto_idx indicates TCP/UDP packet, and, 247 1.1 jdolecek * ipv4_frag is not set 248 1.1 jdolecek * 15 : ipv4_frag - Indicates IPv4 fragmented packet 249 1.1 jdolecek * 23:16 : reserved16 250 1.1 jdolecek * 24 : phase 251 1.1 jdolecek * 25 : l3_csum2 - second checksum engine result 252 1.1 jdolecek * 26 : first - Indicates first descriptor in 253 1.1 jdolecek * transaction 254 1.1 jdolecek * 27 : last - Indicates last descriptor in 255 1.1 jdolecek * transaction 256 1.1 jdolecek * 29:28 : reserved28 257 1.1 jdolecek * 30 : buffer - 0: Metadata descriptor. 1: Buffer 258 1.1 jdolecek * Descriptor was used 259 1.1 jdolecek * 31 : reserved31 260 1.1 jdolecek */ 261 1.1 jdolecek uint32_t status; 262 1.1 jdolecek 263 1.1 jdolecek uint16_t length; 264 1.1 jdolecek 265 1.1 jdolecek uint16_t req_id; 266 1.1 jdolecek 267 1.1 jdolecek /* 32-bit hash result */ 268 1.1 jdolecek uint32_t hash; 269 1.1 jdolecek 270 1.1 jdolecek uint16_t sub_qid; 271 1.1 jdolecek 272 1.1 jdolecek uint16_t reserved; 273 1.1 jdolecek }; 274 1.1 jdolecek 275 1.1 jdolecek /* 8-word format */ 276 1.1 jdolecek struct ena_eth_io_rx_cdesc_ext { 277 1.1 jdolecek struct ena_eth_io_rx_cdesc_base base; 278 1.1 jdolecek 279 1.1 jdolecek uint32_t buff_addr_lo; 280 1.1 jdolecek 281 1.1 jdolecek uint16_t buff_addr_hi; 282 1.1 jdolecek 283 1.1 jdolecek uint16_t reserved16; 284 1.1 jdolecek 285 1.1 jdolecek uint32_t reserved_w6; 286 1.1 jdolecek 287 1.1 jdolecek uint32_t reserved_w7; 288 1.1 jdolecek }; 289 1.1 jdolecek 290 1.1 jdolecek struct ena_eth_io_intr_reg { 291 1.1 jdolecek /* 14:0 : rx_intr_delay 292 1.1 jdolecek * 29:15 : tx_intr_delay 293 1.1 jdolecek * 30 : intr_unmask 294 1.1 jdolecek * 31 : reserved 295 1.1 jdolecek */ 296 1.1 jdolecek uint32_t intr_control; 297 1.1 jdolecek }; 298 1.1 jdolecek 299 1.1 jdolecek struct ena_eth_io_numa_node_cfg_reg { 300 1.1 jdolecek /* 7:0 : numa 301 1.1 jdolecek * 30:8 : reserved 302 1.1 jdolecek * 31 : enabled 303 1.1 jdolecek */ 304 1.1 jdolecek uint32_t numa_cfg; 305 1.1 jdolecek }; 306 1.1 jdolecek 307 1.1 jdolecek /* tx_desc */ 308 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_LENGTH_MASK GENMASK(15, 0) 309 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_REQ_ID_HI_SHIFT 16 310 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_REQ_ID_HI_MASK GENMASK(21, 16) 311 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_META_DESC_SHIFT 23 312 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_META_DESC_MASK BIT(23) 313 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_PHASE_SHIFT 24 314 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_PHASE_MASK BIT(24) 315 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_FIRST_SHIFT 26 316 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_FIRST_MASK BIT(26) 317 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_LAST_SHIFT 27 318 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_LAST_MASK BIT(27) 319 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_COMP_REQ_SHIFT 28 320 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_COMP_REQ_MASK BIT(28) 321 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_L3_PROTO_IDX_MASK GENMASK(3, 0) 322 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_DF_SHIFT 4 323 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_DF_MASK BIT(4) 324 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_TSO_EN_SHIFT 7 325 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_TSO_EN_MASK BIT(7) 326 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_L4_PROTO_IDX_SHIFT 8 327 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_L4_PROTO_IDX_MASK GENMASK(12, 8) 328 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_L3_CSUM_EN_SHIFT 13 329 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_L3_CSUM_EN_MASK BIT(13) 330 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_L4_CSUM_EN_SHIFT 14 331 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_L4_CSUM_EN_MASK BIT(14) 332 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_ETHERNET_FCS_DIS_SHIFT 15 333 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_ETHERNET_FCS_DIS_MASK BIT(15) 334 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_L4_CSUM_PARTIAL_SHIFT 17 335 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_L4_CSUM_PARTIAL_MASK BIT(17) 336 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_REQ_ID_LO_SHIFT 22 337 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_REQ_ID_LO_MASK GENMASK(31, 22) 338 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_ADDR_HI_MASK GENMASK(15, 0) 339 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_HEADER_LENGTH_SHIFT 24 340 1.1 jdolecek #define ENA_ETH_IO_TX_DESC_HEADER_LENGTH_MASK GENMASK(31, 24) 341 1.1 jdolecek 342 1.1 jdolecek /* tx_meta_desc */ 343 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_REQ_ID_LO_MASK GENMASK(9, 0) 344 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_EXT_VALID_SHIFT 14 345 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_EXT_VALID_MASK BIT(14) 346 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_MSS_HI_SHIFT 16 347 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_MSS_HI_MASK GENMASK(19, 16) 348 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_ETH_META_TYPE_SHIFT 20 349 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_ETH_META_TYPE_MASK BIT(20) 350 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_META_STORE_SHIFT 21 351 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_META_STORE_MASK BIT(21) 352 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_META_DESC_SHIFT 23 353 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_META_DESC_MASK BIT(23) 354 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_PHASE_SHIFT 24 355 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_PHASE_MASK BIT(24) 356 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_FIRST_SHIFT 26 357 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_FIRST_MASK BIT(26) 358 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_LAST_SHIFT 27 359 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_LAST_MASK BIT(27) 360 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_COMP_REQ_SHIFT 28 361 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_COMP_REQ_MASK BIT(28) 362 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_REQ_ID_HI_MASK GENMASK(5, 0) 363 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_L3_HDR_LEN_MASK GENMASK(7, 0) 364 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_L3_HDR_OFF_SHIFT 8 365 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_L3_HDR_OFF_MASK GENMASK(15, 8) 366 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_L4_HDR_LEN_IN_WORDS_SHIFT 16 367 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_L4_HDR_LEN_IN_WORDS_MASK GENMASK(21, 16) 368 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_MSS_LO_SHIFT 22 369 1.1 jdolecek #define ENA_ETH_IO_TX_META_DESC_MSS_LO_MASK GENMASK(31, 22) 370 1.1 jdolecek 371 1.1 jdolecek /* tx_cdesc */ 372 1.1 jdolecek #define ENA_ETH_IO_TX_CDESC_PHASE_MASK BIT(0) 373 1.1 jdolecek 374 1.1 jdolecek /* rx_desc */ 375 1.1 jdolecek #define ENA_ETH_IO_RX_DESC_PHASE_MASK BIT(0) 376 1.1 jdolecek #define ENA_ETH_IO_RX_DESC_FIRST_SHIFT 2 377 1.1 jdolecek #define ENA_ETH_IO_RX_DESC_FIRST_MASK BIT(2) 378 1.1 jdolecek #define ENA_ETH_IO_RX_DESC_LAST_SHIFT 3 379 1.1 jdolecek #define ENA_ETH_IO_RX_DESC_LAST_MASK BIT(3) 380 1.1 jdolecek #define ENA_ETH_IO_RX_DESC_COMP_REQ_SHIFT 4 381 1.1 jdolecek #define ENA_ETH_IO_RX_DESC_COMP_REQ_MASK BIT(4) 382 1.1 jdolecek 383 1.1 jdolecek /* rx_cdesc_base */ 384 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_L3_PROTO_IDX_MASK GENMASK(4, 0) 385 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_SRC_VLAN_CNT_SHIFT 5 386 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_SRC_VLAN_CNT_MASK GENMASK(6, 5) 387 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_L4_PROTO_IDX_SHIFT 8 388 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_L4_PROTO_IDX_MASK GENMASK(12, 8) 389 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_SHIFT 13 390 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_MASK BIT(13) 391 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_SHIFT 14 392 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_MASK BIT(14) 393 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_IPV4_FRAG_SHIFT 15 394 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_IPV4_FRAG_MASK BIT(15) 395 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_PHASE_SHIFT 24 396 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_PHASE_MASK BIT(24) 397 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM2_SHIFT 25 398 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM2_MASK BIT(25) 399 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_FIRST_SHIFT 26 400 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_FIRST_MASK BIT(26) 401 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_LAST_SHIFT 27 402 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_LAST_MASK BIT(27) 403 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_BUFFER_SHIFT 30 404 1.1 jdolecek #define ENA_ETH_IO_RX_CDESC_BASE_BUFFER_MASK BIT(30) 405 1.1 jdolecek 406 1.1 jdolecek /* intr_reg */ 407 1.1 jdolecek #define ENA_ETH_IO_INTR_REG_RX_INTR_DELAY_MASK GENMASK(14, 0) 408 1.1 jdolecek #define ENA_ETH_IO_INTR_REG_TX_INTR_DELAY_SHIFT 15 409 1.1 jdolecek #define ENA_ETH_IO_INTR_REG_TX_INTR_DELAY_MASK GENMASK(29, 15) 410 1.1 jdolecek #define ENA_ETH_IO_INTR_REG_INTR_UNMASK_SHIFT 30 411 1.1 jdolecek #define ENA_ETH_IO_INTR_REG_INTR_UNMASK_MASK BIT(30) 412 1.1 jdolecek 413 1.1 jdolecek /* numa_node_cfg_reg */ 414 1.1 jdolecek #define ENA_ETH_IO_NUMA_NODE_CFG_REG_NUMA_MASK GENMASK(7, 0) 415 1.1 jdolecek #define ENA_ETH_IO_NUMA_NODE_CFG_REG_ENABLED_SHIFT 31 416 1.1 jdolecek #define ENA_ETH_IO_NUMA_NODE_CFG_REG_ENABLED_MASK BIT(31) 417 1.1 jdolecek 418 1.1 jdolecek #if !defined(ENA_DEFS_LINUX_MAINLINE) 419 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_length(const struct ena_eth_io_tx_desc *p) 420 1.1 jdolecek { 421 1.1 jdolecek return p->len_ctrl & ENA_ETH_IO_TX_DESC_LENGTH_MASK; 422 1.1 jdolecek } 423 1.1 jdolecek 424 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_length(struct ena_eth_io_tx_desc *p, uint32_t val) 425 1.1 jdolecek { 426 1.1 jdolecek p->len_ctrl |= val & ENA_ETH_IO_TX_DESC_LENGTH_MASK; 427 1.1 jdolecek } 428 1.1 jdolecek 429 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_req_id_hi(const struct ena_eth_io_tx_desc *p) 430 1.1 jdolecek { 431 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_DESC_REQ_ID_HI_MASK) >> ENA_ETH_IO_TX_DESC_REQ_ID_HI_SHIFT; 432 1.1 jdolecek } 433 1.1 jdolecek 434 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_req_id_hi(struct ena_eth_io_tx_desc *p, uint32_t val) 435 1.1 jdolecek { 436 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_DESC_REQ_ID_HI_SHIFT) & ENA_ETH_IO_TX_DESC_REQ_ID_HI_MASK; 437 1.1 jdolecek } 438 1.1 jdolecek 439 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_meta_desc(const struct ena_eth_io_tx_desc *p) 440 1.1 jdolecek { 441 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_DESC_META_DESC_MASK) >> ENA_ETH_IO_TX_DESC_META_DESC_SHIFT; 442 1.1 jdolecek } 443 1.1 jdolecek 444 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_meta_desc(struct ena_eth_io_tx_desc *p, uint32_t val) 445 1.1 jdolecek { 446 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_DESC_META_DESC_SHIFT) & ENA_ETH_IO_TX_DESC_META_DESC_MASK; 447 1.1 jdolecek } 448 1.1 jdolecek 449 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_phase(const struct ena_eth_io_tx_desc *p) 450 1.1 jdolecek { 451 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_DESC_PHASE_MASK) >> ENA_ETH_IO_TX_DESC_PHASE_SHIFT; 452 1.1 jdolecek } 453 1.1 jdolecek 454 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_phase(struct ena_eth_io_tx_desc *p, uint32_t val) 455 1.1 jdolecek { 456 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_DESC_PHASE_SHIFT) & ENA_ETH_IO_TX_DESC_PHASE_MASK; 457 1.1 jdolecek } 458 1.1 jdolecek 459 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_first(const struct ena_eth_io_tx_desc *p) 460 1.1 jdolecek { 461 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_DESC_FIRST_MASK) >> ENA_ETH_IO_TX_DESC_FIRST_SHIFT; 462 1.1 jdolecek } 463 1.1 jdolecek 464 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_first(struct ena_eth_io_tx_desc *p, uint32_t val) 465 1.1 jdolecek { 466 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_DESC_FIRST_SHIFT) & ENA_ETH_IO_TX_DESC_FIRST_MASK; 467 1.1 jdolecek } 468 1.1 jdolecek 469 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_last(const struct ena_eth_io_tx_desc *p) 470 1.1 jdolecek { 471 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_DESC_LAST_MASK) >> ENA_ETH_IO_TX_DESC_LAST_SHIFT; 472 1.1 jdolecek } 473 1.1 jdolecek 474 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_last(struct ena_eth_io_tx_desc *p, uint32_t val) 475 1.1 jdolecek { 476 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_DESC_LAST_SHIFT) & ENA_ETH_IO_TX_DESC_LAST_MASK; 477 1.1 jdolecek } 478 1.1 jdolecek 479 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_comp_req(const struct ena_eth_io_tx_desc *p) 480 1.1 jdolecek { 481 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_DESC_COMP_REQ_MASK) >> ENA_ETH_IO_TX_DESC_COMP_REQ_SHIFT; 482 1.1 jdolecek } 483 1.1 jdolecek 484 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_comp_req(struct ena_eth_io_tx_desc *p, uint32_t val) 485 1.1 jdolecek { 486 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_DESC_COMP_REQ_SHIFT) & ENA_ETH_IO_TX_DESC_COMP_REQ_MASK; 487 1.1 jdolecek } 488 1.1 jdolecek 489 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_l3_proto_idx(const struct ena_eth_io_tx_desc *p) 490 1.1 jdolecek { 491 1.1 jdolecek return p->meta_ctrl & ENA_ETH_IO_TX_DESC_L3_PROTO_IDX_MASK; 492 1.1 jdolecek } 493 1.1 jdolecek 494 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_l3_proto_idx(struct ena_eth_io_tx_desc *p, uint32_t val) 495 1.1 jdolecek { 496 1.1 jdolecek p->meta_ctrl |= val & ENA_ETH_IO_TX_DESC_L3_PROTO_IDX_MASK; 497 1.1 jdolecek } 498 1.1 jdolecek 499 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_DF(const struct ena_eth_io_tx_desc *p) 500 1.1 jdolecek { 501 1.1 jdolecek return (p->meta_ctrl & ENA_ETH_IO_TX_DESC_DF_MASK) >> ENA_ETH_IO_TX_DESC_DF_SHIFT; 502 1.1 jdolecek } 503 1.1 jdolecek 504 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_DF(struct ena_eth_io_tx_desc *p, uint32_t val) 505 1.1 jdolecek { 506 1.1 jdolecek p->meta_ctrl |= (val << ENA_ETH_IO_TX_DESC_DF_SHIFT) & ENA_ETH_IO_TX_DESC_DF_MASK; 507 1.1 jdolecek } 508 1.1 jdolecek 509 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_tso_en(const struct ena_eth_io_tx_desc *p) 510 1.1 jdolecek { 511 1.1 jdolecek return (p->meta_ctrl & ENA_ETH_IO_TX_DESC_TSO_EN_MASK) >> ENA_ETH_IO_TX_DESC_TSO_EN_SHIFT; 512 1.1 jdolecek } 513 1.1 jdolecek 514 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_tso_en(struct ena_eth_io_tx_desc *p, uint32_t val) 515 1.1 jdolecek { 516 1.1 jdolecek p->meta_ctrl |= (val << ENA_ETH_IO_TX_DESC_TSO_EN_SHIFT) & ENA_ETH_IO_TX_DESC_TSO_EN_MASK; 517 1.1 jdolecek } 518 1.1 jdolecek 519 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_l4_proto_idx(const struct ena_eth_io_tx_desc *p) 520 1.1 jdolecek { 521 1.1 jdolecek return (p->meta_ctrl & ENA_ETH_IO_TX_DESC_L4_PROTO_IDX_MASK) >> ENA_ETH_IO_TX_DESC_L4_PROTO_IDX_SHIFT; 522 1.1 jdolecek } 523 1.1 jdolecek 524 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_l4_proto_idx(struct ena_eth_io_tx_desc *p, uint32_t val) 525 1.1 jdolecek { 526 1.1 jdolecek p->meta_ctrl |= (val << ENA_ETH_IO_TX_DESC_L4_PROTO_IDX_SHIFT) & ENA_ETH_IO_TX_DESC_L4_PROTO_IDX_MASK; 527 1.1 jdolecek } 528 1.1 jdolecek 529 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_l3_csum_en(const struct ena_eth_io_tx_desc *p) 530 1.1 jdolecek { 531 1.1 jdolecek return (p->meta_ctrl & ENA_ETH_IO_TX_DESC_L3_CSUM_EN_MASK) >> ENA_ETH_IO_TX_DESC_L3_CSUM_EN_SHIFT; 532 1.1 jdolecek } 533 1.1 jdolecek 534 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_l3_csum_en(struct ena_eth_io_tx_desc *p, uint32_t val) 535 1.1 jdolecek { 536 1.1 jdolecek p->meta_ctrl |= (val << ENA_ETH_IO_TX_DESC_L3_CSUM_EN_SHIFT) & ENA_ETH_IO_TX_DESC_L3_CSUM_EN_MASK; 537 1.1 jdolecek } 538 1.1 jdolecek 539 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_l4_csum_en(const struct ena_eth_io_tx_desc *p) 540 1.1 jdolecek { 541 1.1 jdolecek return (p->meta_ctrl & ENA_ETH_IO_TX_DESC_L4_CSUM_EN_MASK) >> ENA_ETH_IO_TX_DESC_L4_CSUM_EN_SHIFT; 542 1.1 jdolecek } 543 1.1 jdolecek 544 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_l4_csum_en(struct ena_eth_io_tx_desc *p, uint32_t val) 545 1.1 jdolecek { 546 1.1 jdolecek p->meta_ctrl |= (val << ENA_ETH_IO_TX_DESC_L4_CSUM_EN_SHIFT) & ENA_ETH_IO_TX_DESC_L4_CSUM_EN_MASK; 547 1.1 jdolecek } 548 1.1 jdolecek 549 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_ethernet_fcs_dis(const struct ena_eth_io_tx_desc *p) 550 1.1 jdolecek { 551 1.1 jdolecek return (p->meta_ctrl & ENA_ETH_IO_TX_DESC_ETHERNET_FCS_DIS_MASK) >> ENA_ETH_IO_TX_DESC_ETHERNET_FCS_DIS_SHIFT; 552 1.1 jdolecek } 553 1.1 jdolecek 554 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_ethernet_fcs_dis(struct ena_eth_io_tx_desc *p, uint32_t val) 555 1.1 jdolecek { 556 1.1 jdolecek p->meta_ctrl |= (val << ENA_ETH_IO_TX_DESC_ETHERNET_FCS_DIS_SHIFT) & ENA_ETH_IO_TX_DESC_ETHERNET_FCS_DIS_MASK; 557 1.1 jdolecek } 558 1.1 jdolecek 559 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_l4_csum_partial(const struct ena_eth_io_tx_desc *p) 560 1.1 jdolecek { 561 1.1 jdolecek return (p->meta_ctrl & ENA_ETH_IO_TX_DESC_L4_CSUM_PARTIAL_MASK) >> ENA_ETH_IO_TX_DESC_L4_CSUM_PARTIAL_SHIFT; 562 1.1 jdolecek } 563 1.1 jdolecek 564 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_l4_csum_partial(struct ena_eth_io_tx_desc *p, uint32_t val) 565 1.1 jdolecek { 566 1.1 jdolecek p->meta_ctrl |= (val << ENA_ETH_IO_TX_DESC_L4_CSUM_PARTIAL_SHIFT) & ENA_ETH_IO_TX_DESC_L4_CSUM_PARTIAL_MASK; 567 1.1 jdolecek } 568 1.1 jdolecek 569 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_req_id_lo(const struct ena_eth_io_tx_desc *p) 570 1.1 jdolecek { 571 1.1 jdolecek return (p->meta_ctrl & ENA_ETH_IO_TX_DESC_REQ_ID_LO_MASK) >> ENA_ETH_IO_TX_DESC_REQ_ID_LO_SHIFT; 572 1.1 jdolecek } 573 1.1 jdolecek 574 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_req_id_lo(struct ena_eth_io_tx_desc *p, uint32_t val) 575 1.1 jdolecek { 576 1.1 jdolecek p->meta_ctrl |= (val << ENA_ETH_IO_TX_DESC_REQ_ID_LO_SHIFT) & ENA_ETH_IO_TX_DESC_REQ_ID_LO_MASK; 577 1.1 jdolecek } 578 1.1 jdolecek 579 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_addr_hi(const struct ena_eth_io_tx_desc *p) 580 1.1 jdolecek { 581 1.1 jdolecek return p->buff_addr_hi_hdr_sz & ENA_ETH_IO_TX_DESC_ADDR_HI_MASK; 582 1.1 jdolecek } 583 1.1 jdolecek 584 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_addr_hi(struct ena_eth_io_tx_desc *p, uint32_t val) 585 1.1 jdolecek { 586 1.1 jdolecek p->buff_addr_hi_hdr_sz |= val & ENA_ETH_IO_TX_DESC_ADDR_HI_MASK; 587 1.1 jdolecek } 588 1.1 jdolecek 589 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_desc_header_length(const struct ena_eth_io_tx_desc *p) 590 1.1 jdolecek { 591 1.1 jdolecek return (p->buff_addr_hi_hdr_sz & ENA_ETH_IO_TX_DESC_HEADER_LENGTH_MASK) >> ENA_ETH_IO_TX_DESC_HEADER_LENGTH_SHIFT; 592 1.1 jdolecek } 593 1.1 jdolecek 594 1.1 jdolecek static inline void set_ena_eth_io_tx_desc_header_length(struct ena_eth_io_tx_desc *p, uint32_t val) 595 1.1 jdolecek { 596 1.1 jdolecek p->buff_addr_hi_hdr_sz |= (val << ENA_ETH_IO_TX_DESC_HEADER_LENGTH_SHIFT) & ENA_ETH_IO_TX_DESC_HEADER_LENGTH_MASK; 597 1.1 jdolecek } 598 1.1 jdolecek 599 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_req_id_lo(const struct ena_eth_io_tx_meta_desc *p) 600 1.1 jdolecek { 601 1.1 jdolecek return p->len_ctrl & ENA_ETH_IO_TX_META_DESC_REQ_ID_LO_MASK; 602 1.1 jdolecek } 603 1.1 jdolecek 604 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_req_id_lo(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 605 1.1 jdolecek { 606 1.1 jdolecek p->len_ctrl |= val & ENA_ETH_IO_TX_META_DESC_REQ_ID_LO_MASK; 607 1.1 jdolecek } 608 1.1 jdolecek 609 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_ext_valid(const struct ena_eth_io_tx_meta_desc *p) 610 1.1 jdolecek { 611 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_META_DESC_EXT_VALID_MASK) >> ENA_ETH_IO_TX_META_DESC_EXT_VALID_SHIFT; 612 1.1 jdolecek } 613 1.1 jdolecek 614 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_ext_valid(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 615 1.1 jdolecek { 616 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_META_DESC_EXT_VALID_SHIFT) & ENA_ETH_IO_TX_META_DESC_EXT_VALID_MASK; 617 1.1 jdolecek } 618 1.1 jdolecek 619 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_mss_hi(const struct ena_eth_io_tx_meta_desc *p) 620 1.1 jdolecek { 621 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_META_DESC_MSS_HI_MASK) >> ENA_ETH_IO_TX_META_DESC_MSS_HI_SHIFT; 622 1.1 jdolecek } 623 1.1 jdolecek 624 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_mss_hi(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 625 1.1 jdolecek { 626 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_META_DESC_MSS_HI_SHIFT) & ENA_ETH_IO_TX_META_DESC_MSS_HI_MASK; 627 1.1 jdolecek } 628 1.1 jdolecek 629 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_eth_meta_type(const struct ena_eth_io_tx_meta_desc *p) 630 1.1 jdolecek { 631 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_META_DESC_ETH_META_TYPE_MASK) >> ENA_ETH_IO_TX_META_DESC_ETH_META_TYPE_SHIFT; 632 1.1 jdolecek } 633 1.1 jdolecek 634 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_eth_meta_type(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 635 1.1 jdolecek { 636 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_META_DESC_ETH_META_TYPE_SHIFT) & ENA_ETH_IO_TX_META_DESC_ETH_META_TYPE_MASK; 637 1.1 jdolecek } 638 1.1 jdolecek 639 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_meta_store(const struct ena_eth_io_tx_meta_desc *p) 640 1.1 jdolecek { 641 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_META_DESC_META_STORE_MASK) >> ENA_ETH_IO_TX_META_DESC_META_STORE_SHIFT; 642 1.1 jdolecek } 643 1.1 jdolecek 644 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_meta_store(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 645 1.1 jdolecek { 646 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_META_DESC_META_STORE_SHIFT) & ENA_ETH_IO_TX_META_DESC_META_STORE_MASK; 647 1.1 jdolecek } 648 1.1 jdolecek 649 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_meta_desc(const struct ena_eth_io_tx_meta_desc *p) 650 1.1 jdolecek { 651 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_META_DESC_META_DESC_MASK) >> ENA_ETH_IO_TX_META_DESC_META_DESC_SHIFT; 652 1.1 jdolecek } 653 1.1 jdolecek 654 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_meta_desc(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 655 1.1 jdolecek { 656 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_META_DESC_META_DESC_SHIFT) & ENA_ETH_IO_TX_META_DESC_META_DESC_MASK; 657 1.1 jdolecek } 658 1.1 jdolecek 659 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_phase(const struct ena_eth_io_tx_meta_desc *p) 660 1.1 jdolecek { 661 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_META_DESC_PHASE_MASK) >> ENA_ETH_IO_TX_META_DESC_PHASE_SHIFT; 662 1.1 jdolecek } 663 1.1 jdolecek 664 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_phase(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 665 1.1 jdolecek { 666 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_META_DESC_PHASE_SHIFT) & ENA_ETH_IO_TX_META_DESC_PHASE_MASK; 667 1.1 jdolecek } 668 1.1 jdolecek 669 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_first(const struct ena_eth_io_tx_meta_desc *p) 670 1.1 jdolecek { 671 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_META_DESC_FIRST_MASK) >> ENA_ETH_IO_TX_META_DESC_FIRST_SHIFT; 672 1.1 jdolecek } 673 1.1 jdolecek 674 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_first(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 675 1.1 jdolecek { 676 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_META_DESC_FIRST_SHIFT) & ENA_ETH_IO_TX_META_DESC_FIRST_MASK; 677 1.1 jdolecek } 678 1.1 jdolecek 679 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_last(const struct ena_eth_io_tx_meta_desc *p) 680 1.1 jdolecek { 681 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_META_DESC_LAST_MASK) >> ENA_ETH_IO_TX_META_DESC_LAST_SHIFT; 682 1.1 jdolecek } 683 1.1 jdolecek 684 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_last(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 685 1.1 jdolecek { 686 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_META_DESC_LAST_SHIFT) & ENA_ETH_IO_TX_META_DESC_LAST_MASK; 687 1.1 jdolecek } 688 1.1 jdolecek 689 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_comp_req(const struct ena_eth_io_tx_meta_desc *p) 690 1.1 jdolecek { 691 1.1 jdolecek return (p->len_ctrl & ENA_ETH_IO_TX_META_DESC_COMP_REQ_MASK) >> ENA_ETH_IO_TX_META_DESC_COMP_REQ_SHIFT; 692 1.1 jdolecek } 693 1.1 jdolecek 694 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_comp_req(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 695 1.1 jdolecek { 696 1.1 jdolecek p->len_ctrl |= (val << ENA_ETH_IO_TX_META_DESC_COMP_REQ_SHIFT) & ENA_ETH_IO_TX_META_DESC_COMP_REQ_MASK; 697 1.1 jdolecek } 698 1.1 jdolecek 699 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_req_id_hi(const struct ena_eth_io_tx_meta_desc *p) 700 1.1 jdolecek { 701 1.1 jdolecek return p->word1 & ENA_ETH_IO_TX_META_DESC_REQ_ID_HI_MASK; 702 1.1 jdolecek } 703 1.1 jdolecek 704 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_req_id_hi(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 705 1.1 jdolecek { 706 1.1 jdolecek p->word1 |= val & ENA_ETH_IO_TX_META_DESC_REQ_ID_HI_MASK; 707 1.1 jdolecek } 708 1.1 jdolecek 709 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_l3_hdr_len(const struct ena_eth_io_tx_meta_desc *p) 710 1.1 jdolecek { 711 1.1 jdolecek return p->word2 & ENA_ETH_IO_TX_META_DESC_L3_HDR_LEN_MASK; 712 1.1 jdolecek } 713 1.1 jdolecek 714 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_l3_hdr_len(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 715 1.1 jdolecek { 716 1.1 jdolecek p->word2 |= val & ENA_ETH_IO_TX_META_DESC_L3_HDR_LEN_MASK; 717 1.1 jdolecek } 718 1.1 jdolecek 719 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_l3_hdr_off(const struct ena_eth_io_tx_meta_desc *p) 720 1.1 jdolecek { 721 1.1 jdolecek return (p->word2 & ENA_ETH_IO_TX_META_DESC_L3_HDR_OFF_MASK) >> ENA_ETH_IO_TX_META_DESC_L3_HDR_OFF_SHIFT; 722 1.1 jdolecek } 723 1.1 jdolecek 724 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_l3_hdr_off(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 725 1.1 jdolecek { 726 1.1 jdolecek p->word2 |= (val << ENA_ETH_IO_TX_META_DESC_L3_HDR_OFF_SHIFT) & ENA_ETH_IO_TX_META_DESC_L3_HDR_OFF_MASK; 727 1.1 jdolecek } 728 1.1 jdolecek 729 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_l4_hdr_len_in_words(const struct ena_eth_io_tx_meta_desc *p) 730 1.1 jdolecek { 731 1.1 jdolecek return (p->word2 & ENA_ETH_IO_TX_META_DESC_L4_HDR_LEN_IN_WORDS_MASK) >> ENA_ETH_IO_TX_META_DESC_L4_HDR_LEN_IN_WORDS_SHIFT; 732 1.1 jdolecek } 733 1.1 jdolecek 734 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_l4_hdr_len_in_words(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 735 1.1 jdolecek { 736 1.1 jdolecek p->word2 |= (val << ENA_ETH_IO_TX_META_DESC_L4_HDR_LEN_IN_WORDS_SHIFT) & ENA_ETH_IO_TX_META_DESC_L4_HDR_LEN_IN_WORDS_MASK; 737 1.1 jdolecek } 738 1.1 jdolecek 739 1.1 jdolecek static inline uint32_t get_ena_eth_io_tx_meta_desc_mss_lo(const struct ena_eth_io_tx_meta_desc *p) 740 1.1 jdolecek { 741 1.1 jdolecek return (p->word2 & ENA_ETH_IO_TX_META_DESC_MSS_LO_MASK) >> ENA_ETH_IO_TX_META_DESC_MSS_LO_SHIFT; 742 1.1 jdolecek } 743 1.1 jdolecek 744 1.1 jdolecek static inline void set_ena_eth_io_tx_meta_desc_mss_lo(struct ena_eth_io_tx_meta_desc *p, uint32_t val) 745 1.1 jdolecek { 746 1.1 jdolecek p->word2 |= (val << ENA_ETH_IO_TX_META_DESC_MSS_LO_SHIFT) & ENA_ETH_IO_TX_META_DESC_MSS_LO_MASK; 747 1.1 jdolecek } 748 1.1 jdolecek 749 1.1 jdolecek static inline uint8_t get_ena_eth_io_tx_cdesc_phase(const struct ena_eth_io_tx_cdesc *p) 750 1.1 jdolecek { 751 1.1 jdolecek return p->flags & ENA_ETH_IO_TX_CDESC_PHASE_MASK; 752 1.1 jdolecek } 753 1.1 jdolecek 754 1.1 jdolecek static inline void set_ena_eth_io_tx_cdesc_phase(struct ena_eth_io_tx_cdesc *p, uint8_t val) 755 1.1 jdolecek { 756 1.1 jdolecek p->flags |= val & ENA_ETH_IO_TX_CDESC_PHASE_MASK; 757 1.1 jdolecek } 758 1.1 jdolecek 759 1.1 jdolecek static inline uint8_t get_ena_eth_io_rx_desc_phase(const struct ena_eth_io_rx_desc *p) 760 1.1 jdolecek { 761 1.1 jdolecek return p->ctrl & ENA_ETH_IO_RX_DESC_PHASE_MASK; 762 1.1 jdolecek } 763 1.1 jdolecek 764 1.1 jdolecek static inline void set_ena_eth_io_rx_desc_phase(struct ena_eth_io_rx_desc *p, uint8_t val) 765 1.1 jdolecek { 766 1.1 jdolecek p->ctrl |= val & ENA_ETH_IO_RX_DESC_PHASE_MASK; 767 1.1 jdolecek } 768 1.1 jdolecek 769 1.1 jdolecek static inline uint8_t get_ena_eth_io_rx_desc_first(const struct ena_eth_io_rx_desc *p) 770 1.1 jdolecek { 771 1.1 jdolecek return (p->ctrl & ENA_ETH_IO_RX_DESC_FIRST_MASK) >> ENA_ETH_IO_RX_DESC_FIRST_SHIFT; 772 1.1 jdolecek } 773 1.1 jdolecek 774 1.1 jdolecek static inline void set_ena_eth_io_rx_desc_first(struct ena_eth_io_rx_desc *p, uint8_t val) 775 1.1 jdolecek { 776 1.1 jdolecek p->ctrl |= (val << ENA_ETH_IO_RX_DESC_FIRST_SHIFT) & ENA_ETH_IO_RX_DESC_FIRST_MASK; 777 1.1 jdolecek } 778 1.1 jdolecek 779 1.1 jdolecek static inline uint8_t get_ena_eth_io_rx_desc_last(const struct ena_eth_io_rx_desc *p) 780 1.1 jdolecek { 781 1.1 jdolecek return (p->ctrl & ENA_ETH_IO_RX_DESC_LAST_MASK) >> ENA_ETH_IO_RX_DESC_LAST_SHIFT; 782 1.1 jdolecek } 783 1.1 jdolecek 784 1.1 jdolecek static inline void set_ena_eth_io_rx_desc_last(struct ena_eth_io_rx_desc *p, uint8_t val) 785 1.1 jdolecek { 786 1.1 jdolecek p->ctrl |= (val << ENA_ETH_IO_RX_DESC_LAST_SHIFT) & ENA_ETH_IO_RX_DESC_LAST_MASK; 787 1.1 jdolecek } 788 1.1 jdolecek 789 1.1 jdolecek static inline uint8_t get_ena_eth_io_rx_desc_comp_req(const struct ena_eth_io_rx_desc *p) 790 1.1 jdolecek { 791 1.1 jdolecek return (p->ctrl & ENA_ETH_IO_RX_DESC_COMP_REQ_MASK) >> ENA_ETH_IO_RX_DESC_COMP_REQ_SHIFT; 792 1.1 jdolecek } 793 1.1 jdolecek 794 1.1 jdolecek static inline void set_ena_eth_io_rx_desc_comp_req(struct ena_eth_io_rx_desc *p, uint8_t val) 795 1.1 jdolecek { 796 1.1 jdolecek p->ctrl |= (val << ENA_ETH_IO_RX_DESC_COMP_REQ_SHIFT) & ENA_ETH_IO_RX_DESC_COMP_REQ_MASK; 797 1.1 jdolecek } 798 1.1 jdolecek 799 1.1 jdolecek static inline uint32_t get_ena_eth_io_rx_cdesc_base_l3_proto_idx(const struct ena_eth_io_rx_cdesc_base *p) 800 1.1 jdolecek { 801 1.1 jdolecek return p->status & ENA_ETH_IO_RX_CDESC_BASE_L3_PROTO_IDX_MASK; 802 1.1 jdolecek } 803 1.1 jdolecek 804 1.1 jdolecek static inline void set_ena_eth_io_rx_cdesc_base_l3_proto_idx(struct ena_eth_io_rx_cdesc_base *p, uint32_t val) 805 1.1 jdolecek { 806 1.1 jdolecek p->status |= val & ENA_ETH_IO_RX_CDESC_BASE_L3_PROTO_IDX_MASK; 807 1.1 jdolecek } 808 1.1 jdolecek 809 1.1 jdolecek static inline uint32_t get_ena_eth_io_rx_cdesc_base_src_vlan_cnt(const struct ena_eth_io_rx_cdesc_base *p) 810 1.1 jdolecek { 811 1.1 jdolecek return (p->status & ENA_ETH_IO_RX_CDESC_BASE_SRC_VLAN_CNT_MASK) >> ENA_ETH_IO_RX_CDESC_BASE_SRC_VLAN_CNT_SHIFT; 812 1.1 jdolecek } 813 1.1 jdolecek 814 1.1 jdolecek static inline void set_ena_eth_io_rx_cdesc_base_src_vlan_cnt(struct ena_eth_io_rx_cdesc_base *p, uint32_t val) 815 1.1 jdolecek { 816 1.1 jdolecek p->status |= (val << ENA_ETH_IO_RX_CDESC_BASE_SRC_VLAN_CNT_SHIFT) & ENA_ETH_IO_RX_CDESC_BASE_SRC_VLAN_CNT_MASK; 817 1.1 jdolecek } 818 1.1 jdolecek 819 1.1 jdolecek static inline uint32_t get_ena_eth_io_rx_cdesc_base_l4_proto_idx(const struct ena_eth_io_rx_cdesc_base *p) 820 1.1 jdolecek { 821 1.1 jdolecek return (p->status & ENA_ETH_IO_RX_CDESC_BASE_L4_PROTO_IDX_MASK) >> ENA_ETH_IO_RX_CDESC_BASE_L4_PROTO_IDX_SHIFT; 822 1.1 jdolecek } 823 1.1 jdolecek 824 1.1 jdolecek static inline void set_ena_eth_io_rx_cdesc_base_l4_proto_idx(struct ena_eth_io_rx_cdesc_base *p, uint32_t val) 825 1.1 jdolecek { 826 1.1 jdolecek p->status |= (val << ENA_ETH_IO_RX_CDESC_BASE_L4_PROTO_IDX_SHIFT) & ENA_ETH_IO_RX_CDESC_BASE_L4_PROTO_IDX_MASK; 827 1.1 jdolecek } 828 1.1 jdolecek 829 1.1 jdolecek static inline uint32_t get_ena_eth_io_rx_cdesc_base_l3_csum_err(const struct ena_eth_io_rx_cdesc_base *p) 830 1.1 jdolecek { 831 1.1 jdolecek return (p->status & ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_MASK) >> ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_SHIFT; 832 1.1 jdolecek } 833 1.1 jdolecek 834 1.1 jdolecek static inline void set_ena_eth_io_rx_cdesc_base_l3_csum_err(struct ena_eth_io_rx_cdesc_base *p, uint32_t val) 835 1.1 jdolecek { 836 1.1 jdolecek p->status |= (val << ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_SHIFT) & ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_MASK; 837 1.1 jdolecek } 838 1.1 jdolecek 839 1.1 jdolecek static inline uint32_t get_ena_eth_io_rx_cdesc_base_l4_csum_err(const struct ena_eth_io_rx_cdesc_base *p) 840 1.1 jdolecek { 841 1.1 jdolecek return (p->status & ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_MASK) >> ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_SHIFT; 842 1.1 jdolecek } 843 1.1 jdolecek 844 1.1 jdolecek static inline void set_ena_eth_io_rx_cdesc_base_l4_csum_err(struct ena_eth_io_rx_cdesc_base *p, uint32_t val) 845 1.1 jdolecek { 846 1.1 jdolecek p->status |= (val << ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_SHIFT) & ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_MASK; 847 1.1 jdolecek } 848 1.1 jdolecek 849 1.1 jdolecek static inline uint32_t get_ena_eth_io_rx_cdesc_base_ipv4_frag(const struct ena_eth_io_rx_cdesc_base *p) 850 1.1 jdolecek { 851 1.1 jdolecek return (p->status & ENA_ETH_IO_RX_CDESC_BASE_IPV4_FRAG_MASK) >> ENA_ETH_IO_RX_CDESC_BASE_IPV4_FRAG_SHIFT; 852 1.1 jdolecek } 853 1.1 jdolecek 854 1.1 jdolecek static inline void set_ena_eth_io_rx_cdesc_base_ipv4_frag(struct ena_eth_io_rx_cdesc_base *p, uint32_t val) 855 1.1 jdolecek { 856 1.1 jdolecek p->status |= (val << ENA_ETH_IO_RX_CDESC_BASE_IPV4_FRAG_SHIFT) & ENA_ETH_IO_RX_CDESC_BASE_IPV4_FRAG_MASK; 857 1.1 jdolecek } 858 1.1 jdolecek 859 1.1 jdolecek static inline uint32_t get_ena_eth_io_rx_cdesc_base_phase(const struct ena_eth_io_rx_cdesc_base *p) 860 1.1 jdolecek { 861 1.1 jdolecek return (p->status & ENA_ETH_IO_RX_CDESC_BASE_PHASE_MASK) >> ENA_ETH_IO_RX_CDESC_BASE_PHASE_SHIFT; 862 1.1 jdolecek } 863 1.1 jdolecek 864 1.1 jdolecek static inline void set_ena_eth_io_rx_cdesc_base_phase(struct ena_eth_io_rx_cdesc_base *p, uint32_t val) 865 1.1 jdolecek { 866 1.1 jdolecek p->status |= (val << ENA_ETH_IO_RX_CDESC_BASE_PHASE_SHIFT) & ENA_ETH_IO_RX_CDESC_BASE_PHASE_MASK; 867 1.1 jdolecek } 868 1.1 jdolecek 869 1.1 jdolecek static inline uint32_t get_ena_eth_io_rx_cdesc_base_l3_csum2(const struct ena_eth_io_rx_cdesc_base *p) 870 1.1 jdolecek { 871 1.1 jdolecek return (p->status & ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM2_MASK) >> ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM2_SHIFT; 872 1.1 jdolecek } 873 1.1 jdolecek 874 1.1 jdolecek static inline void set_ena_eth_io_rx_cdesc_base_l3_csum2(struct ena_eth_io_rx_cdesc_base *p, uint32_t val) 875 1.1 jdolecek { 876 1.1 jdolecek p->status |= (val << ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM2_SHIFT) & ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM2_MASK; 877 1.1 jdolecek } 878 1.1 jdolecek 879 1.1 jdolecek static inline uint32_t get_ena_eth_io_rx_cdesc_base_first(const struct ena_eth_io_rx_cdesc_base *p) 880 1.1 jdolecek { 881 1.1 jdolecek return (p->status & ENA_ETH_IO_RX_CDESC_BASE_FIRST_MASK) >> ENA_ETH_IO_RX_CDESC_BASE_FIRST_SHIFT; 882 1.1 jdolecek } 883 1.1 jdolecek 884 1.1 jdolecek static inline void set_ena_eth_io_rx_cdesc_base_first(struct ena_eth_io_rx_cdesc_base *p, uint32_t val) 885 1.1 jdolecek { 886 1.1 jdolecek p->status |= (val << ENA_ETH_IO_RX_CDESC_BASE_FIRST_SHIFT) & ENA_ETH_IO_RX_CDESC_BASE_FIRST_MASK; 887 1.1 jdolecek } 888 1.1 jdolecek 889 1.1 jdolecek static inline uint32_t get_ena_eth_io_rx_cdesc_base_last(const struct ena_eth_io_rx_cdesc_base *p) 890 1.1 jdolecek { 891 1.1 jdolecek return (p->status & ENA_ETH_IO_RX_CDESC_BASE_LAST_MASK) >> ENA_ETH_IO_RX_CDESC_BASE_LAST_SHIFT; 892 1.1 jdolecek } 893 1.1 jdolecek 894 1.1 jdolecek static inline void set_ena_eth_io_rx_cdesc_base_last(struct ena_eth_io_rx_cdesc_base *p, uint32_t val) 895 1.1 jdolecek { 896 1.1 jdolecek p->status |= (val << ENA_ETH_IO_RX_CDESC_BASE_LAST_SHIFT) & ENA_ETH_IO_RX_CDESC_BASE_LAST_MASK; 897 1.1 jdolecek } 898 1.1 jdolecek 899 1.1 jdolecek static inline uint32_t get_ena_eth_io_rx_cdesc_base_buffer(const struct ena_eth_io_rx_cdesc_base *p) 900 1.1 jdolecek { 901 1.1 jdolecek return (p->status & ENA_ETH_IO_RX_CDESC_BASE_BUFFER_MASK) >> ENA_ETH_IO_RX_CDESC_BASE_BUFFER_SHIFT; 902 1.1 jdolecek } 903 1.1 jdolecek 904 1.1 jdolecek static inline void set_ena_eth_io_rx_cdesc_base_buffer(struct ena_eth_io_rx_cdesc_base *p, uint32_t val) 905 1.1 jdolecek { 906 1.1 jdolecek p->status |= (val << ENA_ETH_IO_RX_CDESC_BASE_BUFFER_SHIFT) & ENA_ETH_IO_RX_CDESC_BASE_BUFFER_MASK; 907 1.1 jdolecek } 908 1.1 jdolecek 909 1.1 jdolecek static inline uint32_t get_ena_eth_io_intr_reg_rx_intr_delay(const struct ena_eth_io_intr_reg *p) 910 1.1 jdolecek { 911 1.1 jdolecek return p->intr_control & ENA_ETH_IO_INTR_REG_RX_INTR_DELAY_MASK; 912 1.1 jdolecek } 913 1.1 jdolecek 914 1.1 jdolecek static inline void set_ena_eth_io_intr_reg_rx_intr_delay(struct ena_eth_io_intr_reg *p, uint32_t val) 915 1.1 jdolecek { 916 1.1 jdolecek p->intr_control |= val & ENA_ETH_IO_INTR_REG_RX_INTR_DELAY_MASK; 917 1.1 jdolecek } 918 1.1 jdolecek 919 1.1 jdolecek static inline uint32_t get_ena_eth_io_intr_reg_tx_intr_delay(const struct ena_eth_io_intr_reg *p) 920 1.1 jdolecek { 921 1.1 jdolecek return (p->intr_control & ENA_ETH_IO_INTR_REG_TX_INTR_DELAY_MASK) >> ENA_ETH_IO_INTR_REG_TX_INTR_DELAY_SHIFT; 922 1.1 jdolecek } 923 1.1 jdolecek 924 1.1 jdolecek static inline void set_ena_eth_io_intr_reg_tx_intr_delay(struct ena_eth_io_intr_reg *p, uint32_t val) 925 1.1 jdolecek { 926 1.1 jdolecek p->intr_control |= (val << ENA_ETH_IO_INTR_REG_TX_INTR_DELAY_SHIFT) & ENA_ETH_IO_INTR_REG_TX_INTR_DELAY_MASK; 927 1.1 jdolecek } 928 1.1 jdolecek 929 1.1 jdolecek static inline uint32_t get_ena_eth_io_intr_reg_intr_unmask(const struct ena_eth_io_intr_reg *p) 930 1.1 jdolecek { 931 1.1 jdolecek return (p->intr_control & ENA_ETH_IO_INTR_REG_INTR_UNMASK_MASK) >> ENA_ETH_IO_INTR_REG_INTR_UNMASK_SHIFT; 932 1.1 jdolecek } 933 1.1 jdolecek 934 1.1 jdolecek static inline void set_ena_eth_io_intr_reg_intr_unmask(struct ena_eth_io_intr_reg *p, uint32_t val) 935 1.1 jdolecek { 936 1.1 jdolecek p->intr_control |= (val << ENA_ETH_IO_INTR_REG_INTR_UNMASK_SHIFT) & ENA_ETH_IO_INTR_REG_INTR_UNMASK_MASK; 937 1.1 jdolecek } 938 1.1 jdolecek 939 1.1 jdolecek static inline uint32_t get_ena_eth_io_numa_node_cfg_reg_numa(const struct ena_eth_io_numa_node_cfg_reg *p) 940 1.1 jdolecek { 941 1.1 jdolecek return p->numa_cfg & ENA_ETH_IO_NUMA_NODE_CFG_REG_NUMA_MASK; 942 1.1 jdolecek } 943 1.1 jdolecek 944 1.1 jdolecek static inline void set_ena_eth_io_numa_node_cfg_reg_numa(struct ena_eth_io_numa_node_cfg_reg *p, uint32_t val) 945 1.1 jdolecek { 946 1.1 jdolecek p->numa_cfg |= val & ENA_ETH_IO_NUMA_NODE_CFG_REG_NUMA_MASK; 947 1.1 jdolecek } 948 1.1 jdolecek 949 1.1 jdolecek static inline uint32_t get_ena_eth_io_numa_node_cfg_reg_enabled(const struct ena_eth_io_numa_node_cfg_reg *p) 950 1.1 jdolecek { 951 1.1 jdolecek return (p->numa_cfg & ENA_ETH_IO_NUMA_NODE_CFG_REG_ENABLED_MASK) >> ENA_ETH_IO_NUMA_NODE_CFG_REG_ENABLED_SHIFT; 952 1.1 jdolecek } 953 1.1 jdolecek 954 1.1 jdolecek static inline void set_ena_eth_io_numa_node_cfg_reg_enabled(struct ena_eth_io_numa_node_cfg_reg *p, uint32_t val) 955 1.1 jdolecek { 956 1.1 jdolecek p->numa_cfg |= (val << ENA_ETH_IO_NUMA_NODE_CFG_REG_ENABLED_SHIFT) & ENA_ETH_IO_NUMA_NODE_CFG_REG_ENABLED_MASK; 957 1.1 jdolecek } 958 1.1 jdolecek 959 1.1 jdolecek #endif /* !defined(ENA_DEFS_LINUX_MAINLINE) */ 960 1.1 jdolecek #endif /*_ENA_ETH_IO_H_ */ 961