d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef VF_PF_SW_IF_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VF_PF_SW_IF_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * common flags - right now it duplicates the #defines in the PF code -
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * TODO: put in another common header file
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SW_VFPF_QUEUE_FLG_TPA 0x0001
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SW_VFPF_QUEUE_FLG_CACHE_ALIGN 0x0002
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SW_VFPF_QUEUE_FLG_STATS 0x0004
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SW_VFPF_QUEUE_FLG_OV 0x0008
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SW_VFPF_QUEUE_FLG_VLAN 0x0010
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SW_VFPF_QUEUE_FLG_COS 0x0020
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SW_VFPF_QUEUE_FLG_HC 0x0040
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SW_VFPF_QUEUE_FLG_DHC 0x0080
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SW_VFPF_QUEUE_DROP_IP_CS_ERR (1 << 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SW_VFPF_QUEUE_DROP_TCP_CS_ERR (1 << 1)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SW_VFPF_QUEUE_DROP_TTL0 (1 << 2)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SW_VFPF_QUEUE_DROP_UDP_CS_ERR (1 << 3)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SW_VFPF_VFDEF_INFO_AUX_DIRECT_DQ 0x01
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchienum {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi SW_PFVF_STATUS_WAITING = 0,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi SW_PFVF_STATUS_SUCCESS,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi SW_PFVF_STATUS_FAILURE,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi SW_PFVF_STATUS_NOT_SUPPORTED,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi SW_PFVF_STATUS_MISMATCH_PF_VF_VERSION,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi SW_PFVF_STATUS_NO_RESOURCE,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi SW_PFVF_STATUS_MISMATCH_FW_HSI
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Headers */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct vf_pf_msg_hdr {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 opcode;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PFVF_IF_VERSION 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 if_ver;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 opcode_ver;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 resp_msg_offset;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct pf_vf_msg_hdr {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 status;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 opcode_ver;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 opcode;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* simple response */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct pf_vf_msg_resp {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct pf_vf_msg_hdr hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Acquire */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct vf_pf_msg_acquire {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_hdr hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct sw_vf_pf_vfdev_info
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* the following fields are for debug purposes */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 vf_id; /* ME register value */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 vf_os; /* e.g. Linux, W2K8 */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 vf_aux;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 fp_hsi_ver;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 vf_fw_hsi_version; /* e.g. 6.0.12 */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } vfdev_info;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct sw_vf_pf_resc_request
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_rxqs;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_txqs;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_sbs;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_mac_filters;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_vlan_filters;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_mc_filters;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 reserved1;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 reserved2;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* TODO: future:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi statistics resc?, other resc? */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } resc_request;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* simple operation request on queue */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct vf_pf_msg_q_op {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_hdr hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 vf_qid;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 padding[3];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct vf_pf_msg_rss {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_hdr hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 rss_flags;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* Number hash bits to take into an account */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 rss_result_mask;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 ind_table_size;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 rss_key_size;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* Indirection table */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 ind_table[T_ETH_INDIRECTION_TABLE_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* RSS hash values */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 rss_key[10];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct vf_pf_msg_rsc {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_hdr hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 rsc_ipv4_state;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 rsc_ipv6_state;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct sw_hw_sb_info {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 hw_sb_id; /* aka absolute igu id, used to ack the sb */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 sb_qid; /* used to update DHC for sb */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct pf_vf_msg_acquire_resp {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct pf_vf_msg_hdr hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct sw_pf_vf_pfdev_info
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 chip_num;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 pf_cap;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define PFVF_CAP_RSS 0x00000001
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define PFVF_CAP_DHC 0x00000002
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define PFVF_CAP_TPA 0x00000004
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define PFVF_DEBUG 0x80000000
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 db_size;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 indices_per_sb;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 padding;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } pfdev_info;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct sw_pf_vf_resc
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /*
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * in case of status NO_RESOURCE in message hdr, pf will fill
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * this struct with suggested amount of resources for next
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * acquire request
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define PFVF_MAX_QUEUES_PER_VF 16
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define PFVF_MAX_SBS_PER_VF 16
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct sw_hw_sb_info hw_sbs[PFVF_MAX_SBS_PER_VF];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 hw_qid[PFVF_MAX_QUEUES_PER_VF];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_rxqs;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_txqs;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_sbs;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_mac_filters;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_vlan_filters;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 num_mc_filters;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 igu_test_cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 igu_cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 permanent_mac_addr[8];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 current_mac_addr[8];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* TODO: stats resc? cid for the ramrod? stats_id? spq prod id? */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } resc;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Init VF */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct vf_pf_msg_init_vf {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_hdr hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64 sb_addr[PFVF_MAX_SBS_PER_VF]; /* vf_sb based */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64 spq_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64 stats_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Setup Queue */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct vf_pf_msg_setup_q {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_hdr hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 vf_qid; /* index in hw_qid[] */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 param_valid;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_RXQ_VALID 0x01
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_TXQ_VALID 0x02
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 padding;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct sw_vf_pf_rxq_params {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* physical addresses */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64 rcq_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64 rcq_np_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64 rxq_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64 sge_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* sb + hc info */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 vf_sb; /* index in hw_sbs[] */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 sb_index; /* Index in the SB */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 hc_rate; /* desired interrupts per sec. */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* valid iff VFPF_QUEUE_FLG_HC */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* rx buffer info */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 mtu;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 buf_sz;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 flags; /* VFPF_QUEUE_FLG_X flags */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 stat_id; /* valid iff VFPF_QUEUE_FLG_STATS */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* valid iff VFPF_QUEUE_FLG_TPA */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 sge_buf_sz;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 tpa_agg_sz;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 max_sge_pkt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 drop_flags; /* VFPF_QUEUE_DROP_X, for Linux all should
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * be turned off, see setup_rx_queue()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * for reference
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 cache_line_log; /* VFPF_QUEUE_FLG_CACHE_ALIGN
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * see init_rx_queue()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 padding;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } rxq;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct sw_vf_pf_txq_params {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* physical addresses */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64 txq_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* sb + hc info */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 vf_sb; /* index in hw_sbs[] */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 sb_index; /* Index in the SB */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 hc_rate; /* desired interrupts per sec. */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* valid iff VFPF_QUEUE_FLG_HC */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 flags; /* VFPF_QUEUE_FLG_X flags */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 stat_id; /* valid iff VFPF_QUEUE_FLG_STATS */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 traffic_type; /* see in setup_context() */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 padding;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } txq;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Set Queue Filters */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct vf_pf_q_mac_vlan_filter {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 flags;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_Q_FILTER_DEST_MAC_PRESENT 0x01
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_Q_FILTER_VLAN_TAG_PRESENT 0x02
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_Q_FILTER_SET_MAC 0x100
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 dest_mac[6];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 vlan_tag;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct vf_pf_msg_set_q_filters {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_hdr hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 flags;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_SET_Q_FILTERS_MAC_VLAN_CHANGED 0x01
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_SET_Q_FILTERS_MULTICAST_CHANGED 0x02
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_SET_Q_FILTERS_RX_MASK_CHANGED 0x04
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 vf_qid; /* index in hw_qid[] */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 n_mac_vlan_filters;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 n_multicast;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 padding;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define PFVF_MAX_MAC_FILTERS 16
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define PFVF_MAX_VLAN_FILTERS 16
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// #define PFVF_MAX_MAC_FILTERS 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// #define PFVF_MAX_VLAN_FILTERS 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define PFVF_MAX_FILTERS (PFVF_MAX_MAC_FILTERS +\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi PFVF_MAX_VLAN_FILTERS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_q_mac_vlan_filter filters[PFVF_MAX_FILTERS];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define PFVF_MAX_MULTICAST_PER_VF 32
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// #define PFVF_MAX_MULTICAST_PER_VF 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 multicast[PFVF_MAX_MULTICAST_PER_VF][6];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 rx_mask;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_RX_MASK_ACCEPT_NONE 0x00000000
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_RX_MASK_ACCEPT_MATCHED_UNICAST 0x00000001
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_RX_MASK_ACCEPT_MATCHED_MULTICAST 0x00000002
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_RX_MASK_ACCEPT_ALL_UNICAST 0x00000004
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_RX_MASK_ACCEPT_ALL_MULTICAST 0x00000008
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi #define VFPF_RX_MASK_ACCEPT_BROADCAST 0x00000010
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* TODO: #define VFPF_RX_MASK_ACCEPT_ANY_VLAN 0x00000020 */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* close VF (disable VF) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct vf_pf_msg_close_vf {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_hdr hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 vf_id; /* for debug */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 padding;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* rlease the VF's acquired resources */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct vf_pf_msg_release_vf {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_hdr hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 vf_id; /* for debug */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16 padding;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiunion vf_pf_msg {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_hdr hdr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_acquire acquire;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_init_vf init_vf;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_close_vf close_vf;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_q_op q_op;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_setup_q setup_q;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_set_q_filters set_q_filters;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_release_vf release_vf;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_rss update_rss;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct vf_pf_msg_rsc update_rsc;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiunion pf_vf_msg {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct pf_vf_msg_resp resp;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct pf_vf_msg_acquire_resp acquire_resp;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 req_sz;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 resp_sz;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} msg_sz_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PFVF_OP_VER_MAX(op_arry) (sizeof(op_arry)/sizeof(*op_arry) - 1)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic const msg_sz_t acquire_req_sz[] = {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* sizeof(vf_pf_msg_acquire) - offsetof(struct vf_pf_msg_acquire, fieldX), */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {sizeof(struct vf_pf_msg_acquire),
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi sizeof(struct pf_vf_msg_acquire_resp)}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PFVF_ACQUIRE_VER PFVF_OP_VER_MAX(acquire_req_sz)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic const msg_sz_t init_vf_req_sz[] = {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {sizeof(struct vf_pf_msg_init_vf), sizeof(struct pf_vf_msg_resp)}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PFVF_INIT_VF_VER PFVF_OP_VER_MAX(init_vf_req_sz)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic const msg_sz_t setup_q_req_sz[] = {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {sizeof(struct vf_pf_msg_setup_q), sizeof(struct pf_vf_msg_resp)}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PFVF_SETUP_Q_VER PFVF_OP_VER_MAX(setup_q_req_sz)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic const msg_sz_t set_q_filters_req_sz[] = {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {sizeof(struct vf_pf_msg_set_q_filters), sizeof(struct pf_vf_msg_resp)}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PFVF_SET_Q_FILTERS_VER PFVF_OP_VER_MAX(set_q_filters_req_sz)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic const msg_sz_t activate_q_req_sz[] = {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {sizeof(struct vf_pf_msg_q_op), sizeof(struct pf_vf_msg_resp)}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PFVF_ACTIVATE_Q_VER PFVF_OP_VER_MAX(activate_q_req_sz)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic const msg_sz_t deactivate_q_req_sz[] = {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {sizeof(struct vf_pf_msg_q_op), sizeof(struct pf_vf_msg_resp)}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PFVF_DEACTIVATE_Q_VER PFVF_OP_VER_MAX(deactivate_q_req_sz)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic const msg_sz_t teardown_q_req_sz[] = {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {sizeof(struct vf_pf_msg_q_op), sizeof(struct pf_vf_msg_resp)}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PFVF_TEARDOWN_Q_VER PFVF_OP_VER_MAX(teardown_q_req_sz)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic const msg_sz_t close_vf_req_sz[] = {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {sizeof(struct vf_pf_msg_close_vf), sizeof(struct pf_vf_msg_resp)}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PFVF_CLOSE_VF_VER PFVF_OP_VER_MAX(close_vf_req_sz)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic const msg_sz_t release_vf_req_sz[] = {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {sizeof(struct vf_pf_msg_release_vf), sizeof(struct pf_vf_msg_resp)}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PFVF_RELEASE_VF_VER PFVF_OP_VER_MAX(release_vf_req_sz)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic const msg_sz_t update_rss_req_sz[] = {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {sizeof(struct vf_pf_msg_rss), sizeof(struct pf_vf_msg_resp)}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PFVF_UPDATE_RSS_VER PFVF_OP_VER_MAX(update_rss_req_sz)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic const msg_sz_t update_rsc_req_sz[] = {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {sizeof(struct vf_pf_msg_rsc), sizeof(struct pf_vf_msg_resp)}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define PFVF_UPDATE_RSC_VER PFVF_OP_VER_MAX(update_rsc_req_sz)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchienum {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi PFVF_OP_ACQUIRE = 0,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi PFVF_OP_INIT_VF,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi PFVF_OP_SETUP_Q,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi PFVF_OP_SET_Q_FILTERS,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi PFVF_OP_ACTIVATE_Q,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi PFVF_OP_DEACTIVATE_Q,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi PFVF_OP_TEARDOWN_Q,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi PFVF_OP_CLOSE_VF,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi PFVF_OP_RELEASE_VF,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi PFVF_OP_UPDATE_RSS,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi PFVF_OP_UPDATE_RSC,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi PFVF_OP_MAX
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** To get size of message of the type X(request or response)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * for the op_code Y of the version Z one should use
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * op_code_req_sz[Y][Z].req_sz/resp_sz
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* const msg_sz_t* op_codes_req_sz[] = {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (const msg_sz_t*)acquire_req_sz,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (const msg_sz_t*)init_vf_req_sz,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (const msg_sz_t*)setup_q_req_sz,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (const msg_sz_t*)set_q_filters_req_sz,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (const msg_sz_t*)activate_q_req_sz,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (const msg_sz_t*)deactivate_q_req_sz,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (const msg_sz_t*)teardown_q_req_sz,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (const msg_sz_t*)close_vf_req_sz,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (const msg_sz_t*)release_vf_req_sz
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}; */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* VF_PF_SW_IF_H */