/* SPDX-License-Identifier: GPL-2.0-only */
/* Copyright (c) 2019-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved */

#ifndef ETHER_EXPORT_H
#define ETHER_EXPORT_H

#include <nvethernetrm_export.h>
/**
 * @addtogroup private IOCTL related info
 *
 * @brief MACRO are defined for driver supported
 * private IOCTLs. These IOCTLs can be called using
 * SIOCDEVPRIVATE custom ioctl command.
 * @{
 */
/** To set HW AVB configuration from user application */
#define ETHER_AVB_ALGORITHM		27
/** To get current configuration in HW */
#define ETHER_GET_AVB_ALGORITHM		46
/** To configure EST(802.1 bv) in HW */
#define ETHER_CONFIG_EST		49
/** For configure FPE (802.1 bu + 803.2 br) in HW */
#define ETHER_CONFIG_FPE		50
/* FRP command */
#define ETHER_CONFIG_FRP_CMD		51
/** To configure L2 Filter (Only with Ethernet virtualization) */
#define ETHER_L2_ADDR			61
/** @} */

/**
 * @brief Structure for L2 filters input
 */
struct ether_l2_filter {
	/** indicates enable(1)/disable(0) L2 filter */

	nveu32_t en_dis;
	/** Indicates the index of the filter to be modified.
	 * Filter index must be between 0 - 31 */
	nveu32_t index;
	/** Ethernet MAC address to be added */
	nveu8_t mac_addr[OSI_ETH_ALEN];
	/** packet duplication */
	nveu32_t pkt_dup;
	/** dma channel */
	nveu32_t dma_chan;
};

/**
 * @brief struct ether_exported_ifr_data - Private data of struct ifreq
 */
struct ether_exported_ifr_data {
	/** Flags used for specific ioctl - like enable/disable */
	nveu32_t if_flags;
	/** qinx: Queue index to be used for certain ioctls */
	nveu32_t qinx;
	/** The private ioctl command number */
	nveu32_t ifcmd;
	/** Used to query the connected link speed */
	nveu32_t connected_speed;
	/** The return value of IOCTL handler func */
	nve32_t command_error;
	/** IOCTL cmd specific structure pointer */
	void *ptr;
};
#endif /* ETHER_EXPORT_H */
