The ice(4) driver is the driver for the Intel E8xx series Ethernet controllers; currently with codenames Columbiaville and Columbia Park. These new controllers support 100G speeds, as well as introducing more queues, better virtualization support, and more offload capabilities. Future work will enable virtual functions (like in ixl(4)) and the other functionality outlined above. For full functionality, the kernel should be compiled with "device ice_ddp" like in the amd64 NOTES file, and/or ice_ddp_load="YES" should be added to /boot/loader.conf so that the DDP package file included in this commit can be downloaded to the adapter. Otherwise, the adapter will fall back to a single queue mode with limited functionality. A man page for this driver will be forthcoming. MFC after: 1 month Relnotes: yes Sponsored by: Intel Corporation Differential Revision: https://reviews.freebsd.org/D21959
132 lines
5.3 KiB
C
132 lines
5.3 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause */
|
|
/* Copyright (c) 2020, Intel Corporation
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* 3. Neither the name of the Intel Corporation nor the names of its
|
|
* contributors may be used to endorse or promote products derived from
|
|
* this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
/*$FreeBSD$*/
|
|
|
|
#ifndef _ICE_FLEX_PIPE_H_
|
|
#define _ICE_FLEX_PIPE_H_
|
|
|
|
#include "ice_type.h"
|
|
|
|
/* Package minimal version supported */
|
|
#define ICE_PKG_SUPP_VER_MAJ 1
|
|
#define ICE_PKG_SUPP_VER_MNR 3
|
|
|
|
/* Package format version */
|
|
#define ICE_PKG_FMT_VER_MAJ 1
|
|
#define ICE_PKG_FMT_VER_MNR 0
|
|
#define ICE_PKG_FMT_VER_UPD 0
|
|
#define ICE_PKG_FMT_VER_DFT 0
|
|
|
|
#define ICE_PKG_CNT 4
|
|
|
|
enum ice_status
|
|
ice_update_pkg(struct ice_hw *hw, struct ice_buf *bufs, u32 count);
|
|
enum ice_status
|
|
ice_acquire_change_lock(struct ice_hw *hw, enum ice_aq_res_access_type access);
|
|
void ice_release_change_lock(struct ice_hw *hw);
|
|
enum ice_status
|
|
ice_find_prot_off(struct ice_hw *hw, enum ice_block blk, u8 prof, u16 fv_idx,
|
|
u8 *prot, u16 *off);
|
|
enum ice_status
|
|
ice_find_label_value(struct ice_seg *ice_seg, char const *name, u32 type,
|
|
u16 *value);
|
|
void
|
|
ice_get_sw_fv_bitmap(struct ice_hw *hw, enum ice_prof_type type,
|
|
ice_bitmap_t *bm);
|
|
void
|
|
ice_init_prof_result_bm(struct ice_hw *hw);
|
|
enum ice_status
|
|
ice_get_sw_fv_list(struct ice_hw *hw, u8 *prot_ids, u16 ids_cnt,
|
|
ice_bitmap_t *bm, struct LIST_HEAD_TYPE *fv_list);
|
|
enum ice_status
|
|
ice_aq_upload_section(struct ice_hw *hw, struct ice_buf_hdr *pkg_buf,
|
|
u16 buf_size, struct ice_sq_cd *cd);
|
|
|
|
enum ice_status
|
|
ice_pkg_buf_unreserve_section(struct ice_buf_build *bld, u16 count);
|
|
u16 ice_pkg_buf_get_free_space(struct ice_buf_build *bld);
|
|
bool
|
|
ice_get_open_tunnel_port(struct ice_hw *hw, enum ice_tunnel_type type,
|
|
u16 *port);
|
|
enum ice_status
|
|
ice_create_tunnel(struct ice_hw *hw, enum ice_tunnel_type type, u16 port);
|
|
enum ice_status ice_destroy_tunnel(struct ice_hw *hw, u16 port, bool all);
|
|
bool ice_tunnel_port_in_use(struct ice_hw *hw, u16 port, u16 *index);
|
|
bool
|
|
ice_tunnel_get_type(struct ice_hw *hw, u16 port, enum ice_tunnel_type *type);
|
|
enum ice_status ice_replay_tunnels(struct ice_hw *hw);
|
|
|
|
/* XLT1/PType group functions */
|
|
enum ice_status ice_ptg_update_xlt1(struct ice_hw *hw, enum ice_block blk);
|
|
void ice_ptg_free(struct ice_hw *hw, enum ice_block blk, u8 ptg);
|
|
|
|
/* XLT2/VSI group functions */
|
|
enum ice_status ice_vsig_update_xlt2(struct ice_hw *hw, enum ice_block blk);
|
|
enum ice_status
|
|
ice_vsig_find_vsi(struct ice_hw *hw, enum ice_block blk, u16 vsi, u16 *vsig);
|
|
enum ice_status
|
|
ice_add_prof(struct ice_hw *hw, enum ice_block blk, u64 id, u8 ptypes[],
|
|
struct ice_fv_word *es);
|
|
struct ice_prof_map *
|
|
ice_search_prof_id(struct ice_hw *hw, enum ice_block blk, u64 id);
|
|
enum ice_status
|
|
ice_add_vsi_flow(struct ice_hw *hw, enum ice_block blk, u16 vsi, u16 vsig);
|
|
enum ice_status
|
|
ice_add_prof_id_flow(struct ice_hw *hw, enum ice_block blk, u16 vsi, u64 hdl);
|
|
enum ice_status
|
|
ice_rem_prof_id_flow(struct ice_hw *hw, enum ice_block blk, u16 vsi, u64 hdl);
|
|
struct ice_prof_map *
|
|
ice_set_prof_context(struct ice_hw *hw, enum ice_block blk, u64 id, u64 cntxt);
|
|
struct ice_prof_map *
|
|
ice_get_prof_context(struct ice_hw *hw, enum ice_block blk, u64 id, u64 *cntxt);
|
|
enum ice_status ice_init_pkg(struct ice_hw *hw, u8 *buff, u32 len);
|
|
enum ice_status
|
|
ice_copy_and_init_pkg(struct ice_hw *hw, const u8 *buf, u32 len);
|
|
enum ice_status ice_init_hw_tbls(struct ice_hw *hw);
|
|
void ice_free_seg(struct ice_hw *hw);
|
|
void ice_fill_blk_tbls(struct ice_hw *hw);
|
|
void ice_clear_hw_tbls(struct ice_hw *hw);
|
|
void ice_free_hw_tbls(struct ice_hw *hw);
|
|
enum ice_status
|
|
ice_add_flow(struct ice_hw *hw, enum ice_block blk, u16 vsi[], u8 count,
|
|
u64 id);
|
|
enum ice_status
|
|
ice_rem_flow(struct ice_hw *hw, enum ice_block blk, u16 vsi[], u8 count,
|
|
u64 id);
|
|
enum ice_status
|
|
ice_rem_prof(struct ice_hw *hw, enum ice_block blk, u64 id);
|
|
|
|
enum ice_status
|
|
ice_set_key(u8 *key, u16 size, u8 *val, u8 *upd, u8 *dc, u8 *nm, u16 off,
|
|
u16 len);
|
|
|
|
#endif /* _ICE_FLEX_PIPE_H_ */
|