linux/drivers/net/ethernet/intel/idpf/virtchnl2_lan_desc.h

/* SPDX-License-Identifier: GPL-2.0-only */
/* Copyright (C) 2023 Intel Corporation */

#ifndef _VIRTCHNL2_LAN_DESC_H_
#define _VIRTCHNL2_LAN_DESC_H_

#include <linux/bits.h>

/* This is an interface definition file where existing enums and their values
 * must remain unchanged over time, so we specify explicit values for all enums.
 */

/* Transmit descriptor ID flags
 */
enum virtchnl2_tx_desc_ids {};

/* Receive descriptor IDs */
enum virtchnl2_rx_desc_ids {};

/* Receive descriptor ID bitmasks */
#define VIRTCHNL2_RXDID_M(bit)

enum virtchnl2_rx_desc_id_bitmasks {};

/* For splitq virtchnl2_rx_flex_desc_adv_nic_3 desc members */
#define VIRTCHNL2_RX_FLEX_DESC_ADV_RXDID_M
#define VIRTCHNL2_RX_FLEX_DESC_ADV_UMBCAST_M
#define VIRTCHNL2_RX_FLEX_DESC_ADV_PTYPE_M
#define VIRTCHNL2_RX_FLEX_DESC_ADV_RAW_CSUM_INV_S
#define VIRTCHNL2_RX_FLEX_DESC_ADV_RAW_CSUM_INV_M
#define VIRTCHNL2_RX_FLEX_DESC_ADV_FF0_M
#define VIRTCHNL2_RX_FLEX_DESC_ADV_LEN_PBUF_M
#define VIRTCHNL2_RX_FLEX_DESC_ADV_GEN_S
#define VIRTCHNL2_RX_FLEX_DESC_ADV_GEN_M
#define VIRTCHNL2_RX_FLEX_DESC_ADV_BUFQ_ID_S
#define VIRTCHNL2_RX_FLEX_DESC_ADV_BUFQ_ID_M
#define VIRTCHNL2_RX_FLEX_DESC_ADV_LEN_HDR_M
#define VIRTCHNL2_RX_FLEX_DESC_ADV_RSC_S
#define VIRTCHNL2_RX_FLEX_DESC_ADV_RSC_M
#define VIRTCHNL2_RX_FLEX_DESC_ADV_SPH_S
#define VIRTCHNL2_RX_FLEX_DESC_ADV_SPH_M
#define VIRTCHNL2_RX_FLEX_DESC_ADV_FF1_S
#define VIRTCHNL2_RX_FLEX_DESC_ADV_FF1_M
#define VIRTCHNL2_RX_FLEX_DESC_ADV_MISS_S
#define VIRTCHNL2_RX_FLEX_DESC_ADV_MISS_M

/* Bitmasks for splitq virtchnl2_rx_flex_desc_adv_nic_3 */
enum virtchl2_rx_flex_desc_adv_status_error_0_qw1_bits {};

/* Bitmasks for splitq virtchnl2_rx_flex_desc_adv_nic_3 */
enum virtchnl2_rx_flex_desc_adv_status_error_0_qw0_bits {};

/* Bitmasks for splitq virtchnl2_rx_flex_desc_adv_nic_3 */
enum virtchnl2_rx_flex_desc_adv_status_error_1_bits {};

/* For singleq (flex) virtchnl2_rx_flex_desc fields
 * For virtchnl2_rx_flex_desc.ptype_flex_flags0 member
 */
#define VIRTCHNL2_RX_FLEX_DESC_PTYPE_M

/* For virtchnl2_rx_flex_desc.pkt_len member */
#define VIRTCHNL2_RX_FLEX_DESC_PKT_LEN_M

/* Bitmasks for singleq (flex) virtchnl2_rx_flex_desc */
enum virtchnl2_rx_flex_desc_status_error_0_bits {};

/* Bitmasks for singleq (flex) virtchnl2_rx_flex_desc */
enum virtchnl2_rx_flex_desc_status_error_1_bits {};

