Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 660 lines 18 kB view raw
1/* SPDX-License-Identifier: (GPL-2.0 OR MIT) 2 * Google virtual Ethernet (gve) driver 3 * 4 * Copyright (C) 2015-2021 Google, Inc. 5 */ 6 7#ifndef _GVE_ADMINQ_H 8#define _GVE_ADMINQ_H 9 10#include <linux/build_bug.h> 11 12/* Admin queue opcodes */ 13enum gve_adminq_opcodes { 14 GVE_ADMINQ_DESCRIBE_DEVICE = 0x1, 15 GVE_ADMINQ_CONFIGURE_DEVICE_RESOURCES = 0x2, 16 GVE_ADMINQ_REGISTER_PAGE_LIST = 0x3, 17 GVE_ADMINQ_UNREGISTER_PAGE_LIST = 0x4, 18 GVE_ADMINQ_CREATE_TX_QUEUE = 0x5, 19 GVE_ADMINQ_CREATE_RX_QUEUE = 0x6, 20 GVE_ADMINQ_DESTROY_TX_QUEUE = 0x7, 21 GVE_ADMINQ_DESTROY_RX_QUEUE = 0x8, 22 GVE_ADMINQ_DECONFIGURE_DEVICE_RESOURCES = 0x9, 23 GVE_ADMINQ_CONFIGURE_RSS = 0xA, 24 GVE_ADMINQ_SET_DRIVER_PARAMETER = 0xB, 25 GVE_ADMINQ_REPORT_STATS = 0xC, 26 GVE_ADMINQ_REPORT_LINK_SPEED = 0xD, 27 GVE_ADMINQ_GET_PTYPE_MAP = 0xE, 28 GVE_ADMINQ_VERIFY_DRIVER_COMPATIBILITY = 0xF, 29 GVE_ADMINQ_QUERY_FLOW_RULES = 0x10, 30 GVE_ADMINQ_REPORT_NIC_TIMESTAMP = 0x11, 31 GVE_ADMINQ_QUERY_RSS = 0x12, 32 33 /* For commands that are larger than 56 bytes */ 34 GVE_ADMINQ_EXTENDED_COMMAND = 0xFF, 35}; 36 37/* The normal adminq command is restricted to be 56 bytes at maximum. For the 38 * longer adminq command, it is wrapped by GVE_ADMINQ_EXTENDED_COMMAND with 39 * inner opcode of gve_adminq_extended_cmd_opcodes specified. The inner command 40 * is written in the dma memory allocated by GVE_ADMINQ_EXTENDED_COMMAND. 41 */ 42enum gve_adminq_extended_cmd_opcodes { 43 GVE_ADMINQ_CONFIGURE_FLOW_RULE = 0x101, 44}; 45 46/* Admin queue status codes */ 47enum gve_adminq_statuses { 48 GVE_ADMINQ_COMMAND_UNSET = 0x0, 49 GVE_ADMINQ_COMMAND_PASSED = 0x1, 50 GVE_ADMINQ_COMMAND_ERROR_ABORTED = 0xFFFFFFF0, 51 GVE_ADMINQ_COMMAND_ERROR_ALREADY_EXISTS = 0xFFFFFFF1, 52 GVE_ADMINQ_COMMAND_ERROR_CANCELLED = 0xFFFFFFF2, 53 GVE_ADMINQ_COMMAND_ERROR_DATALOSS = 0xFFFFFFF3, 54 GVE_ADMINQ_COMMAND_ERROR_DEADLINE_EXCEEDED = 0xFFFFFFF4, 55 GVE_ADMINQ_COMMAND_ERROR_FAILED_PRECONDITION = 0xFFFFFFF5, 56 GVE_ADMINQ_COMMAND_ERROR_INTERNAL_ERROR = 0xFFFFFFF6, 57 GVE_ADMINQ_COMMAND_ERROR_INVALID_ARGUMENT = 0xFFFFFFF7, 58 GVE_ADMINQ_COMMAND_ERROR_NOT_FOUND = 0xFFFFFFF8, 59 GVE_ADMINQ_COMMAND_ERROR_OUT_OF_RANGE = 0xFFFFFFF9, 60 GVE_ADMINQ_COMMAND_ERROR_PERMISSION_DENIED = 0xFFFFFFFA, 61 GVE_ADMINQ_COMMAND_ERROR_UNAUTHENTICATED = 0xFFFFFFFB, 62 GVE_ADMINQ_COMMAND_ERROR_RESOURCE_EXHAUSTED = 0xFFFFFFFC, 63 GVE_ADMINQ_COMMAND_ERROR_UNAVAILABLE = 0xFFFFFFFD, 64 GVE_ADMINQ_COMMAND_ERROR_UNIMPLEMENTED = 0xFFFFFFFE, 65 GVE_ADMINQ_COMMAND_ERROR_UNKNOWN_ERROR = 0xFFFFFFFF, 66}; 67 68#define GVE_ADMINQ_DEVICE_DESCRIPTOR_VERSION 1 69 70/* All AdminQ command structs should be naturally packed. The static_assert 71 * calls make sure this is the case at compile time. 72 */ 73 74struct gve_adminq_describe_device { 75 __be64 device_descriptor_addr; 76 __be32 device_descriptor_version; 77 __be32 available_length; 78}; 79 80static_assert(sizeof(struct gve_adminq_describe_device) == 16); 81 82struct gve_device_descriptor { 83 __be64 max_registered_pages; 84 __be16 reserved1; 85 __be16 tx_queue_entries; 86 __be16 rx_queue_entries; 87 __be16 default_num_queues; 88 __be16 mtu; 89 __be16 counters; 90 __be16 tx_pages_per_qpl; 91 __be16 rx_pages_per_qpl; 92 u8 mac[ETH_ALEN]; 93 __be16 num_device_options; 94 __be16 total_length; 95 u8 reserved2[6]; 96}; 97 98static_assert(sizeof(struct gve_device_descriptor) == 40); 99 100struct gve_device_option { 101 __be16 option_id; 102 __be16 option_length; 103 __be32 required_features_mask; 104}; 105 106static_assert(sizeof(struct gve_device_option) == 8); 107 108struct gve_device_option_gqi_rda { 109 __be32 supported_features_mask; 110}; 111 112static_assert(sizeof(struct gve_device_option_gqi_rda) == 4); 113 114struct gve_device_option_gqi_qpl { 115 __be32 supported_features_mask; 116}; 117 118static_assert(sizeof(struct gve_device_option_gqi_qpl) == 4); 119 120struct gve_device_option_dqo_rda { 121 __be32 supported_features_mask; 122 __be32 reserved; 123}; 124 125static_assert(sizeof(struct gve_device_option_dqo_rda) == 8); 126 127struct gve_device_option_dqo_qpl { 128 __be32 supported_features_mask; 129 __be16 tx_pages_per_qpl; 130 __be16 rx_pages_per_qpl; 131}; 132 133static_assert(sizeof(struct gve_device_option_dqo_qpl) == 8); 134 135struct gve_device_option_jumbo_frames { 136 __be32 supported_features_mask; 137 __be16 max_mtu; 138 u8 padding[2]; 139}; 140 141static_assert(sizeof(struct gve_device_option_jumbo_frames) == 8); 142 143struct gve_device_option_buffer_sizes { 144 /* GVE_SUP_BUFFER_SIZES_MASK bit should be set */ 145 __be32 supported_features_mask; 146 __be16 packet_buffer_size; 147 __be16 header_buffer_size; 148}; 149 150static_assert(sizeof(struct gve_device_option_buffer_sizes) == 8); 151 152struct gve_device_option_modify_ring { 153 __be32 supported_featured_mask; 154 __be16 max_rx_ring_size; 155 __be16 max_tx_ring_size; 156 __be16 min_rx_ring_size; 157 __be16 min_tx_ring_size; 158}; 159 160static_assert(sizeof(struct gve_device_option_modify_ring) == 12); 161 162struct gve_device_option_flow_steering { 163 __be32 supported_features_mask; 164 __be32 reserved; 165 __be32 max_flow_rules; 166}; 167 168static_assert(sizeof(struct gve_device_option_flow_steering) == 12); 169 170struct gve_device_option_rss_config { 171 __be32 supported_features_mask; 172 __be16 hash_key_size; 173 __be16 hash_lut_size; 174}; 175 176static_assert(sizeof(struct gve_device_option_rss_config) == 8); 177 178struct gve_device_option_nic_timestamp { 179 __be32 supported_features_mask; 180}; 181 182static_assert(sizeof(struct gve_device_option_nic_timestamp) == 4); 183 184/* Terminology: 185 * 186 * RDA - Raw DMA Addressing - Buffers associated with SKBs are directly DMA 187 * mapped and read/updated by the device. 188 * 189 * QPL - Queue Page Lists - Driver uses bounce buffers which are DMA mapped with 190 * the device for read/write and data is copied from/to SKBs. 191 */ 192enum gve_dev_opt_id { 193 GVE_DEV_OPT_ID_GQI_RAW_ADDRESSING = 0x1, 194 GVE_DEV_OPT_ID_GQI_RDA = 0x2, 195 GVE_DEV_OPT_ID_GQI_QPL = 0x3, 196 GVE_DEV_OPT_ID_DQO_RDA = 0x4, 197 GVE_DEV_OPT_ID_MODIFY_RING = 0x6, 198 GVE_DEV_OPT_ID_DQO_QPL = 0x7, 199 GVE_DEV_OPT_ID_JUMBO_FRAMES = 0x8, 200 GVE_DEV_OPT_ID_BUFFER_SIZES = 0xa, 201 GVE_DEV_OPT_ID_FLOW_STEERING = 0xb, 202 GVE_DEV_OPT_ID_NIC_TIMESTAMP = 0xd, 203 GVE_DEV_OPT_ID_RSS_CONFIG = 0xe, 204}; 205 206enum gve_dev_opt_req_feat_mask { 207 GVE_DEV_OPT_REQ_FEAT_MASK_GQI_RAW_ADDRESSING = 0x0, 208 GVE_DEV_OPT_REQ_FEAT_MASK_GQI_RDA = 0x0, 209 GVE_DEV_OPT_REQ_FEAT_MASK_GQI_QPL = 0x0, 210 GVE_DEV_OPT_REQ_FEAT_MASK_DQO_RDA = 0x0, 211 GVE_DEV_OPT_REQ_FEAT_MASK_JUMBO_FRAMES = 0x0, 212 GVE_DEV_OPT_REQ_FEAT_MASK_DQO_QPL = 0x0, 213 GVE_DEV_OPT_REQ_FEAT_MASK_BUFFER_SIZES = 0x0, 214 GVE_DEV_OPT_REQ_FEAT_MASK_MODIFY_RING = 0x0, 215 GVE_DEV_OPT_REQ_FEAT_MASK_FLOW_STEERING = 0x0, 216 GVE_DEV_OPT_REQ_FEAT_MASK_RSS_CONFIG = 0x0, 217 GVE_DEV_OPT_REQ_FEAT_MASK_NIC_TIMESTAMP = 0x0, 218}; 219 220enum gve_sup_feature_mask { 221 GVE_SUP_MODIFY_RING_MASK = 1 << 0, 222 GVE_SUP_JUMBO_FRAMES_MASK = 1 << 2, 223 GVE_SUP_BUFFER_SIZES_MASK = 1 << 4, 224 GVE_SUP_FLOW_STEERING_MASK = 1 << 5, 225 GVE_SUP_RSS_CONFIG_MASK = 1 << 7, 226 GVE_SUP_NIC_TIMESTAMP_MASK = 1 << 8, 227}; 228 229#define GVE_DEV_OPT_LEN_GQI_RAW_ADDRESSING 0x0 230 231#define GVE_VERSION_STR_LEN 128 232 233enum gve_driver_capbility { 234 gve_driver_capability_gqi_qpl = 0, 235 gve_driver_capability_gqi_rda = 1, 236 gve_driver_capability_dqo_qpl = 2, /* reserved for future use */ 237 gve_driver_capability_dqo_rda = 3, 238 gve_driver_capability_alt_miss_compl = 4, 239 gve_driver_capability_flexible_buffer_size = 5, 240 gve_driver_capability_flexible_rss_size = 6, 241}; 242 243#define GVE_CAP1(a) BIT((int)a) 244#define GVE_CAP2(a) BIT(((int)a) - 64) 245#define GVE_CAP3(a) BIT(((int)a) - 128) 246#define GVE_CAP4(a) BIT(((int)a) - 192) 247 248#define GVE_DRIVER_CAPABILITY_FLAGS1 \ 249 (GVE_CAP1(gve_driver_capability_gqi_qpl) | \ 250 GVE_CAP1(gve_driver_capability_gqi_rda) | \ 251 GVE_CAP1(gve_driver_capability_dqo_rda) | \ 252 GVE_CAP1(gve_driver_capability_alt_miss_compl) | \ 253 GVE_CAP1(gve_driver_capability_flexible_buffer_size) | \ 254 GVE_CAP1(gve_driver_capability_flexible_rss_size)) 255 256#define GVE_DRIVER_CAPABILITY_FLAGS2 0x0 257#define GVE_DRIVER_CAPABILITY_FLAGS3 0x0 258#define GVE_DRIVER_CAPABILITY_FLAGS4 0x0 259 260struct gve_adminq_extended_command { 261 __be32 inner_opcode; 262 __be32 inner_length; 263 __be64 inner_command_addr; 264}; 265 266static_assert(sizeof(struct gve_adminq_extended_command) == 16); 267 268struct gve_driver_info { 269 u8 os_type; /* 0x01 = Linux */ 270 u8 driver_major; 271 u8 driver_minor; 272 u8 driver_sub; 273 __be32 os_version_major; 274 __be32 os_version_minor; 275 __be32 os_version_sub; 276 __be64 driver_capability_flags[4]; 277 u8 os_version_str1[GVE_VERSION_STR_LEN]; 278 u8 os_version_str2[GVE_VERSION_STR_LEN]; 279}; 280 281struct gve_adminq_verify_driver_compatibility { 282 __be64 driver_info_len; 283 __be64 driver_info_addr; 284}; 285 286static_assert(sizeof(struct gve_adminq_verify_driver_compatibility) == 16); 287 288struct gve_adminq_configure_device_resources { 289 __be64 counter_array; 290 __be64 irq_db_addr; 291 __be32 num_counters; 292 __be32 num_irq_dbs; 293 __be32 irq_db_stride; 294 __be32 ntfy_blk_msix_base_idx; 295 u8 queue_format; 296 u8 padding[7]; 297}; 298 299static_assert(sizeof(struct gve_adminq_configure_device_resources) == 40); 300 301struct gve_adminq_register_page_list { 302 __be32 page_list_id; 303 __be32 num_pages; 304 __be64 page_address_list_addr; 305 __be64 page_size; 306}; 307 308static_assert(sizeof(struct gve_adminq_register_page_list) == 24); 309 310struct gve_adminq_unregister_page_list { 311 __be32 page_list_id; 312}; 313 314static_assert(sizeof(struct gve_adminq_unregister_page_list) == 4); 315 316#define GVE_RAW_ADDRESSING_QPL_ID 0xFFFFFFFF 317 318struct gve_adminq_create_tx_queue { 319 __be32 queue_id; 320 __be32 reserved; 321 __be64 queue_resources_addr; 322 __be64 tx_ring_addr; 323 __be32 queue_page_list_id; 324 __be32 ntfy_id; 325 __be64 tx_comp_ring_addr; 326 __be16 tx_ring_size; 327 __be16 tx_comp_ring_size; 328 u8 padding[4]; 329}; 330 331static_assert(sizeof(struct gve_adminq_create_tx_queue) == 48); 332 333struct gve_adminq_create_rx_queue { 334 __be32 queue_id; 335 __be32 index; 336 __be32 reserved; 337 __be32 ntfy_id; 338 __be64 queue_resources_addr; 339 __be64 rx_desc_ring_addr; 340 __be64 rx_data_ring_addr; 341 __be32 queue_page_list_id; 342 __be16 rx_ring_size; 343 __be16 packet_buffer_size; 344 __be16 rx_buff_ring_size; 345 u8 enable_rsc; 346 u8 padding1; 347 __be16 header_buffer_size; 348 u8 padding2[2]; 349}; 350 351static_assert(sizeof(struct gve_adminq_create_rx_queue) == 56); 352 353/* Queue resources that are shared with the device */ 354struct gve_queue_resources { 355 union { 356 struct { 357 __be32 db_index; /* Device -> Guest */ 358 __be32 counter_index; /* Device -> Guest */ 359 }; 360 u8 reserved[64]; 361 }; 362}; 363 364static_assert(sizeof(struct gve_queue_resources) == 64); 365 366struct gve_adminq_destroy_tx_queue { 367 __be32 queue_id; 368}; 369 370static_assert(sizeof(struct gve_adminq_destroy_tx_queue) == 4); 371 372struct gve_adminq_destroy_rx_queue { 373 __be32 queue_id; 374}; 375 376static_assert(sizeof(struct gve_adminq_destroy_rx_queue) == 4); 377 378/* GVE Set Driver Parameter Types */ 379enum gve_set_driver_param_types { 380 GVE_SET_PARAM_MTU = 0x1, 381}; 382 383struct gve_adminq_set_driver_parameter { 384 __be32 parameter_type; 385 u8 reserved[4]; 386 __be64 parameter_value; 387}; 388 389static_assert(sizeof(struct gve_adminq_set_driver_parameter) == 16); 390 391struct gve_adminq_report_stats { 392 __be64 stats_report_len; 393 __be64 stats_report_addr; 394 __be64 interval; 395}; 396 397static_assert(sizeof(struct gve_adminq_report_stats) == 24); 398 399struct gve_adminq_report_link_speed { 400 __be64 link_speed_address; 401}; 402 403static_assert(sizeof(struct gve_adminq_report_link_speed) == 8); 404 405struct gve_adminq_report_nic_ts { 406 __be64 nic_ts_report_len; 407 __be64 nic_ts_report_addr; 408}; 409 410static_assert(sizeof(struct gve_adminq_report_nic_ts) == 16); 411 412struct gve_nic_ts_report { 413 __be64 nic_timestamp; /* NIC clock in nanoseconds */ 414 __be64 reserved1; 415 __be64 reserved2; 416 __be64 reserved3; 417 __be64 reserved4; 418}; 419 420struct stats { 421 __be32 stat_name; 422 __be32 queue_id; 423 __be64 value; 424}; 425 426static_assert(sizeof(struct stats) == 16); 427 428struct gve_stats_report { 429 __be64 written_count; 430 struct stats stats[]; 431}; 432 433static_assert(sizeof(struct gve_stats_report) == 8); 434 435enum gve_stat_names { 436 // stats from gve 437 TX_WAKE_CNT = 1, 438 TX_STOP_CNT = 2, 439 TX_FRAMES_SENT = 3, 440 TX_BYTES_SENT = 4, 441 TX_LAST_COMPLETION_PROCESSED = 5, 442 RX_NEXT_EXPECTED_SEQUENCE = 6, 443 RX_BUFFERS_POSTED = 7, 444 TX_TIMEOUT_CNT = 8, 445 // stats from NIC 446 RX_QUEUE_DROP_CNT = 65, 447 RX_NO_BUFFERS_POSTED = 66, 448 RX_DROPS_PACKET_OVER_MRU = 67, 449 RX_DROPS_INVALID_CHECKSUM = 68, 450}; 451 452enum gve_l3_type { 453 /* Must be zero so zero initialized LUT is unknown. */ 454 GVE_L3_TYPE_UNKNOWN = 0, 455 GVE_L3_TYPE_OTHER, 456 GVE_L3_TYPE_IPV4, 457 GVE_L3_TYPE_IPV6, 458}; 459 460enum gve_l4_type { 461 /* Must be zero so zero initialized LUT is unknown. */ 462 GVE_L4_TYPE_UNKNOWN = 0, 463 GVE_L4_TYPE_OTHER, 464 GVE_L4_TYPE_TCP, 465 GVE_L4_TYPE_UDP, 466 GVE_L4_TYPE_ICMP, 467 GVE_L4_TYPE_SCTP, 468}; 469 470/* These are control path types for PTYPE which are the same as the data path 471 * types. 472 */ 473struct gve_ptype_entry { 474 u8 l3_type; 475 u8 l4_type; 476}; 477 478struct gve_ptype_map { 479 struct gve_ptype_entry ptypes[GVE_NUM_PTYPES]; /* PTYPES are always 10 bits. */ 480}; 481 482struct gve_adminq_get_ptype_map { 483 __be64 ptype_map_len; 484 __be64 ptype_map_addr; 485}; 486 487/* Flow-steering related definitions */ 488enum gve_adminq_flow_rule_cfg_opcode { 489 GVE_FLOW_RULE_CFG_ADD = 0, 490 GVE_FLOW_RULE_CFG_DEL = 1, 491 GVE_FLOW_RULE_CFG_RESET = 2, 492}; 493 494enum gve_adminq_flow_rule_query_opcode { 495 GVE_FLOW_RULE_QUERY_RULES = 0, 496 GVE_FLOW_RULE_QUERY_IDS = 1, 497 GVE_FLOW_RULE_QUERY_STATS = 2, 498}; 499 500enum gve_adminq_flow_type { 501 GVE_FLOW_TYPE_TCPV4, 502 GVE_FLOW_TYPE_UDPV4, 503 GVE_FLOW_TYPE_SCTPV4, 504 GVE_FLOW_TYPE_AHV4, 505 GVE_FLOW_TYPE_ESPV4, 506 GVE_FLOW_TYPE_TCPV6, 507 GVE_FLOW_TYPE_UDPV6, 508 GVE_FLOW_TYPE_SCTPV6, 509 GVE_FLOW_TYPE_AHV6, 510 GVE_FLOW_TYPE_ESPV6, 511}; 512 513/* Flow-steering command */ 514struct gve_adminq_flow_rule { 515 __be16 flow_type; 516 __be16 action; /* RX queue id */ 517 struct gve_flow_spec key; 518 struct gve_flow_spec mask; 519}; 520 521struct gve_adminq_configure_flow_rule { 522 __be16 opcode; 523 u8 padding[2]; 524 struct gve_adminq_flow_rule rule; 525 __be32 location; 526}; 527 528static_assert(sizeof(struct gve_adminq_configure_flow_rule) == 92); 529 530struct gve_query_flow_rules_descriptor { 531 __be32 num_flow_rules; 532 __be32 max_flow_rules; 533 __be32 num_queried_rules; 534 __be32 total_length; 535}; 536 537struct gve_adminq_queried_flow_rule { 538 __be32 location; 539 struct gve_adminq_flow_rule flow_rule; 540}; 541 542struct gve_adminq_query_flow_rules { 543 __be16 opcode; 544 u8 padding[2]; 545 __be32 starting_rule_id; 546 __be64 available_length; /* The dma memory length that the driver allocated */ 547 __be64 rule_descriptor_addr; /* The dma memory address */ 548}; 549 550static_assert(sizeof(struct gve_adminq_query_flow_rules) == 24); 551 552enum gve_rss_hash_type { 553 GVE_RSS_HASH_IPV4, 554 GVE_RSS_HASH_TCPV4, 555 GVE_RSS_HASH_IPV6, 556 GVE_RSS_HASH_IPV6_EX, 557 GVE_RSS_HASH_TCPV6, 558 GVE_RSS_HASH_TCPV6_EX, 559 GVE_RSS_HASH_UDPV4, 560 GVE_RSS_HASH_UDPV6, 561 GVE_RSS_HASH_UDPV6_EX, 562}; 563 564struct gve_adminq_configure_rss { 565 __be16 hash_types; 566 u8 hash_alg; 567 u8 reserved; 568 __be16 hash_key_size; 569 __be16 hash_lut_size; 570 __be64 hash_key_addr; 571 __be64 hash_lut_addr; 572}; 573 574static_assert(sizeof(struct gve_adminq_configure_rss) == 24); 575 576struct gve_query_rss_descriptor { 577 __be32 total_length; 578 __be16 hash_types; 579 u8 hash_alg; 580 u8 reserved; 581}; 582 583struct gve_adminq_query_rss { 584 __be64 available_length; 585 __be64 rss_descriptor_addr; 586}; 587 588static_assert(sizeof(struct gve_adminq_query_rss) == 16); 589 590union gve_adminq_command { 591 struct { 592 __be32 opcode; 593 __be32 status; 594 union { 595 struct gve_adminq_configure_device_resources 596 configure_device_resources; 597 struct gve_adminq_create_tx_queue create_tx_queue; 598 struct gve_adminq_create_rx_queue create_rx_queue; 599 struct gve_adminq_destroy_tx_queue destroy_tx_queue; 600 struct gve_adminq_destroy_rx_queue destroy_rx_queue; 601 struct gve_adminq_describe_device describe_device; 602 struct gve_adminq_register_page_list reg_page_list; 603 struct gve_adminq_unregister_page_list unreg_page_list; 604 struct gve_adminq_set_driver_parameter set_driver_param; 605 struct gve_adminq_report_stats report_stats; 606 struct gve_adminq_report_link_speed report_link_speed; 607 struct gve_adminq_get_ptype_map get_ptype_map; 608 struct gve_adminq_verify_driver_compatibility 609 verify_driver_compatibility; 610 struct gve_adminq_query_flow_rules query_flow_rules; 611 struct gve_adminq_configure_rss configure_rss; 612 struct gve_adminq_query_rss query_rss; 613 struct gve_adminq_report_nic_ts report_nic_ts; 614 struct gve_adminq_extended_command extended_command; 615 }; 616 }; 617 u8 reserved[64]; 618}; 619 620static_assert(sizeof(union gve_adminq_command) == 64); 621 622int gve_adminq_alloc(struct device *dev, struct gve_priv *priv); 623void gve_adminq_free(struct device *dev, struct gve_priv *priv); 624void gve_adminq_release(struct gve_priv *priv); 625int gve_adminq_describe_device(struct gve_priv *priv); 626int gve_adminq_configure_device_resources(struct gve_priv *priv, 627 dma_addr_t counter_array_bus_addr, 628 u32 num_counters, 629 dma_addr_t db_array_bus_addr, 630 u32 num_ntfy_blks); 631int gve_adminq_deconfigure_device_resources(struct gve_priv *priv); 632int gve_adminq_create_tx_queues(struct gve_priv *priv, u32 start_id, u32 num_queues); 633int gve_adminq_destroy_tx_queues(struct gve_priv *priv, u32 start_id, u32 num_queues); 634int gve_adminq_create_single_rx_queue(struct gve_priv *priv, u32 queue_index); 635int gve_adminq_create_rx_queues(struct gve_priv *priv, u32 num_queues); 636int gve_adminq_destroy_single_rx_queue(struct gve_priv *priv, u32 queue_index); 637int gve_adminq_destroy_rx_queues(struct gve_priv *priv, u32 queue_id); 638int gve_adminq_register_page_list(struct gve_priv *priv, 639 struct gve_queue_page_list *qpl); 640int gve_adminq_unregister_page_list(struct gve_priv *priv, u32 page_list_id); 641int gve_adminq_report_stats(struct gve_priv *priv, u64 stats_report_len, 642 dma_addr_t stats_report_addr, u64 interval); 643int gve_adminq_verify_driver_compatibility(struct gve_priv *priv, 644 u64 driver_info_len, 645 dma_addr_t driver_info_addr); 646int gve_adminq_report_link_speed(struct gve_priv *priv); 647int gve_adminq_add_flow_rule(struct gve_priv *priv, struct gve_adminq_flow_rule *rule, u32 loc); 648int gve_adminq_del_flow_rule(struct gve_priv *priv, u32 loc); 649int gve_adminq_reset_flow_rules(struct gve_priv *priv); 650int gve_adminq_query_flow_rules(struct gve_priv *priv, u16 query_opcode, u32 starting_loc); 651int gve_adminq_configure_rss(struct gve_priv *priv, struct ethtool_rxfh_param *rxfh); 652int gve_adminq_query_rss_config(struct gve_priv *priv, struct ethtool_rxfh_param *rxfh); 653int gve_adminq_report_nic_ts(struct gve_priv *priv, 654 dma_addr_t nic_ts_report_addr); 655 656struct gve_ptype_lut; 657int gve_adminq_get_ptype_map_dqo(struct gve_priv *priv, 658 struct gve_ptype_lut *ptype_lut); 659 660#endif /* _GVE_ADMINQ_H */