0001
0002
0003
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
0027 ENA_ADMIN_ILLEGAL_PARAMETER = 5,
0028 ENA_ADMIN_UNKNOWN_ERROR = 6,
0029 ENA_ADMIN_RESOURCE_BUSY = 7,
0030 };
0031
0032
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
0052 enum ena_admin_aq_caps_id {
0053 ENA_ADMIN_ENI_STATS = 0,
0054 };
0055
0056 enum ena_admin_placement_policy_type {
0057
0058 ENA_ADMIN_PLACEMENT_POLICY_HOST = 1,
0059
0060
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
0080 ENA_ADMIN_COMPLETION_POLICY_DESC = 0,
0081
0082 ENA_ADMIN_COMPLETION_POLICY_DESC_ON_DEMAND = 1,
0083
0084
0085
0086 ENA_ADMIN_COMPLETION_POLICY_HEAD_ON_DEMAND = 2,
0087
0088
0089
0090 ENA_ADMIN_COMPLETION_POLICY_HEAD = 3,
0091 };
0092
0093
0094
0095
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
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
0111
0112
0113 u16 command_id;
0114
0115
0116 u8 opcode;
0117
0118
0119
0120
0121
0122
0123
0124
0125 u8 flags;
0126 };
0127
0128
0129
0130
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
0142
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
0163
0164
0165
0166 u16 command;
0167
0168 u8 status;
0169
0170
0171
0172
0173 u8 flags;
0174
0175 u16 extended_status;
0176
0177
0178
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
0193
0194
0195 u8 sq_identity;
0196
0197 u8 reserved8_w1;
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214 u8 sq_caps_2;
0215
0216
0217
0218
0219
0220
0221 u8 sq_caps_3;
0222
0223
0224
0225
0226 u16 cq_idx;
0227
0228
0229 u16 sq_depth;
0230
0231
0232
0233
0234 struct ena_common_mem_addr sq_ba;
0235
0236
0237
0238
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
0260 u32 sq_doorbell_offset;
0261
0262
0263
0264
0265 u32 llq_descriptors_offset;
0266
0267
0268
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
0287
0288
0289
0290
0291 u8 cq_caps_1;
0292
0293
0294
0295
0296
0297 u8 cq_caps_2;
0298
0299
0300 u16 cq_depth;
0301
0302
0303 u32 msix_vector;
0304
0305
0306
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
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
0339
0340
0341 struct ena_admin_aq_get_stats_cmd {
0342 struct ena_admin_aq_common_desc aq_common_descriptor;
0343
0344 union {
0345
0346 u32 inline_data_w1[3];
0347
0348 struct ena_admin_ctrl_buff_info control_buffer;
0349 } u;
0350
0351
0352 u8 type;
0353
0354
0355 u8 scope;
0356
0357 u16 reserved3;
0358
0359
0360 u16 queue_idx;
0361
0362
0363
0364
0365 u16 device_id;
0366 };
0367
0368
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
0396 struct ena_admin_eni_stats {
0397
0398
0399
0400 u64 bw_in_allowance_exceeded;
0401
0402
0403
0404
0405 u64 bw_out_allowance_exceeded;
0406
0407
0408 u64 pps_allowance_exceeded;
0409
0410
0411
0412
0413
0414 u64 conntrack_allowance_exceeded;
0415
0416
0417
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
0436
0437
0438
0439 u8 flags;
0440
0441
0442 u8 feature_id;
0443
0444
0445
0446
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
0459
0460
0461 u32 supported_features;
0462
0463
0464
0465
0466 u32 capabilities;
0467
0468
0469 u32 phys_addr_width;
0470
0471
0472 u32 virt_addr_width;
0473
0474
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
0484 ENA_ADMIN_INLINE_HEADER = 1,
0485
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
0504
0505
0506
0507
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
0521 u16 supported_flags;
0522
0523
0524 u16 max_tx_burst_size;
0525 };
0526
0527 struct ena_admin_accel_mode_set {
0528
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
0550
0551
0552 u16 header_location_ctrl_supported;
0553
0554
0555 u16 header_location_ctrl_enabled;
0556
0557
0558
0559
0560
0561
0562 u16 entry_size_ctrl_supported;
0563
0564
0565 u16 entry_size_ctrl_enabled;
0566
0567
0568
0569
0570
0571
0572
0573
0574 u16 desc_num_before_header_supported;
0575
0576
0577 u16 desc_num_before_header_enabled;
0578
0579
0580
0581
0582 u16 descriptors_stride_ctrl_supported;
0583
0584
0585 u16 descriptors_stride_ctrl_enabled;
0586
0587
0588 u32 reserved1;
0589
0590
0591
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
0616
0617
0618 u16 max_per_packet_tx_descs;
0619
0620
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
0640
0641
0642 u16 max_packet_tx_descs;
0643
0644
0645 u16 max_packet_rx_descs;
0646 };
0647
0648 struct ena_admin_set_feature_mtu_desc {
0649
0650 u32 mtu;
0651 };
0652
0653 struct ena_admin_set_feature_host_attr_desc {
0654
0655
0656
0657 struct ena_common_mem_addr os_info_ba;
0658
0659
0660
0661
0662 struct ena_common_mem_addr debug_ba;
0663
0664
0665 u32 debug_area_size;
0666 };
0667
0668 struct ena_admin_feature_intr_moder_desc {
0669
0670 u16 intr_delay_resolution;
0671
0672 u16 reserved;
0673 };
0674
0675 struct ena_admin_get_feature_link_desc {
0676
0677 u32 speed;
0678
0679
0680 u32 supported;
0681
0682
0683
0684
0685
0686 u32 flags;
0687 };
0688
0689 struct ena_admin_feature_aenq_desc {
0690
0691 u32 supported_groups;
0692
0693
0694 u32 enabled_groups;
0695 };
0696
0697 struct ena_admin_feature_offload_desc {
0698
0699
0700
0701
0702
0703
0704
0705
0706
0707
0708
0709 u32 tx;
0710
0711
0712
0713
0714
0715
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
0737 u32 supported_func;
0738
0739
0740
0741
0742 u32 selected_func;
0743
0744
0745 u32 init_val;
0746 };
0747
0748
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
0759 ENA_ADMIN_RSS_TCP6_EX = 8,
0760
0761 ENA_ADMIN_RSS_IP6_EX = 9,
0762 ENA_ADMIN_RSS_PROTO_NUM = 16,
0763 };
0764
0765
0766 enum ena_admin_flow_hash_fields {
0767
0768 ENA_ADMIN_RSS_L2_DA = BIT(0),
0769
0770 ENA_ADMIN_RSS_L2_SA = BIT(1),
0771
0772 ENA_ADMIN_RSS_L3_DA = BIT(2),
0773
0774 ENA_ADMIN_RSS_L3_SA = BIT(3),
0775
0776 ENA_ADMIN_RSS_L4_DP = BIT(4),
0777
0778 ENA_ADMIN_RSS_L4_SP = BIT(5),
0779 };
0780
0781 struct ena_admin_proto_input {
0782
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
0800
0801
0802
0803
0804
0805 u16 supported_input_sort;
0806
0807
0808
0809
0810
0811
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
0828 u32 os_type;
0829
0830
0831 u8 os_dist_str[128];
0832
0833
0834 u32 os_dist;
0835
0836
0837 u8 kernel_ver_str[32];
0838
0839
0840 u32 kernel_ver;
0841
0842
0843
0844
0845
0846
0847 u32 driver_version;
0848
0849
0850 u32 supported_network_features[2];
0851
0852
0853 u16 ena_spec_version;
0854
0855
0856
0857
0858
0859
0860 u16 bdf;
0861
0862
0863 u16 num_cpus;
0864
0865 u16 reserved;
0866
0867
0868
0869
0870
0871
0872
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
0885 u16 min_size;
0886
0887
0888 u16 max_size;
0889
0890
0891 u16 size;
0892
0893 u16 reserved;
0894
0895
0896 u32 inline_index;
0897
0898
0899
0900
0901 struct ena_admin_rss_ind_table_entry inline_entry;
0902 };
0903
0904
0905 struct ena_admin_ena_hw_hints {
0906
0907 u16 mmio_read_timeout;
0908
0909
0910 u16 driver_watchdog_timeout;
0911
0912
0913 u16 missing_tx_completion_timeout;
0914
0915 u16 missed_tx_completion_count_threshold_to_reset;
0916
0917
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
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
0995 struct ena_admin_set_feature_mtu_desc mtu;
0996
0997
0998 struct ena_admin_set_feature_host_attr_desc host_attr;
0999
1000
1001 struct ena_admin_feature_aenq_desc aenq;
1002
1003
1004 struct ena_admin_feature_rss_flow_hash_function flow_hash_func;
1005
1006
1007 struct ena_admin_feature_rss_flow_hash_input flow_hash_input;
1008
1009
1010 struct ena_admin_feature_rss_ind_table ind_table;
1011
1012
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
1031
1032
1033 u8 flags;
1034
1035 u8 reserved1[3];
1036
1037 u32 timestamp_low;
1038
1039 u32 timestamp_high;
1040 };
1041
1042
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
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
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
1088 u32 reg_val;
1089 };
1090
1091
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
1100 #define ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT 5
1101 #define ENA_ADMIN_SQ_SQ_DIRECTION_MASK GENMASK(7, 5)
1102
1103
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
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
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
1121 #define ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK GENMASK(1, 0)
1122
1123
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
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
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
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
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
1189 #define ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK BIT(0)
1190
1191
1192 #define ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK BIT(0)
1193
1194 #endif