/* For virtchnl2_rx_flex_desc.ts_low member */
#define VIRTCHNL2_RX_FLEX_TSTAMP_VALID

/* For singleq (non flex) virtchnl2_singleq_base_rx_desc legacy desc members */
#define VIRTCHNL2_RX_BASE_DESC_QW1_LEN_PBUF_M
#define VIRTCHNL2_RX_BASE_DESC_QW1_PTYPE_M
#define VIRTCHNL2_RX_BASE_DESC_QW1_ERROR_M
#define VIRTCHNL2_RX_BASE_DESC_QW1_STATUS_M

/* Bitmasks for singleq (base) virtchnl2_rx_base_desc */
enum virtchnl2_rx_base_desc_status_bits {};

/* Bitmasks for singleq (base) virtchnl2_rx_base_desc */
enum virtchnl2_rx_base_desc_error_bits {};

/* Bitmasks for singleq (base) virtchnl2_rx_base_desc */
#define VIRTCHNL2_RX_BASE_DESC_FLTSTAT_RSS_HASH_M

/**
 * struct virtchnl2_splitq_rx_buf_desc - SplitQ RX buffer descriptor format
 * @qword0: RX buffer struct.
 * @qword0.buf_id: Buffer identifier.
 * @qword0.rsvd0: Reserved.
 * @qword0.rsvd1: Reserved.
 * @pkt_addr: Packet buffer address.
 * @hdr_addr: Header buffer address.
 * @rsvd2: Rerserved.
 *
 * Receive Descriptors
 * SplitQ buffer
 * |                                       16|                   0|
 * ----------------------------------------------------------------
 * | RSV                                     | Buffer ID          |
 * ----------------------------------------------------------------
 * | Rx packet buffer address                                     |
 * ----------------------------------------------------------------
 * | Rx header buffer address                                     |
 * ----------------------------------------------------------------
 * | RSV                                                          |
 * ----------------------------------------------------------------
 * |                                                             0|
 */
struct virtchnl2_splitq_rx_buf_desc {};

/**
 * struct virtchnl2_singleq_rx_buf_desc - SingleQ RX buffer descriptor format.
 * @pkt_addr: Packet buffer address.
 * @hdr_addr: Header buffer address.
 * @rsvd1: Reserved.
 * @rsvd2: Reserved.
 *
 * SingleQ buffer
 * |                                                             0|
 * ----------------------------------------------------------------
 * | Rx packet buffer address                                     |
 * ----------------------------------------------------------------
 * | Rx header buffer address                                     |
 * ----------------------------------------------------------------
 * | RSV                                                          |
 * ----------------------------------------------------------------
 * | RSV                                                          |
 * ----------------------------------------------------------------
 * |                                                             0|
 */
struct virtchnl2_singleq_rx_buf_desc {};

/**
 * struct virtchnl2_singleq_base_rx_desc - RX descriptor writeback format.
 * @qword0: First quad word struct.
 * @qword0.lo_dword: Lower dual word struct.
 * @qword0.lo_dword.mirroring_status: Mirrored packet status.
 * @qword0.lo_dword.l2tag1: Stripped L2 tag from the received packet.
 * @qword0.hi_dword: High dual word union.
 * @qword0.hi_dword.rss: RSS hash.
 * @qword0.hi_dword.fd_id: Flow director filter id.
 * @qword1: Second quad word struct.
 * @qword1.status_error_ptype_len: Status/error/PTYPE/length.
 * @qword2: Third quad word struct.
 * @qword2.ext_status: Extended status.
 * @qword2.rsvd: Reserved.
 * @qword2.l2tag2_1: Extracted L2 tag 2 from the packet.
 * @qword2.l2tag2_2: Reserved.
 * @qword3: Fourth quad word struct.
 * @qword3.reserved: Reserved.
 * @qword3.fd_id: Flow director filter id.
 *
 * Profile ID 0x1, SingleQ, base writeback format
 */
struct virtchnl2_singleq_base_rx_desc {};

