Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
0002 /*
0003  * Copyright 2015-2020 Amazon.com, Inc. or its affiliates. All rights reserved.
0004  */
0005 #ifndef _ENA_ADMIN_H_
0006 #define _ENA_ADMIN_H_
0007 
0008 #define ENA_ADMIN_RSS_KEY_PARTS              10
0009 
0010 enum ena_admin_aq_opcode {
0011     ENA_ADMIN_CREATE_SQ                         = 1,
0012     ENA_ADMIN_DESTROY_SQ                        = 2,
0013     ENA_ADMIN_CREATE_CQ                         = 3,
0014     ENA_ADMIN_DESTROY_CQ                        = 4,
0015     ENA_ADMIN_GET_FEATURE                       = 8,
0016     ENA_ADMIN_SET_FEATURE                       = 9,
0017     ENA_ADMIN_GET_STATS                         = 11,
0018 };
0019 
0020 enum ena_admin_aq_completion_status {
0021     ENA_ADMIN_SUCCESS                           = 0,
0022     ENA_ADMIN_RESOURCE_ALLOCATION_FAILURE       = 1,
0023     ENA_ADMIN_BAD_OPCODE                        = 2,
0024     ENA_ADMIN_UNSUPPORTED_OPCODE                = 3,
0025     ENA_ADMIN_MALFORMED_REQUEST                 = 4,
0026     /* Additional status is provided in ACQ entry extended_status */
0027     ENA_ADMIN_ILLEGAL_PARAMETER                 = 5,
0028     ENA_ADMIN_UNKNOWN_ERROR                     = 6,
0029     ENA_ADMIN_RESOURCE_BUSY                     = 7,
0030 };
0031 
0032 /* subcommands for the set/get feature admin commands */
0033 enum ena_admin_aq_feature_id {
0034     ENA_ADMIN_DEVICE_ATTRIBUTES                 = 1,
0035     ENA_ADMIN_MAX_QUEUES_NUM                    = 2,
0036     ENA_ADMIN_HW_HINTS                          = 3,
0037     ENA_ADMIN_LLQ                               = 4,
0038     ENA_ADMIN_MAX_QUEUES_EXT                    = 7,
0039     ENA_ADMIN_RSS_HASH_FUNCTION                 = 10,
0040     ENA_ADMIN_STATELESS_OFFLOAD_CONFIG          = 11,
0041     ENA_ADMIN_RSS_INDIRECTION_TABLE_CONFIG      = 12,
0042     ENA_ADMIN_MTU                               = 14,
0043     ENA_ADMIN_RSS_HASH_INPUT                    = 18,
0044     ENA_ADMIN_INTERRUPT_MODERATION              = 20,
0045     ENA_ADMIN_AENQ_CONFIG                       = 26,
0046     ENA_ADMIN_LINK_CONFIG                       = 27,
0047     ENA_ADMIN_HOST_ATTR_CONFIG                  = 28,
0048     ENA_ADMIN_FEATURES_OPCODE_NUM               = 32,
0049 };
0050 
0051 /* device capabilities */
0052 enum ena_admin_aq_caps_id {
0053     ENA_ADMIN_ENI_STATS                         = 0,
0054 };
0055 
0056 enum ena_admin_placement_policy_type {
0057     /* descriptors and headers are in host memory */
0058     ENA_ADMIN_PLACEMENT_POLICY_HOST             = 1,
0059     /* descriptors and headers are in device memory (a.k.a Low Latency
0060      * Queue)
0061      */
0062     ENA_ADMIN_PLACEMENT_POLICY_DEV              = 3,
0063 };
0064 
0065 enum ena_admin_link_types {
0066     ENA_ADMIN_LINK_SPEED_1G                     = 0x1,
0067     ENA_ADMIN_LINK_SPEED_2_HALF_G               = 0x2,
0068     ENA_ADMIN_LINK_SPEED_5G                     = 0x4,
0069     ENA_ADMIN_LINK_SPEED_10G                    = 0x8,
0070     ENA_ADMIN_LINK_SPEED_25G                    = 0x10,
0071     ENA_ADMIN_LINK_SPEED_40G                    = 0x20,
0072     ENA_ADMIN_LINK_SPEED_50G                    = 0x40,
0073     ENA_ADMIN_LINK_SPEED_100G                   = 0x80,
0074     ENA_ADMIN_LINK_SPEED_200G                   = 0x100,
0075     ENA_ADMIN_LINK_SPEED_400G                   = 0x200,
0076 };
0077 
0078 enum ena_admin_completion_policy_type {
0079     /* completion queue entry for each sq descriptor */
0080     ENA_ADMIN_COMPLETION_POLICY_DESC            = 0,
0081     /* completion queue entry upon request in sq descriptor */
0082     ENA_ADMIN_COMPLETION_POLICY_DESC_ON_DEMAND  = 1,
0083     /* current queue head pointer is updated in OS memory upon sq
0084      * descriptor request
0085      */
0086     ENA_ADMIN_COMPLETION_POLICY_HEAD_ON_DEMAND  = 2,
0087     /* current queue head pointer is updated in OS memory for each sq
0088      * descriptor
0089      */
0090     ENA_ADMIN_COMPLETION_POLICY_HEAD            = 3,
0091 };
0092 
0093 /* basic stats return ena_admin_basic_stats while extanded stats return a
0094  * buffer (string format) with additional statistics per queue and per
0095  * device id
0096  */
0097 enum ena_admin_get_stats_type {
0098     ENA_ADMIN_GET_STATS_TYPE_BASIC              = 0,
0099     ENA_ADMIN_GET_STATS_TYPE_EXTENDED           = 1,
0100     /* extra HW stats for specific network interface */
0101     ENA_ADMIN_GET_STATS_TYPE_ENI                = 2,
0102 };
0103 
0104 enum ena_admin_get_stats_scope {
0105     ENA_ADMIN_SPECIFIC_QUEUE                    = 0,
0106     ENA_ADMIN_ETH_TRAFFIC                       = 1,
0107 };
0108 
0109 struct ena_admin_aq_common_desc {
0110     /* 11:0 : command_id
0111      * 15:12 : reserved12
0112      */
0113     u16 command_id;
0114 
0115     /* as appears in ena_admin_aq_opcode */
0116     u8 opcode;
0117 
0118     /* 0 : phase
0119      * 1 : ctrl_data - control buffer address valid
0120      * 2 : ctrl_data_indirect - control buffer address
0121      *    points to list of pages with addresses of control
0122      *    buffers
0123      * 7:3 : reserved3
0124      */
0125     u8 flags;
0126 };
0127 
0128 /* used in ena_admin_aq_entry. Can point directly to control data, or to a
0129  * page list chunk. Used also at the end of indirect mode page list chunks,
0130  * for chaining.
0131  */
0132 struct ena_admin_ctrl_buff_info {
0133     u32 length;
0134 
0135     struct ena_common_mem_addr address;
0136 };
0137 
0138 struct ena_admin_sq {
0139     u16 sq_idx;
0140 
0141     /* 4:0 : reserved
0142      * 7:5 : sq_direction - 0x1 - Tx; 0x2 - Rx
0143      */
0144     u8 sq_identity;
0145 
0146     u8 reserved1;
0147 };
0148 
0149 struct ena_admin_aq_entry {
0150     struct ena_admin_aq_common_desc aq_common_descriptor;
0151 
0152     union {
0153         u32 inline_data_w1[3];
0154 
0155         struct ena_admin_ctrl_buff_info control_buffer;
0156     } u;
0157 
0158     u32 inline_data_w4[12];
0159 };
0160 
0161 struct ena_admin_acq_common_desc {
0162     /* command identifier to associate it with the aq descriptor
0163      * 11:0 : command_id
0164      * 15:12 : reserved12
0165      */
0166     u16 command;
0167 
0168     u8 status;
0169 
0170     /* 0 : phase
0171      * 7:1 : reserved1
0172      */
0173     u8 flags;
0174 
0175     u16 extended_status;
0176 
0177     /* indicates to the driver which AQ entry has been consumed by the
0178      * device and could be reused
0179      */
0180     u16 sq_head_indx;
0181 };
0182 
0183 struct ena_admin_acq_entry {
0184     struct ena_admin_acq_common_desc acq_common_descriptor;
0185 
0186     u32 response_specific_data[14];
0187 };
0188 
0189 struct ena_admin_aq_create_sq_cmd {
0190     struct ena_admin_aq_common_desc aq_common_descriptor;
0191 
0192     /* 4:0 : reserved0_w1
0193      * 7:5 : sq_direction - 0x1 - Tx, 0x2 - Rx
0194      */
0195     u8 sq_identity;
0196 
0197     u8 reserved8_w1;
0198 
0199     /* 3:0 : placement_policy - Describing where the SQ
0200      *    descriptor ring and the SQ packet headers reside:
0201      *    0x1 - descriptors and headers are in OS memory,
0202      *    0x3 - descriptors and headers in device memory
0203      *    (a.k.a Low Latency Queue)
0204      * 6:4 : completion_policy - Describing what policy
0205      *    to use for generation completion entry (cqe) in
0206      *    the CQ associated with this SQ: 0x0 - cqe for each
0207      *    sq descriptor, 0x1 - cqe upon request in sq
0208      *    descriptor, 0x2 - current queue head pointer is
0209      *    updated in OS memory upon sq descriptor request
0210      *    0x3 - current queue head pointer is updated in OS
0211      *    memory for each sq descriptor
0212      * 7 : reserved15_w1
0213      */
0214     u8 sq_caps_2;
0215 
0216     /* 0 : is_physically_contiguous - Described if the
0217      *    queue ring memory is allocated in physical
0218      *    contiguous pages or split.
0219      * 7:1 : reserved17_w1
0220      */
0221     u8 sq_caps_3;
0222 
0223     /* associated completion queue id. This CQ must be created prior to SQ
0224      * creation
0225      */
0226     u16 cq_idx;
0227 
0228     /* submission queue depth in entries */
0229     u16 sq_depth;
0230 
0231     /* SQ physical base address in OS memory. This field should not be
0232      * used for Low Latency queues. Has to be page aligned.
0233      */
0234     struct ena_common_mem_addr sq_ba;
0235 
0236     /* specifies queue head writeback location in OS memory. Valid if
0237      * completion_policy is set to completion_policy_head_on_demand or
0238      * completion_policy_head. Has to be cache aligned
0239      */
0240     struct ena_common_mem_addr sq_head_writeback;
0241 
0242     u32 reserved0_w7;
0243 
0244     u32 reserved0_w8;
0245 };
0246 
0247 enum ena_admin_sq_direction {
0248     ENA_ADMIN_SQ_DIRECTION_TX                   = 1,
0249     ENA_ADMIN_SQ_DIRECTION_RX                   = 2,
0250 };
0251 
0252 struct ena_admin_acq_create_sq_resp_desc {
0253     struct ena_admin_acq_common_desc acq_common_desc;
0254 
0255     u16 sq_idx;
0256 
0257     u16 reserved;
0258 
0259     /* queue doorbell address as an offset to PCIe MMIO REG BAR */
0260     u32 sq_doorbell_offset;
0261 
0262     /* low latency queue ring base address as an offset to PCIe MMIO
0263      * LLQ_MEM BAR
0264      */
0265     u32 llq_descriptors_offset;
0266 
0267     /* low latency queue headers' memory as an offset to PCIe MMIO
0268      * LLQ_MEM BAR
0269      */
0270     u32 llq_headers_offset;
0271 };
0272 
0273 struct ena_admin_aq_destroy_sq_cmd {
0274     struct ena_admin_aq_common_desc aq_common_descriptor;
0275 
0276     struct ena_admin_sq sq;
0277 };
0278 
0279 struct ena_admin_acq_destroy_sq_resp_desc {
0280     struct ena_admin_acq_common_desc acq_common_desc;
0281 };
0282 
0283 struct ena_admin_aq_create_cq_cmd {
0284     struct ena_admin_aq_common_desc aq_common_descriptor;
0285 
0286     /* 4:0 : reserved5
0287      * 5 : interrupt_mode_enabled - if set, cq operates
0288      *    in interrupt mode, otherwise - polling
0289      * 7:6 : reserved6
0290      */
0291     u8 cq_caps_1;
0292 
0293     /* 4:0 : cq_entry_size_words - size of CQ entry in
0294      *    32-bit words, valid values: 4, 8.
0295      * 7:5 : reserved7
0296      */
0297     u8 cq_caps_2;
0298 
0299     /* completion queue depth in # of entries. must be power of 2 */
0300     u16 cq_depth;
0301 
0302     /* msix vector assigned to this cq */
0303     u32 msix_vector;
0304 
0305     /* cq physical base address in OS memory. CQ must be physically
0306      * contiguous
0307      */
0308     struct ena_common_mem_addr cq_ba;
0309 };
0310 
0311 struct ena_admin_acq_create_cq_resp_desc {
0312     struct ena_admin_acq_common_desc acq_common_desc;
0313 
0314     u16 cq_idx;
0315 
0316     /* actual cq depth in number of entries */
0317     u16 cq_actual_depth;
0318 
0319     u32 numa_node_register_offset;
0320 
0321     u32 cq_head_db_register_offset;
0322 
0323     u32 cq_interrupt_unmask_register_offset;
0324 };
0325 
0326 struct ena_admin_aq_destroy_cq_cmd {
0327     struct ena_admin_aq_common_desc aq_common_descriptor;
0328 
0329     u16 cq_idx;
0330 
0331     u16 reserved1;
0332 };
0333 
0334 struct ena_admin_acq_destroy_cq_resp_desc {
0335     struct ena_admin_acq_common_desc acq_common_desc;
0336 };
0337 
0338 /* ENA AQ Get Statistics command. Extended statistics are placed in control
0339  * buffer pointed by AQ entry
0340  */
0341 struct ena_admin_aq_get_stats_cmd {
0342     struct ena_admin_aq_common_desc aq_common_descriptor;
0343 
0344     union {
0345         /* command specific inline data */
0346         u32 inline_data_w1[3];
0347 
0348         struct ena_admin_ctrl_buff_info control_buffer;
0349     } u;
0350 
0351     /* stats type as defined in enum ena_admin_get_stats_type */
0352     u8 type;
0353 
0354     /* stats scope defined in enum ena_admin_get_stats_scope */
0355     u8 scope;
0356 
0357     u16 reserved3;
0358 
0359     /* queue id. used when scope is specific_queue */
0360     u16 queue_idx;
0361 
0362     /* device id, value 0xFFFF means mine. only privileged device can get
0363      * stats of other device
0364      */
0365     u16 device_id;
0366 };
0367 
0368 /* Basic Statistics Command. */
0369 struct ena_admin_basic_stats {
0370     u32 tx_bytes_low;
0371 
0372     u32 tx_bytes_high;
0373 
0374     u32 tx_pkts_low;
0375 
0376     u32 tx_pkts_high;
0377 
0378     u32 rx_bytes_low;
0379 
0380     u32 rx_bytes_high;
0381 
0382     u32 rx_pkts_low;
0383 
0384     u32 rx_pkts_high;
0385 
0386     u32 rx_drops_low;
0387 
0388     u32 rx_drops_high;
0389 
0390     u32 tx_drops_low;
0391 
0392     u32 tx_drops_high;
0393 };
0394 
0395 /* ENI Statistics Command. */
0396 struct ena_admin_eni_stats {
0397     /* The number of packets shaped due to inbound aggregate BW
0398      * allowance being exceeded
0399      */
0400     u64 bw_in_allowance_exceeded;
0401 
0402     /* The number of packets shaped due to outbound aggregate BW
0403      * allowance being exceeded
0404      */
0405     u64 bw_out_allowance_exceeded;
0406 
0407     /* The number of packets shaped due to PPS allowance being exceeded */
0408     u64 pps_allowance_exceeded;
0409 
0410     /* The number of packets shaped due to connection tracking
0411      * allowance being exceeded and leading to failure in establishment
0412      * of new connections
0413      */
0414     u64 conntrack_allowance_exceeded;
0415 
0416     /* The number of packets shaped due to linklocal packet rate
0417      * allowance being exceeded
0418      */
0419     u64 linklocal_allowance_exceeded;
0420 };
0421 
0422 struct ena_admin_acq_get_stats_resp {
0423     struct ena_admin_acq_common_desc acq_common_desc;
0424 
0425     union {
0426         u64 raw[7];
0427 
0428         struct ena_admin_basic_stats basic_stats;
0429 
0430         struct ena_admin_eni_stats eni_stats;
0431     } u;
0432 };
0433 
0434 struct ena_admin_get_set_feature_common_desc {
0435     /* 1:0 : select - 0x1 - current value; 0x3 - default
0436      *    value
0437      * 7:3 : reserved3
0438      */
0439     u8 flags;
0440 
0441     /* as appears in ena_admin_aq_feature_id */
0442     u8 feature_id;
0443 
0444     /* The driver specifies the max feature version it supports and the
0445      * device responds with the currently supported feature version. The
0446      * field is zero based
0447      */
0448     u8 feature_version;
0449 
0450     u8 reserved8;
0451 };
0452 
0453 struct ena_admin_device_attr_feature_desc {
0454     u32 impl_id;
0455 
0456     u32 device_version;
0457 
0458     /* bitmap of ena_admin_aq_feature_id, which represents supported
0459      * subcommands for the set/get feature admin commands.
0460      */
0461     u32 supported_features;
0462 
0463     /* bitmap of ena_admin_aq_caps_id, which represents device
0464      * capabilities.
0465      */
0466     u32 capabilities;
0467 
0468     /* Indicates how many bits are used physical address access. */
0469     u32 phys_addr_width;
0470 
0471     /* Indicates how many bits are used virtual address access. */
0472     u32 virt_addr_width;
0473 
0474     /* unicast MAC address (in Network byte order) */
0475     u8 mac_addr[6];
0476 
0477     u8 reserved7[2];
0478 
0479     u32 max_mtu;
0480 };
0481 
0482 enum ena_admin_llq_header_location {
0483     /* header is in descriptor list */
0484     ENA_ADMIN_INLINE_HEADER                     = 1,
0485     /* header in a separate ring, implies 16B descriptor list entry */
0486     ENA_ADMIN_HEADER_RING                       = 2,
0487 };
0488 
0489 enum ena_admin_llq_ring_entry_size {
0490     ENA_ADMIN_LIST_ENTRY_SIZE_128B              = 1,
0491     ENA_ADMIN_LIST_ENTRY_SIZE_192B              = 2,
0492     ENA_ADMIN_LIST_ENTRY_SIZE_256B              = 4,
0493 };
0494 
0495 enum ena_admin_llq_num_descs_before_header {
0496     ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_0     = 0,
0497     ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_1     = 1,
0498     ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_2     = 2,
0499     ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_4     = 4,
0500     ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_8     = 8,
0501 };
0502 
0503 /* packet descriptor list entry always starts with one or more descriptors,
0504  * followed by a header. The rest of the descriptors are located in the
0505  * beginning of the subsequent entry. Stride refers to how the rest of the
0506  * descriptors are placed. This field is relevant only for inline header
0507  * mode
0508  */
0509 enum ena_admin_llq_stride_ctrl {
0510     ENA_ADMIN_SINGLE_DESC_PER_ENTRY             = 1,
0511     ENA_ADMIN_MULTIPLE_DESCS_PER_ENTRY          = 2,
0512 };
0513 
0514 enum ena_admin_accel_mode_feat {
0515     ENA_ADMIN_DISABLE_META_CACHING              = 0,
0516     ENA_ADMIN_LIMIT_TX_BURST                    = 1,
0517 };
0518 
0519 struct ena_admin_accel_mode_get {
0520     /* bit field of enum ena_admin_accel_mode_feat */
0521     u16 supported_flags;
0522 
0523     /* maximum burst size between two doorbells. The size is in bytes */
0524     u16 max_tx_burst_size;
0525 };
0526 
0527 struct ena_admin_accel_mode_set {
0528     /* bit field of enum ena_admin_accel_mode_feat */
0529     u16 enabled_flags;
0530 
0531     u16 reserved;
0532 };
0533 
0534 struct ena_admin_accel_mode_req {
0535     union {
0536         u32 raw[2];
0537 
0538         struct ena_admin_accel_mode_get get;
0539 
0540         struct ena_admin_accel_mode_set set;
0541     } u;
0542 };
0543 
0544 struct ena_admin_feature_llq_desc {
0545     u32 max_llq_num;
0546 
0547     u32 max_llq_depth;
0548 
0549     /* specify the header locations the device supports. bitfield of enum
0550      * ena_admin_llq_header_location.
0551      */
0552     u16 header_location_ctrl_supported;
0553 
0554     /* the header location the driver selected to use. */
0555     u16 header_location_ctrl_enabled;
0556 
0557     /* if inline header is specified - this is the size of descriptor list
0558      * entry. If header in a separate ring is specified - this is the size
0559      * of header ring entry. bitfield of enum ena_admin_llq_ring_entry_size.
0560      * specify the entry sizes the device supports
0561      */
0562     u16 entry_size_ctrl_supported;
0563 
0564     /* the entry size the driver selected to use. */
0565     u16 entry_size_ctrl_enabled;
0566 
0567     /* valid only if inline header is specified. First entry associated with
0568      * the packet includes descriptors and header. Rest of the entries
0569      * occupied by descriptors. This parameter defines the max number of
0570      * descriptors precedding the header in the first entry. The field is
0571      * bitfield of enum ena_admin_llq_num_descs_before_header and specify
0572      * the values the device supports
0573      */
0574     u16 desc_num_before_header_supported;
0575 
0576     /* the desire field the driver selected to use */
0577     u16 desc_num_before_header_enabled;
0578 
0579     /* valid only if inline was chosen. bitfield of enum
0580      * ena_admin_llq_stride_ctrl
0581      */
0582     u16 descriptors_stride_ctrl_supported;
0583 
0584     /* the stride control the driver selected to use */
0585     u16 descriptors_stride_ctrl_enabled;
0586 
0587     /* reserved */
0588     u32 reserved1;
0589 
0590     /* accelerated low latency queues requirement. driver needs to
0591      * support those requirements in order to use accelerated llq
0592      */
0593     struct ena_admin_accel_mode_req accel_mode;
0594 };
0595 
0596 struct ena_admin_queue_ext_feature_fields {
0597     u32 max_tx_sq_num;
0598 
0599     u32 max_tx_cq_num;
0600 
0601     u32 max_rx_sq_num;
0602 
0603     u32 max_rx_cq_num;
0604 
0605     u32 max_tx_sq_depth;
0606 
0607     u32 max_tx_cq_depth;
0608 
0609     u32 max_rx_sq_depth;
0610 
0611     u32 max_rx_cq_depth;
0612 
0613     u32 max_tx_header_size;
0614 
0615     /* Maximum Descriptors number, including meta descriptor, allowed for a
0616      * single Tx packet
0617      */
0618     u16 max_per_packet_tx_descs;
0619 
0620     /* Maximum Descriptors number allowed for a single Rx packet */
0621     u16 max_per_packet_rx_descs;
0622 };
0623 
0624 struct ena_admin_queue_feature_desc {
0625     u32 max_sq_num;
0626 
0627     u32 max_sq_depth;
0628 
0629     u32 max_cq_num;
0630 
0631     u32 max_cq_depth;
0632 
0633     u32 max_legacy_llq_num;
0634 
0635     u32 max_legacy_llq_depth;
0636 
0637     u32 max_header_size;
0638 
0639     /* Maximum Descriptors number, including meta descriptor, allowed for a
0640      * single Tx packet
0641      */
0642     u16 max_packet_tx_descs;
0643 
0644     /* Maximum Descriptors number allowed for a single Rx packet */
0645     u16 max_packet_rx_descs;
0646 };
0647 
0648 struct ena_admin_set_feature_mtu_desc {
0649     /* exclude L2 */
0650     u32 mtu;
0651 };
0652 
0653 struct ena_admin_set_feature_host_attr_desc {
0654     /* host OS info base address in OS memory. host info is 4KB of
0655      * physically contiguous
0656      */
0657     struct ena_common_mem_addr os_info_ba;
0658 
0659     /* host debug area base address in OS memory. debug area must be
0660      * physically contiguous
0661      */
0662     struct ena_common_mem_addr debug_ba;
0663 
0664     /* debug area size */
0665     u32 debug_area_size;
0666 };
0667 
0668 struct ena_admin_feature_intr_moder_desc {
0669     /* interrupt delay granularity in usec */
0670     u16 intr_delay_resolution;
0671 
0672     u16 reserved;
0673 };
0674 
0675 struct ena_admin_get_feature_link_desc {
0676     /* Link speed in Mb */
0677     u32 speed;
0678 
0679     /* bit field of enum ena_admin_link types */
0680     u32 supported;
0681 
0682     /* 0 : autoneg
0683      * 1 : duplex - Full Duplex
0684      * 31:2 : reserved2
0685      */
0686     u32 flags;
0687 };
0688 
0689 struct ena_admin_feature_aenq_desc {
0690     /* bitmask for AENQ groups the device can report */
0691     u32 supported_groups;
0692 
0693     /* bitmask for AENQ groups to report */
0694     u32 enabled_groups;
0695 };
0696 
0697 struct ena_admin_feature_offload_desc {
0698     /* 0 : TX_L3_csum_ipv4
0699      * 1 : TX_L4_ipv4_csum_part - The checksum field
0700      *    should be initialized with pseudo header checksum
0701      * 2 : TX_L4_ipv4_csum_full
0702      * 3 : TX_L4_ipv6_csum_part - The checksum field
0703      *    should be initialized with pseudo header checksum
0704      * 4 : TX_L4_ipv6_csum_full
0705      * 5 : tso_ipv4
0706      * 6 : tso_ipv6
0707      * 7 : tso_ecn
0708      */
0709     u32 tx;
0710 
0711     /* Receive side supported stateless offload
0712      * 0 : RX_L3_csum_ipv4 - IPv4 checksum
0713      * 1 : RX_L4_ipv4_csum - TCP/UDP/IPv4 checksum
0714      * 2 : RX_L4_ipv6_csum - TCP/UDP/IPv6 checksum
0715      * 3 : RX_hash - Hash calculation
0716      */
0717     u32 rx_supported;
0718 
0719     u32 rx_enabled;
0720 };
0721 
0722 enum ena_admin_hash_functions {
0723     ENA_ADMIN_TOEPLITZ                          = 1,
0724     ENA_ADMIN_CRC32                             = 2,
0725 };
0726 
0727 struct ena_admin_feature_rss_flow_hash_control {
0728     u32 key_parts;
0729 
0730     u32 reserved;
0731 
0732     u32 key[ENA_ADMIN_RSS_KEY_PARTS];
0733 };
0734 
0735 struct ena_admin_feature_rss_flow_hash_function {
0736     /* 7:0 : funcs - bitmask of ena_admin_hash_functions */
0737     u32 supported_func;
0738 
0739     /* 7:0 : selected_func - bitmask of
0740      *    ena_admin_hash_functions
0741      */
0742     u32 selected_func;
0743 
0744     /* initial value */
0745     u32 init_val;
0746 };
0747 
0748 /* RSS flow hash protocols */
0749 enum ena_admin_flow_hash_proto {
0750     ENA_ADMIN_RSS_TCP4                          = 0,
0751     ENA_ADMIN_RSS_UDP4                          = 1,
0752     ENA_ADMIN_RSS_TCP6                          = 2,
0753     ENA_ADMIN_RSS_UDP6                          = 3,
0754     ENA_ADMIN_RSS_IP4                           = 4,
0755     ENA_ADMIN_RSS_IP6                           = 5,
0756     ENA_ADMIN_RSS_IP4_FRAG                      = 6,
0757     ENA_ADMIN_RSS_NOT_IP                        = 7,
0758     /* TCPv6 with extension header */
0759     ENA_ADMIN_RSS_TCP6_EX                       = 8,
0760     /* IPv6 with extension header */
0761     ENA_ADMIN_RSS_IP6_EX                        = 9,
0762     ENA_ADMIN_RSS_PROTO_NUM                     = 16,
0763 };
0764 
0765 /* RSS flow hash fields */
0766 enum ena_admin_flow_hash_fields {
0767     /* Ethernet Dest Addr */
0768     ENA_ADMIN_RSS_L2_DA                         = BIT(0),
0769     /* Ethernet Src Addr */
0770     ENA_ADMIN_RSS_L2_SA                         = BIT(1),
0771     /* ipv4/6 Dest Addr */
0772     ENA_ADMIN_RSS_L3_DA                         = BIT(2),
0773     /* ipv4/6 Src Addr */
0774     ENA_ADMIN_RSS_L3_SA                         = BIT(3),
0775     /* tcp/udp Dest Port */
0776     ENA_ADMIN_RSS_L4_DP                         = BIT(4),
0777     /* tcp/udp Src Port */
0778     ENA_ADMIN_RSS_L4_SP                         = BIT(5),
0779 };
0780 
0781 struct ena_admin_proto_input {
0782     /* flow hash fields (bitwise according to ena_admin_flow_hash_fields) */
0783     u16 fields;
0784 
0785     u16 reserved2;
0786 };
0787 
0788 struct ena_admin_feature_rss_hash_control {
0789     struct ena_admin_proto_input supported_fields[ENA_ADMIN_RSS_PROTO_NUM];
0790 
0791     struct ena_admin_proto_input selected_fields[ENA_ADMIN_RSS_PROTO_NUM];
0792 
0793     struct ena_admin_proto_input reserved2[ENA_ADMIN_RSS_PROTO_NUM];
0794 
0795     struct ena_admin_proto_input reserved3[ENA_ADMIN_RSS_PROTO_NUM];
0796 };
0797 
0798 struct ena_admin_feature_rss_flow_hash_input {
0799     /* supported hash input sorting
0800      * 1 : L3_sort - support swap L3 addresses if DA is
0801      *    smaller than SA
0802      * 2 : L4_sort - support swap L4 ports if DP smaller
0803      *    SP
0804      */
0805     u16 supported_input_sort;
0806 
0807     /* enabled hash input sorting
0808      * 1 : enable_L3_sort - enable swap L3 addresses if
0809      *    DA smaller than SA
0810      * 2 : enable_L4_sort - enable swap L4 ports if DP
0811      *    smaller than SP
0812      */
0813     u16 enabled_input_sort;
0814 };
0815 
0816 enum ena_admin_os_type {
0817     ENA_ADMIN_OS_LINUX                          = 1,
0818     ENA_ADMIN_OS_WIN                            = 2,
0819     ENA_ADMIN_OS_DPDK                           = 3,
0820     ENA_ADMIN_OS_FREEBSD                        = 4,
0821     ENA_ADMIN_OS_IPXE                           = 5,
0822     ENA_ADMIN_OS_ESXI                           = 6,
0823     ENA_ADMIN_OS_GROUPS_NUM                     = 6,
0824 };
0825 
0826 struct ena_admin_host_info {
0827     /* defined in enum ena_admin_os_type */
0828     u32 os_type;
0829 
0830     /* os distribution string format */
0831     u8 os_dist_str[128];
0832 
0833     /* OS distribution numeric format */
0834     u32 os_dist;
0835 
0836     /* kernel version string format */
0837     u8 kernel_ver_str[32];
0838 
0839     /* Kernel version numeric format */
0840     u32 kernel_ver;
0841 
0842     /* 7:0 : major
0843      * 15:8 : minor
0844      * 23:16 : sub_minor
0845      * 31:24 : module_type
0846      */
0847     u32 driver_version;
0848 
0849     /* features bitmap */
0850     u32 supported_network_features[2];
0851 
0852     /* ENA spec version of driver */
0853     u16 ena_spec_version;
0854 
0855     /* ENA device's Bus, Device and Function
0856      * 2:0 : function
0857      * 7:3 : device
0858      * 15:8 : bus
0859      */
0860     u16 bdf;
0861 
0862     /* Number of CPUs */
0863     u16 num_cpus;
0864 
0865     u16 reserved;
0866 
0867     /* 0 : reserved
0868      * 1 : rx_offset
0869      * 2 : interrupt_moderation
0870      * 3 : rx_buf_mirroring
0871      * 4 : rss_configurable_function_key
0872      * 31:5 : reserved
0873      */
0874     u32 driver_supported_features;
0875 };
0876 
0877 struct ena_admin_rss_ind_table_entry {
0878     u16 cq_idx;
0879 
0880     u16 reserved;
0881 };
0882 
0883 struct ena_admin_feature_rss_ind_table {
0884     /* min supported table size (2^min_size) */
0885     u16 min_size;
0886 
0887     /* max supported table size (2^max_size) */
0888     u16 max_size;
0889 
0890     /* table size (2^size) */
0891     u16 size;
0892 
0893     u16 reserved;
0894 
0895     /* index of the inline entry. 0xFFFFFFFF means invalid */
0896     u32 inline_index;
0897 
0898     /* used for updating single entry, ignored when setting the entire
0899      * table through the control buffer.
0900      */
0901     struct ena_admin_rss_ind_table_entry inline_entry;
0902 };
0903 
0904 /* When hint value is 0, driver should use it's own predefined value */
0905 struct ena_admin_ena_hw_hints {
0906     /* value in ms */
0907     u16 mmio_read_timeout;
0908 
0909     /* value in ms */
0910     u16 driver_watchdog_timeout;
0911 
0912     /* Per packet tx completion timeout. value in ms */
0913     u16 missing_tx_completion_timeout;
0914 
0915     u16 missed_tx_completion_count_threshold_to_reset;
0916 
0917     /* value in ms */
0918     u16 admin_completion_tx_timeout;
0919 
0920     u16 netdev_wd_timeout;
0921 
0922     u16 max_tx_sgl_size;
0923 
0924     u16 max_rx_sgl_size;
0925 
0926     u16 reserved[8];
0927 };
0928 
0929 struct ena_admin_get_feat_cmd {
0930     struct ena_admin_aq_common_desc aq_common_descriptor;
0931 
0932     struct ena_admin_ctrl_buff_info control_buffer;
0933 
0934     struct ena_admin_get_set_feature_common_desc feat_common;
0935 
0936     u32 raw[11];
0937 };
0938 
0939 struct ena_admin_queue_ext_feature_desc {
0940     /* version */
0941     u8 version;
0942 
0943     u8 reserved1[3];
0944 
0945     union {
0946         struct ena_admin_queue_ext_feature_fields max_queue_ext;
0947 
0948         u32 raw[10];
0949     };
0950 };
0951 
0952 struct ena_admin_get_feat_resp {
0953     struct ena_admin_acq_common_desc acq_common_desc;
0954 
0955     union {
0956         u32 raw[14];
0957 
0958         struct ena_admin_device_attr_feature_desc dev_attr;
0959 
0960         struct ena_admin_feature_llq_desc llq;
0961 
0962         struct ena_admin_queue_feature_desc max_queue;
0963 
0964         struct ena_admin_queue_ext_feature_desc max_queue_ext;
0965 
0966         struct ena_admin_feature_aenq_desc aenq;
0967 
0968         struct ena_admin_get_feature_link_desc link;
0969 
0970         struct ena_admin_feature_offload_desc offload;
0971 
0972         struct ena_admin_feature_rss_flow_hash_function flow_hash_func;
0973 
0974         struct ena_admin_feature_rss_flow_hash_input flow_hash_input;
0975 
0976         struct ena_admin_feature_rss_ind_table ind_table;
0977 
0978         struct ena_admin_feature_intr_moder_desc intr_moderation;
0979 
0980         struct ena_admin_ena_hw_hints hw_hints;
0981     } u;
0982 };
0983 
0984 struct ena_admin_set_feat_cmd {
0985     struct ena_admin_aq_common_desc aq_common_descriptor;
0986 
0987     struct ena_admin_ctrl_buff_info control_buffer;
0988 
0989     struct ena_admin_get_set_feature_common_desc feat_common;
0990 
0991     union {
0992         u32 raw[11];
0993 
0994         /* mtu size */
0995         struct ena_admin_set_feature_mtu_desc mtu;
0996 
0997         /* host attributes */
0998         struct ena_admin_set_feature_host_attr_desc host_attr;
0999 
1000         /* AENQ configuration */
1001         struct ena_admin_feature_aenq_desc aenq;
1002 
1003         /* rss flow hash function */
1004         struct ena_admin_feature_rss_flow_hash_function flow_hash_func;
1005 
1006         /* rss flow hash input */
1007         struct ena_admin_feature_rss_flow_hash_input flow_hash_input;
1008 
1009         /* rss indirection table */
1010         struct ena_admin_feature_rss_ind_table ind_table;
1011 
1012         /* LLQ configuration */
1013         struct ena_admin_feature_llq_desc llq;
1014     } u;
1015 };
1016 
1017 struct ena_admin_set_feat_resp {
1018     struct ena_admin_acq_common_desc acq_common_desc;
1019 
1020     union {
1021         u32 raw[14];
1022     } u;
1023 };
1024 
1025 struct ena_admin_aenq_common_desc {
1026     u16 group;
1027 
1028     u16 syndrome;
1029 
1030     /* 0 : phase
1031      * 7:1 : reserved - MBZ
1032      */
1033     u8 flags;
1034 
1035     u8 reserved1[3];
1036 
1037     u32 timestamp_low;
1038 
1039     u32 timestamp_high;
1040 };
1041 
1042 /* asynchronous event notification groups */
1043 enum ena_admin_aenq_group {
1044     ENA_ADMIN_LINK_CHANGE                       = 0,
1045     ENA_ADMIN_FATAL_ERROR                       = 1,
1046     ENA_ADMIN_WARNING                           = 2,
1047     ENA_ADMIN_NOTIFICATION                      = 3,
1048     ENA_ADMIN_KEEP_ALIVE                        = 4,
1049     ENA_ADMIN_AENQ_GROUPS_NUM                   = 5,
1050 };
1051 
1052 enum ena_admin_aenq_notification_syndrome {
1053     ENA_ADMIN_UPDATE_HINTS                      = 2,
1054 };
1055 
1056 struct ena_admin_aenq_entry {
1057     struct ena_admin_aenq_common_desc aenq_common_desc;
1058 
1059     /* command specific inline data */
1060     u32 inline_data_w4[12];
1061 };
1062 
1063 struct ena_admin_aenq_link_change_desc {
1064     struct ena_admin_aenq_common_desc aenq_common_desc;
1065 
1066     /* 0 : link_status */
1067     u32 flags;
1068 };
1069 
1070 struct ena_admin_aenq_keep_alive_desc {
1071     struct ena_admin_aenq_common_desc aenq_common_desc;
1072 
1073     u32 rx_drops_low;
1074 
1075     u32 rx_drops_high;
1076 
1077     u32 tx_drops_low;
1078 
1079     u32 tx_drops_high;
1080 };
1081 
1082 struct ena_admin_ena_mmio_req_read_less_resp {
1083     u16 req_id;
1084 
1085     u16 reg_off;
1086 
1087     /* value is valid when poll is cleared */
1088     u32 reg_val;
1089 };
1090 
1091 /* aq_common_desc */
1092 #define ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK            GENMASK(11, 0)
1093 #define ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK                 BIT(0)
1094 #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT            1
1095 #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK             BIT(1)
1096 #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT   2
1097 #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK    BIT(2)
1098 
1099 /* sq */
1100 #define ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT                     5
1101 #define ENA_ADMIN_SQ_SQ_DIRECTION_MASK                      GENMASK(7, 5)
1102 
1103 /* acq_common_desc */
1104 #define ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK           GENMASK(11, 0)
1105 #define ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK                BIT(0)
1106 
1107 /* aq_create_sq_cmd */
1108 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT       5
1109 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK        GENMASK(7, 5)
1110 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK    GENMASK(3, 0)
1111 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT  4
1112 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK   GENMASK(6, 4)
1113 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK BIT(0)
1114 
1115 /* aq_create_cq_cmd */
1116 #define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT 5
1117 #define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK BIT(5)
1118 #define ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK GENMASK(4, 0)
1119 
1120 /* get_set_feature_common_desc */
1121 #define ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK   GENMASK(1, 0)
1122 
1123 /* get_feature_link_desc */
1124 #define ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK        BIT(0)
1125 #define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT        1
1126 #define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK         BIT(1)
1127 
1128 /* feature_offload_desc */
1129 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK BIT(0)
1130 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT 1
1131 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK BIT(1)
1132 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT 2
1133 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK BIT(2)
1134 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT 3
1135 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK BIT(3)
1136 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT 4
1137 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK BIT(4)
1138 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT       5
1139 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK        BIT(5)
1140 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT       6
1141 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK        BIT(6)
1142 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT        7
1143 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK         BIT(7)
1144 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK BIT(0)
1145 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT 1
1146 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK BIT(1)
1147 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT 2
1148 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK BIT(2)
1149 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT        3
1150 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK         BIT(3)
1151 
1152 /* feature_rss_flow_hash_function */
1153 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK GENMASK(7, 0)
1154 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK GENMASK(7, 0)
1155 
1156 /* feature_rss_flow_hash_input */
1157 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT 1
1158 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK  BIT(1)
1159 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT 2
1160 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK  BIT(2)
1161 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_SHIFT 1
1162 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_MASK BIT(1)
1163 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_SHIFT 2
1164 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_MASK BIT(2)
1165 
1166 /* host_info */
1167 #define ENA_ADMIN_HOST_INFO_MAJOR_MASK                      GENMASK(7, 0)
1168 #define ENA_ADMIN_HOST_INFO_MINOR_SHIFT                     8
1169 #define ENA_ADMIN_HOST_INFO_MINOR_MASK                      GENMASK(15, 8)
1170 #define ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT                 16
1171 #define ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK                  GENMASK(23, 16)
1172 #define ENA_ADMIN_HOST_INFO_MODULE_TYPE_SHIFT               24
1173 #define ENA_ADMIN_HOST_INFO_MODULE_TYPE_MASK                GENMASK(31, 24)
1174 #define ENA_ADMIN_HOST_INFO_FUNCTION_MASK                   GENMASK(2, 0)
1175 #define ENA_ADMIN_HOST_INFO_DEVICE_SHIFT                    3
1176 #define ENA_ADMIN_HOST_INFO_DEVICE_MASK                     GENMASK(7, 3)
1177 #define ENA_ADMIN_HOST_INFO_BUS_SHIFT                       8
1178 #define ENA_ADMIN_HOST_INFO_BUS_MASK                        GENMASK(15, 8)
1179 #define ENA_ADMIN_HOST_INFO_RX_OFFSET_SHIFT                 1
1180 #define ENA_ADMIN_HOST_INFO_RX_OFFSET_MASK                  BIT(1)
1181 #define ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_SHIFT      2
1182 #define ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_MASK       BIT(2)
1183 #define ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_SHIFT          3
1184 #define ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_MASK           BIT(3)
1185 #define ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_SHIFT 4
1186 #define ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_MASK BIT(4)
1187 
1188 /* aenq_common_desc */
1189 #define ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK               BIT(0)
1190 
1191 /* aenq_link_change_desc */
1192 #define ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK    BIT(0)
1193 
1194 #endif /* _ENA_ADMIN_H_ */