File Index
Files and directories
Sign in
FILE

gve_adminq.h

File preview with syntax highlighting.

linux-6.19.14/drivers/net/ethernet/google/gve/gve_adminq.h C
  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 */
~/ Read-only file preview.