/**
 * struct virtchnl2_rx_flex_desc_nic - RX descriptor writeback format.
 *
 * @rxdid: Descriptor builder profile id.
 * @mir_id_umb_cast: umb_cast=[7:6], mirror=[5:0]
 * @ptype_flex_flags0: ff0=[15:10], ptype=[9:0]
 * @pkt_len: Packet length, [15:14] are reserved.
 * @hdr_len_sph_flex_flags1: ff1/ext=[15:12], sph=[11], header=[10:0].
 * @status_error0: Status/Error section 0.
 * @l2tag1: Stripped L2 tag from the received packet
 * @rss_hash: RSS hash.
 * @status_error1: Status/Error section 1.
 * @flexi_flags2: Flexible flags section 2.
 * @ts_low: Lower word of timestamp value.
 * @l2tag2_1st: First L2TAG2.
 * @l2tag2_2nd: Second L2TAG2.
 * @flow_id: Flow id.
 * @flex_ts: Timestamp and flexible flow id union.
 * @flex_ts.ts_high: Timestamp higher word of the timestamp value.
 * @flex_ts.flex.rsvd: Reserved.
 * @flex_ts.flex.flow_id_ipv6: IPv6 flow id.
 *
 * Profile ID 0x2, SingleQ, flex writeback format
 */
struct virtchnl2_rx_flex_desc_nic {};

/**
 * struct virtchnl2_rx_flex_desc_adv_nic_3 - RX descriptor writeback format.
 * @rxdid_ucast: ucast=[7:6], rsvd=[5:4], profile_id=[3:0].
 * @status_err0_qw0: Status/Error section 0 in quad word 0.
 * @ptype_err_fflags0: ff0=[15:12], udp_len_err=[11], ip_hdr_err=[10],
 *		       ptype=[9:0].
 * @pktlen_gen_bufq_id: bufq_id=[15] only in splitq, gen=[14] only in splitq,
 *			plen=[13:0].
 * @hdrlen_flags: miss_prepend=[15], trunc_mirr=[14], int_udp_0=[13],
 *		  ext_udp0=[12], sph=[11] only in splitq, rsc=[10]
 *		  only in splitq, header=[9:0].
 * @status_err0_qw1: Status/Error section 0 in quad word 1.
 * @status_err1: Status/Error section 1.
 * @fflags1: Flexible flags section 1.
 * @ts_low: Lower word of timestamp value.
 * @buf_id: Buffer identifier. Only in splitq mode.
 * @misc: Union.
 * @misc.raw_cs: Raw checksum.
 * @misc.l2tag1: Stripped L2 tag from the received packet
 * @misc.rscseglen:
 * @hash1: Lower bits of Rx hash value.
 * @ff2_mirrid_hash2: Union.
 * @ff2_mirrid_hash2.fflags2: Flexible flags section 2.
 * @ff2_mirrid_hash2.mirrorid: Mirror id.
 * @ff2_mirrid_hash2.rscseglen: RSC segment length.
 * @hash3: Upper bits of Rx hash value.
 * @l2tag2: Extracted L2 tag 2 from the packet.
 * @fmd4: Flexible metadata container 4.
 * @l2tag1: Stripped L2 tag from the received packet
 * @fmd6: Flexible metadata container 6.
 * @ts_high: Timestamp higher word of the timestamp value.
 *
 * Profile ID 0x2, SplitQ, flex writeback format
 *
 * Flex-field 0: BufferID
 * Flex-field 1: Raw checksum/L2TAG1/RSC Seg Len (determined by HW)
 * Flex-field 2: Hash[15:0]
 * Flex-flags 2: Hash[23:16]
 * Flex-field 3: L2TAG2
 * Flex-field 5: L2TAG1
 * Flex-field 7: Timestamp (upper 32 bits)
 */
struct virtchnl2_rx_flex_desc_adv_nic_3 {};

/* Common union for accessing descriptor format structs */
virtchnl2_rx_desc;

#endif /* _VIRTCHNL_LAN_DESC_H_ */