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