663ff698e3
This patch adds support for VSP (Virtual Storage Profile) in fmlib routines. VSP allow a network interface to be divided into physical and virtual instance(s). The concept is very similar to SRIOV. Signed-off-by: Jun Yang <jun.yang@nxp.com> Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
132 lines
4.1 KiB
C
132 lines
4.1 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright 2008-2012 Freescale Semiconductor, Inc
|
|
* Copyright 2019-2020 NXP
|
|
*/
|
|
|
|
/*
|
|
* @File fm_vsp_ext.h
|
|
*
|
|
* @Description FM Virtual Storage-Profile
|
|
*/
|
|
#ifndef __FM_VSP_EXT_H
|
|
#define __FM_VSP_EXT_H
|
|
#include "ncsw_ext.h"
|
|
#include "fm_ext.h"
|
|
#include "net_ext.h"
|
|
|
|
typedef struct t_fm_vsp_params {
|
|
t_handle h_fm;
|
|
/**< A handle to the FM object this VSP related to */
|
|
t_fm_ext_pools ext_buf_pools;
|
|
/**< Which external buffer pools are used (up to
|
|
* FM_PORT_MAX_NUM_OF_EXT_POOLS), and their sizes.
|
|
* Parameter associated with Rx / OP port
|
|
*/
|
|
uint16_t liodn_offset; /**< VSP's LIODN offset */
|
|
struct {
|
|
e_fm_port_type port_type; /**< Port type */
|
|
uint8_t port_id; /**< Port Id - relative to type */
|
|
} port_params;
|
|
uint8_t relative_profile_id;
|
|
/**< VSP Id - relative to VSP's range defined in
|
|
* relevant FM object
|
|
*/
|
|
} t_fm_vsp_params;
|
|
|
|
typedef struct ioc_fm_vsp_params_t {
|
|
struct t_fm_vsp_params vsp_params;
|
|
void *id; /**< return value */
|
|
} ioc_fm_vsp_params_t;
|
|
|
|
typedef struct t_fm_port_vspalloc_params {
|
|
uint8_t num_of_profiles;
|
|
/**< Number of Virtual Storage Profiles; must be a power of 2 */
|
|
uint8_t dflt_relative_id;
|
|
/**< The default Virtual-Storage-Profile-id dedicated to Rx/OP port. The
|
|
* same default Virtual-Storage-Profile-id will be for coupled Tx port
|
|
* if relevant function called for Rx port
|
|
*/
|
|
} t_fm_port_vspalloc_params;
|
|
|
|
typedef struct ioc_fm_port_vsp_alloc_params_t {
|
|
struct t_fm_port_vspalloc_params params;
|
|
void *p_fm_tx_port;
|
|
/**< Handle to coupled Tx Port; not relevant for OP port. */
|
|
} ioc_fm_port_vsp_alloc_params_t;
|
|
|
|
typedef struct ioc_fm_buffer_prefix_content_t {
|
|
uint16_t priv_data_size;
|
|
/**< Number of bytes to be left at the beginning of the external
|
|
* buffer; Note that the private-area will start from the base
|
|
* of the buffer address.
|
|
*/
|
|
bool pass_prs_result;
|
|
/**< TRUE to pass the parse result to/from the FM; User
|
|
* may use fm_port_get_buffer_prs_result() in order to
|
|
* get the parser-result from a buffer.
|
|
*/
|
|
bool pass_time_stamp;
|
|
/**< TRUE to pass the timeStamp to/from the FM User may
|
|
* use fm_port_get_buffer_time_stamp() in order to get
|
|
* the parser-result from a buffer.
|
|
*/
|
|
bool pass_hash_result;
|
|
/**< TRUE to pass the KG hash result to/from the FM User
|
|
* may use fm_port_get_buffer_hash_result() in order to
|
|
* get the parser-result from a buffer.
|
|
*/
|
|
bool pass_all_other_pcd_info;
|
|
/**< Add all other Internal-Context information: AD,
|
|
* hash-result, key, etc.
|
|
*/
|
|
uint16_t data_align;
|
|
/**< 0 to use driver's default alignment [64],
|
|
* other value for selecting a data alignment (must be a
|
|
* power of 2); if write optimization is used, must be
|
|
* >= 16.
|
|
*/
|
|
uint8_t manip_extra_space;
|
|
/**< Maximum extra size needed
|
|
* (insertion-size minus removal-size);
|
|
* Note that this field impacts the size of the
|
|
* buffer-prefix (i.e. it pushes the data offset);
|
|
* This field is irrelevant if DPAA_VERSION==10
|
|
*/
|
|
} ioc_fm_buffer_prefix_content_t;
|
|
|
|
typedef struct ioc_fm_buffer_prefix_content_params_t {
|
|
void *p_fm_vsp;
|
|
ioc_fm_buffer_prefix_content_t fm_buffer_prefix_content;
|
|
} ioc_fm_buffer_prefix_content_params_t;
|
|
|
|
uint32_t fm_port_vsp_alloc(t_handle h_fm_port,
|
|
t_fm_port_vspalloc_params *p_params);
|
|
|
|
t_handle fm_vsp_config(t_fm_vsp_params *p_fm_vsp_params);
|
|
|
|
uint32_t fm_vsp_init(t_handle h_fm_vsp);
|
|
|
|
uint32_t fm_vsp_free(t_handle h_fm_vsp);
|
|
|
|
uint32_t fm_vsp_config_buffer_prefix_content(t_handle h_fm_vsp,
|
|
t_fm_buffer_prefix_content *p_fm_buffer_prefix_content);
|
|
|
|
#define FM_PORT_IOC_VSP_ALLOC \
|
|
_IOW(FM_IOC_TYPE_BASE, FM_PORT_IOC_NUM(38), \
|
|
ioc_fm_port_vsp_alloc_params_t)
|
|
|
|
#define FM_IOC_VSP_CONFIG \
|
|
_IOWR(FM_IOC_TYPE_BASE, FM_IOC_NUM(8), ioc_fm_vsp_params_t)
|
|
|
|
#define FM_IOC_VSP_INIT \
|
|
_IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(9), ioc_fm_obj_t)
|
|
|
|
#define FM_IOC_VSP_FREE \
|
|
_IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(10), ioc_fm_obj_t)
|
|
|
|
#define FM_IOC_VSP_CONFIG_BUFFER_PREFIX_CONTENT \
|
|
_IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(12), \
|
|
ioc_fm_buffer_prefix_content_params_t)
|
|
|
|
#endif /* __FM_VSP_EXT_H */
|