linux/drivers/net/ethernet/google/gve/gve_adminq.h

/* SPDX-License-Identifier: (GPL-2.0 OR MIT)
 * Google virtual Ethernet (gve) driver
 *
 * Copyright (C) 2015-2021 Google, Inc.
 */

#ifndef _GVE_ADMINQ_H
#define _GVE_ADMINQ_H

#include <linux/build_bug.h>

/* Admin queue opcodes */
enum gve_adminq_opcodes {};

/* The normal adminq command is restricted to be 56 bytes at maximum. For the
 * longer adminq command, it is wrapped by GVE_ADMINQ_EXTENDED_COMMAND with
 * inner opcode of gve_adminq_extended_cmd_opcodes specified. The inner command
 * is written in the dma memory allocated by GVE_ADMINQ_EXTENDED_COMMAND.
 */
enum gve_adminq_extended_cmd_opcodes {};

/* Admin queue status codes */
enum gve_adminq_statuses {};

#define GVE_ADMINQ_DEVICE_DESCRIPTOR_VERSION

/* All AdminQ command structs should be naturally packed. The static_assert
 * calls make sure this is the case at compile time.
 */

struct gve_adminq_describe_device {};

static_assert();

struct gve_device_descriptor {};

static_assert();

struct gve_device_option {};

static_assert();

struct gve_device_option_gqi_rda {};

static_assert();

struct gve_device_option_gqi_qpl {};

static_assert();

struct gve_device_option_dqo_rda {};

static_assert();

struct gve_device_option_dqo_qpl {};

static_assert();

struct gve_device_option_jumbo_frames {};

static_assert();

struct gve_device_option_buffer_sizes {};

static_assert();

struct gve_device_option_modify_ring {};

static_assert();

struct gve_device_option_flow_steering {};

static_assert();

/* Terminology:
 *
 * RDA - Raw DMA Addressing - Buffers associated with SKBs are directly DMA
 *       mapped and read/updated by the device.
 *
 * QPL - Queue Page Lists - Driver uses bounce buffers which are DMA mapped with
 *       the device for read/write and data is copied from/to SKBs.
 */
enum gve_dev_opt_id {};

enum gve_dev_opt_req_feat_mask {};

enum gve_sup_feature_mask {};

#define GVE_DEV_OPT_LEN_GQI_RAW_ADDRESSING

#define GVE_VERSION_STR_LEN

enum gve_driver_capbility {};

#define GVE_CAP1(a)
#define GVE_CAP2(a)
#define GVE_CAP3(a)
#define GVE_CAP4(a)

#define GVE_DRIVER_CAPABILITY_FLAGS1

#define GVE_DRIVER_CAPABILITY_FLAGS2
#define GVE_DRIVER_CAPABILITY_FLAGS3
#define GVE_DRIVER_CAPABILITY_FLAGS4

struct gve_adminq_extended_command {};

static_assert();

struct gve_driver_info {};

struct gve_adminq_verify_driver_compatibility {};

static_assert();

struct gve_adminq_configure_device_resources {};

static_assert();

struct gve_adminq_register_page_list {};

static_assert();

struct gve_adminq_unregister_page_list {};

static_assert();

#define GVE_RAW_ADDRESSING_QPL_ID

struct gve_adminq_create_tx_queue {};

static_assert();

struct gve_adminq_create_rx_queue {};

static_assert();

/* Queue resources that are shared with the device */
struct gve_queue_resources {};

static_assert();

struct gve_adminq_destroy_tx_queue {};

static_assert();

struct gve_adminq_destroy_rx_queue {};

static_assert();

/* GVE Set Driver Parameter Types */
enum gve_set_driver_param_types {};

struct gve_adminq_set_driver_parameter {};

static_assert();

struct gve_adminq_report_stats {};

static_assert();

struct gve_adminq_report_link_speed {};

static_assert();

struct stats {};

static_assert();

struct gve_stats_report {};

static_assert();

enum gve_stat_names {};

enum gve_l3_type {};

enum gve_l4_type {};

/* These are control path types for PTYPE which are the same as the data path
 * types.
 */
struct gve_ptype_entry {};

struct gve_ptype_map {};

struct gve_adminq_get_ptype_map {};

/* Flow-steering related definitions */
enum gve_adminq_flow_rule_cfg_opcode {};

enum gve_adminq_flow_rule_query_opcode {};

enum gve_adminq_flow_type {};

/* Flow-steering command */
struct gve_adminq_flow_rule {};

struct gve_adminq_configure_flow_rule {};

static_assert();

struct gve_query_flow_rules_descriptor {};

struct gve_adminq_queried_flow_rule {};

struct gve_adminq_query_flow_rules {};

static_assert();

gve_adminq_command;

static_assert();

int gve_adminq_alloc(struct device *dev, struct gve_priv *priv);
void gve_adminq_free(struct device *dev, struct gve_priv *priv);
void gve_adminq_release(struct gve_priv *priv);
int gve_adminq_describe_device(struct gve_priv *priv);
int gve_adminq_configure_device_resources(struct gve_priv *priv,
					  dma_addr_t counter_array_bus_addr,
					  u32 num_counters,
					  dma_addr_t db_array_bus_addr,
					  u32 num_ntfy_blks);
int gve_adminq_deconfigure_device_resources(struct gve_priv *priv);
int gve_adminq_create_tx_queues(struct gve_priv *priv, u32 start_id, u32 num_queues);
int gve_adminq_destroy_tx_queues(struct gve_priv *priv, u32 start_id, u32 num_queues);
int gve_adminq_create_single_rx_queue(struct gve_priv *priv, u32 queue_index);
int gve_adminq_create_rx_queues(struct gve_priv *priv, u32 num_queues);
int gve_adminq_destroy_single_rx_queue(struct gve_priv *priv, u32 queue_index);
int gve_adminq_destroy_rx_queues(struct gve_priv *priv, u32 queue_id);
int gve_adminq_register_page_list(struct gve_priv *priv,
				  struct gve_queue_page_list *qpl);
int gve_adminq_unregister_page_list(struct gve_priv *priv, u32 page_list_id);
int gve_adminq_set_mtu(struct gve_priv *priv, u64 mtu);
int gve_adminq_report_stats(struct gve_priv *priv, u64 stats_report_len,
			    dma_addr_t stats_report_addr, u64 interval);
int gve_adminq_verify_driver_compatibility(struct gve_priv *priv,
					   u64 driver_info_len,
					   dma_addr_t driver_info_addr);
int gve_adminq_report_link_speed(struct gve_priv *priv);
int gve_adminq_add_flow_rule(struct gve_priv *priv, struct gve_adminq_flow_rule *rule, u32 loc);
int gve_adminq_del_flow_rule(struct gve_priv *priv, u32 loc);
int gve_adminq_reset_flow_rules(struct gve_priv *priv);
int gve_adminq_query_flow_rules(struct gve_priv *priv, u16 query_opcode, u32 starting_loc);

struct gve_ptype_lut;
int gve_adminq_get_ptype_map_dqo(struct gve_priv *priv,
				 struct gve_ptype_lut *ptype_lut);

#endif /* _GVE_ADMINQ_H */