linux/drivers/net/ethernet/intel/ice/ice_flex_pipe.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/* Copyright (c) 2019, Intel Corporation. */
   3
   4#ifndef _ICE_FLEX_PIPE_H_
   5#define _ICE_FLEX_PIPE_H_
   6
   7#include "ice_type.h"
   8
   9/* Package minimal version supported */
  10#define ICE_PKG_SUPP_VER_MAJ    1
  11#define ICE_PKG_SUPP_VER_MNR    3
  12
  13/* Package format version */
  14#define ICE_PKG_FMT_VER_MAJ     1
  15#define ICE_PKG_FMT_VER_MNR     0
  16#define ICE_PKG_FMT_VER_UPD     0
  17#define ICE_PKG_FMT_VER_DFT     0
  18
  19#define ICE_PKG_CNT 4
  20
  21enum ice_ddp_state {
  22        /* Indicates that this call to ice_init_pkg
  23         * successfully loaded the requested DDP package
  24         */
  25        ICE_DDP_PKG_SUCCESS                     = 0,
  26
  27        /* Generic error for already loaded errors, it is mapped later to
  28         * the more specific one (one of the next 3)
  29         */
  30        ICE_DDP_PKG_ALREADY_LOADED                      = -1,
  31
  32        /* Indicates that a DDP package of the same version has already been
  33         * loaded onto the device by a previous call or by another PF
  34         */
  35        ICE_DDP_PKG_SAME_VERSION_ALREADY_LOADED         = -2,
  36
  37        /* The device has a DDP package that is not supported by the driver */
  38        ICE_DDP_PKG_ALREADY_LOADED_NOT_SUPPORTED        = -3,
  39
  40        /* The device has a compatible package
  41         * (but different from the request) already loaded
  42         */
  43        ICE_DDP_PKG_COMPATIBLE_ALREADY_LOADED           = -4,
  44
  45        /* The firmware loaded on the device is not compatible with
  46         * the DDP package loaded
  47         */
  48        ICE_DDP_PKG_FW_MISMATCH                         = -5,
  49
  50        /* The DDP package file is invalid */
  51        ICE_DDP_PKG_INVALID_FILE                        = -6,
  52
  53        /* The version of the DDP package provided is higher than
  54         * the driver supports
  55         */
  56        ICE_DDP_PKG_FILE_VERSION_TOO_HIGH               = -7,
  57
  58        /* The version of the DDP package provided is lower than the
  59         * driver supports
  60         */
  61        ICE_DDP_PKG_FILE_VERSION_TOO_LOW                = -8,
  62
  63        /* The signature of the DDP package file provided is invalid */
  64        ICE_DDP_PKG_FILE_SIGNATURE_INVALID              = -9,
  65
  66        /* The DDP package file security revision is too low and not
  67         * supported by firmware
  68         */
  69        ICE_DDP_PKG_FILE_REVISION_TOO_LOW               = -10,
  70
  71        /* An error occurred in firmware while loading the DDP package */
  72        ICE_DDP_PKG_LOAD_ERROR                          = -11,
  73
  74        /* Other errors */
  75        ICE_DDP_PKG_ERR                                 = -12
  76};
  77
  78int
  79ice_acquire_change_lock(struct ice_hw *hw, enum ice_aq_res_access_type access);
  80void ice_release_change_lock(struct ice_hw *hw);
  81int
  82ice_find_prot_off(struct ice_hw *hw, enum ice_block blk, u8 prof, u16 fv_idx,
  83                  u8 *prot, u16 *off);
  84void
  85ice_get_sw_fv_bitmap(struct ice_hw *hw, enum ice_prof_type type,
  86                     unsigned long *bm);
  87void
  88ice_init_prof_result_bm(struct ice_hw *hw);
  89int
  90ice_get_sw_fv_list(struct ice_hw *hw, struct ice_prot_lkup_ext *lkups,
  91                   unsigned long *bm, struct list_head *fv_list);
  92int
  93ice_pkg_buf_unreserve_section(struct ice_buf_build *bld, u16 count);
  94u16 ice_pkg_buf_get_free_space(struct ice_buf_build *bld);
  95int
  96ice_aq_upload_section(struct ice_hw *hw, struct ice_buf_hdr *pkg_buf,
  97                      u16 buf_size, struct ice_sq_cd *cd);
  98bool
  99ice_get_open_tunnel_port(struct ice_hw *hw, u16 *port,
 100                         enum ice_tunnel_type type);
 101int ice_udp_tunnel_set_port(struct net_device *netdev, unsigned int table,
 102                            unsigned int idx, struct udp_tunnel_info *ti);
 103int ice_udp_tunnel_unset_port(struct net_device *netdev, unsigned int table,
 104                              unsigned int idx, struct udp_tunnel_info *ti);
 105int ice_set_dvm_boost_entries(struct ice_hw *hw);
 106
 107/* Rx parser PTYPE functions */
 108bool ice_hw_ptype_ena(struct ice_hw *hw, u16 ptype);
 109
 110/* XLT2/VSI group functions */
 111int
 112ice_add_prof(struct ice_hw *hw, enum ice_block blk, u64 id, u8 ptypes[],
 113             const struct ice_ptype_attributes *attr, u16 attr_cnt,
 114             struct ice_fv_word *es, u16 *masks);
 115int
 116ice_add_prof_id_flow(struct ice_hw *hw, enum ice_block blk, u16 vsi, u64 hdl);
 117int
 118ice_rem_prof_id_flow(struct ice_hw *hw, enum ice_block blk, u16 vsi, u64 hdl);
 119enum ice_ddp_state ice_init_pkg(struct ice_hw *hw, u8 *buff, u32 len);
 120enum ice_ddp_state
 121ice_copy_and_init_pkg(struct ice_hw *hw, const u8 *buf, u32 len);
 122bool ice_is_init_pkg_successful(enum ice_ddp_state state);
 123int ice_init_hw_tbls(struct ice_hw *hw);
 124void ice_free_seg(struct ice_hw *hw);
 125void ice_fill_blk_tbls(struct ice_hw *hw);
 126void ice_clear_hw_tbls(struct ice_hw *hw);
 127void ice_free_hw_tbls(struct ice_hw *hw);
 128int ice_rem_prof(struct ice_hw *hw, enum ice_block blk, u64 id);
 129struct ice_buf_build *
 130ice_pkg_buf_alloc_single_section(struct ice_hw *hw, u32 type, u16 size,
 131                                 void **section);
 132struct ice_buf *ice_pkg_buf(struct ice_buf_build *bld);
 133void ice_pkg_buf_free(struct ice_hw *hw, struct ice_buf_build *bld);
 134
 135#endif /* _ICE_FLEX_PIPE_H_ */
 136