@ -7,7 +7,7 @@
# define _FSL_DPNI_H
/* DPNI Version */
# define DPNI_VER_MAJOR 4
# define DPNI_VER_MAJOR 5
# define DPNI_VER_MINOR 0
/* Command IDs */
@ -78,7 +78,7 @@ do { \
MC_RSP_OP ( cmd , 0 , 32 , 8 , uint8_t , attr - > max_tcs ) ; \
MC_RSP_OP ( cmd , 0 , 40 , 8 , uint8_t , attr - > max_senders ) ; \
MC_RSP_OP ( cmd , 0 , 48 , 8 , enum net_prot , attr - > start_hdr ) ; \
MC_RSP_OP ( cmd , 1 , 0 , 64 , uint64 _t, attr - > options ) ; \
MC_RSP_OP ( cmd , 1 , 0 , 32 , uint32 _t, attr - > options ) ; \
MC_RSP_OP ( cmd , 2 , 0 , 8 , uint8_t , attr - > max_unicast_filters ) ; \
MC_RSP_OP ( cmd , 2 , 8 , 8 , uint8_t , attr - > max_multicast_filters ) ; \
MC_RSP_OP ( cmd , 2 , 16 , 8 , uint8_t , attr - > max_vlan_filters ) ; \
@ -98,7 +98,9 @@ do { \
MC_RSP_OP ( cmd , 4 , 16 , 16 , uint16_t , \
attr - > ipr_cfg . min_frag_size_ipv4 ) ; \
MC_RSP_OP ( cmd , 4 , 32 , 16 , uint16_t , \
attr - > ipr_cfg . min_frag_size_ipv6 ) ; \
attr - > ipr_cfg . min_frag_size_ipv6 ) ; \
MC_RSP_OP ( cmd , 4 , 48 , 8 , uint8_t , attr - > max_policers ) ; \
MC_RSP_OP ( cmd , 4 , 56 , 8 , uint8_t , attr - > max_congestion_ctrl ) ; \
MC_RSP_OP ( cmd , 5 , 0 , 16 , uint16_t , \
attr - > ipr_cfg . max_open_frames_ipv4 ) ; \
MC_RSP_OP ( cmd , 5 , 16 , 16 , uint16_t , \
@ -208,7 +210,7 @@ do { \
/* cmd, param, offset, width, type, arg_name */
# define DPNI_CMD_SET_LINK_CFG(cmd, cfg) \
do { \
MC_CMD_OP ( cmd , 1 , 0 , 64 , uint64 _t, cfg - > rate ) ; \
MC_CMD_OP ( cmd , 1 , 0 , 32 , uint32 _t, cfg - > rate ) ; \
MC_CMD_OP ( cmd , 2 , 0 , 64 , uint64_t , cfg - > options ) ; \
} while ( 0 )
@ -216,7 +218,7 @@ do { \
# define DPNI_RSP_GET_LINK_STATE(cmd, state) \
do { \
MC_RSP_OP ( cmd , 0 , 32 , 1 , int , state - > up ) ; \
MC_RSP_OP ( cmd , 1 , 0 , 64 , uint64 _t, state - > rate ) ; \
MC_RSP_OP ( cmd , 1 , 0 , 32 , uint32 _t, state - > rate ) ; \
MC_RSP_OP ( cmd , 2 , 0 , 64 , uint64_t , state - > options ) ; \
} while ( 0 )
@ -326,6 +328,13 @@ do { \
MC_CMD_OP ( cmd , 1 , 0 , 64 , uint64_t , cfg - > user_ctx ) ; \
MC_CMD_OP ( cmd , 2 , 16 , 8 , uint8_t , tc_id ) ; \
MC_CMD_OP ( cmd , 2 , 32 , 32 , uint32_t , cfg - > options ) ; \
MC_CMD_OP ( cmd , 3 , 0 , 4 , enum dpni_flc_type , cfg - > flc_cfg . flc_type ) ; \
MC_CMD_OP ( cmd , 3 , 4 , 4 , enum dpni_stash_size , \
cfg - > flc_cfg . frame_data_size ) ; \
MC_CMD_OP ( cmd , 3 , 8 , 4 , enum dpni_stash_size , \
cfg - > flc_cfg . flow_context_size ) ; \
MC_CMD_OP ( cmd , 3 , 32 , 32 , uint32_t , cfg - > flc_cfg . options ) ; \
MC_CMD_OP ( cmd , 4 , 0 , 64 , uint64_t , cfg - > flc_cfg . flow_context ) ; \
} while ( 0 )
/* cmd, param, offset, width, type, arg_name */
@ -343,6 +352,13 @@ do { \
MC_RSP_OP ( cmd , 0 , 40 , 2 , enum dpni_dest , attr - > dest_cfg . dest_type ) ; \
MC_RSP_OP ( cmd , 1 , 0 , 64 , uint64_t , attr - > user_ctx ) ; \
MC_RSP_OP ( cmd , 2 , 32 , 32 , uint32_t , attr - > fqid ) ; \
MC_RSP_OP ( cmd , 3 , 0 , 4 , enum dpni_flc_type , attr - > flc_cfg . flc_type ) ; \
MC_RSP_OP ( cmd , 3 , 4 , 4 , enum dpni_stash_size , \
attr - > flc_cfg . frame_data_size ) ; \
MC_RSP_OP ( cmd , 3 , 8 , 4 , enum dpni_stash_size , \
attr - > flc_cfg . flow_context_size ) ; \
MC_RSP_OP ( cmd , 3 , 32 , 32 , uint32_t , attr - > flc_cfg . options ) ; \
MC_RSP_OP ( cmd , 4 , 0 , 64 , uint64_t , attr - > flc_cfg . flow_context ) ; \
} while ( 0 )
enum net_prot {
@ -399,7 +415,8 @@ enum net_prot {
NET_PROT_DUMMY_LAST
} ;
/* Data Path Network Interface API
/**
* Data Path Network Interface API
* Contains initialization APIs and runtime control APIs for DPNI
*/
@ -545,6 +562,8 @@ int dpni_reset(struct fsl_mc_io *mc_io, uint16_t token);
* @ max_qos_entries : if ' max_tcs > 1 ' , declares the maximum entries in QoS table
* @ max_qos_key_size : Maximum key size for the QoS look - up
* @ max_dist_key_size : Maximum key size for the distribution look - up
* @ max_policers : Maximum number of policers ;
* @ max_congestion_ctrl : Maximum number of congestion control groups ( CGs ) ;
* @ ipr_cfg : IP reassembly configuration
*/
struct dpni_attr {
@ -559,7 +578,7 @@ struct dpni_attr {
uint16_t minor ;
} version ;
enum net_prot start_hdr ;
uint64 _t options ;
uint32 _t options ;
uint8_t max_senders ;
uint8_t max_tcs ;
uint8_t max_dist_per_tc [ DPNI_MAX_TC ] ;
@ -569,8 +588,11 @@ struct dpni_attr {
uint8_t max_qos_entries ;
uint8_t max_qos_key_size ;
uint8_t max_dist_key_size ;
uint8_t max_policers ;
uint8_t max_congestion_ctrl ;
struct dpni_ipr_cfg ipr_cfg ;
} ;
/**
* dpni_get_attributes ( ) - Retrieve DPNI attributes .
* @ mc_io : Pointer to MC portal ' s I / O objec
@ -634,6 +656,7 @@ struct dpni_buffer_layout {
int dpni_get_rx_buffer_layout ( struct fsl_mc_io * mc_io ,
uint16_t token ,
struct dpni_buffer_layout * layout ) ;
/**
* dpni_set_rx_buffer_layout ( ) - Set Rx buffer layout configuration .
* @ mc_io : Pointer to MC portal ' s I / O object
@ -661,19 +684,19 @@ int dpni_get_tx_buffer_layout(struct fsl_mc_io *mc_io,
struct dpni_buffer_layout * layout ) ;
/**
* @ brief Set Tx buffer layout configuration .
*
* @ param [ in ] mc_io Pointer to MC portal ' s I / O object
* @ param [ in ] token Token of DPNI object
* @ param [ in ] layout Buffer layout configuration
* dpni_set_tx_buffer_layout ( ) - Set Tx buffer layout configuration .
* @ mc_io : Pointer to MC portal ' s I / O object
* @ token : Token of DPNI object
* @ layout : Buffer layout configuration
*
* @ returns ' 0 ' on Success ; Error code otherwise .
* Return : ' 0 ' on Success ; Error code otherwise .
*
* @ warning Allowed only when DPNI is disabled
*/
int dpni_set_tx_buffer_layout ( struct fsl_mc_io * mc_io ,
uint16_t token ,
const struct dpni_buffer_layout * layout ) ;
/**
* dpni_get_tx_conf_buffer_layout ( ) - Retrieve Tx confirmation buffer layout
* attributes .
@ -686,6 +709,7 @@ int dpni_set_tx_buffer_layout(struct fsl_mc_io *mc_io,
int dpni_get_tx_conf_buffer_layout ( struct fsl_mc_io * mc_io ,
uint16_t token ,
struct dpni_buffer_layout * layout ) ;
/**
* dpni_set_tx_conf_buffer_layout ( ) - Set Tx confirmation buffer layout
* configuration .
@ -700,15 +724,16 @@ int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io *mc_io,
int dpni_set_tx_conf_buffer_layout ( struct fsl_mc_io * mc_io ,
uint16_t token ,
const struct dpni_buffer_layout * layout ) ;
/**
* dpni_get_spid ( ) - Get the AIOP storage profile ID associated with the DPNI
* dpni_get_qdid ( ) - Get the Queuing Destination ID ( QDID ) that should be used
* for enqueue operations
* @ mc_io : Pointer to MC portal ' s I / O object
* @ token : Token of DPNI object
* @ spid : Returned aiop storage - profile ID
* @ qdid : Returned virtual QDID value that should be used as an argument
* in all enqueue operations
*
* Return : ' 0 ' on Success ; Error code otherwise .
*
* @ warning Only relevant for DPNI that belongs to AIOP container .
*/
int dpni_get_qdid ( struct fsl_mc_io * mc_io , uint16_t token , uint16_t * qdid ) ;
@ -781,13 +806,23 @@ int dpni_set_counter(struct fsl_mc_io *mc_io,
uint16_t token ,
enum dpni_counter counter ,
uint64_t value ) ;
/* Enable auto-negotiation */
# define DPNI_LINK_OPT_AUTONEG 0x0000000000000001ULL
/* Enable half-duplex mode */
# define DPNI_LINK_OPT_HALF_DUPLEX 0x0000000000000002ULL
/* Enable pause frames */
# define DPNI_LINK_OPT_PAUSE 0x0000000000000004ULL
/* Enable a-symmetric pause frames */
# define DPNI_LINK_OPT_ASYM_PAUSE 0x0000000000000008ULL
/**
* struct - Structure representing DPNI link configuration
* @ rate : Rate
* @ options : Mask of available options ; use ' DPNI_LINK_OPT_ < X > ' values
*/
struct dpni_link_cfg {
uint64_t rate ;
uint32 _t rate ;
uint64_t options ;
} ;
@ -801,7 +836,7 @@ struct dpni_link_cfg {
*/
int dpni_set_link_cfg ( struct fsl_mc_io * mc_io ,
uint16_t token ,
struct dpni_link_cfg * cfg ) ;
const struct dpni_link_cfg * cfg ) ;
/**
* struct dpni_link_state - Structure representing DPNI link state
@ -810,7 +845,7 @@ int dpni_set_link_cfg(struct fsl_mc_io *mc_io,
* @ up : Link state ; ' 0 ' for down , ' 1 ' for up
*/
struct dpni_link_state {
uint64 _t rate ;
uint32 _t rate ;
uint64_t options ;
int up ;
} ;
@ -838,6 +873,7 @@ int dpni_get_link_state(struct fsl_mc_io *mc_io,
int dpni_set_primary_mac_addr ( struct fsl_mc_io * mc_io ,
uint16_t token ,
const uint8_t mac_addr [ 6 ] ) ;
/**
* dpni_get_primary_mac_addr ( ) - Get the primary MAC address
* @ mc_io : Pointer to MC portal ' s I / O object
@ -849,6 +885,7 @@ int dpni_set_primary_mac_addr(struct fsl_mc_io *mc_io,
int dpni_get_primary_mac_addr ( struct fsl_mc_io * mc_io ,
uint16_t token ,
uint8_t mac_addr [ 6 ] ) ;
/**
* dpni_add_mac_addr ( ) - Add MAC address filter
* @ mc_io : Pointer to MC portal ' s I / O object
@ -875,7 +912,7 @@ int dpni_remove_mac_addr(struct fsl_mc_io *mc_io,
/**
* enum dpni_dest - DPNI destination types
* DPNI_DEST_NONE : Unassigned destination ; The queue is set in parked mode and
* @ DPNI_DEST_NONE : Unassigned destination ; The queue is set in parked mode and
* does not generate FQDAN notifications ; user is expected to
* dequeue from the queue based on polling or other user - defined
* method
@ -906,12 +943,69 @@ struct dpni_dest_cfg {
uint8_t priority ;
} ;
/**
* enum dpni_flc_type - DPNI FLC types
* @ DPNI_FLC_USER_DEFINED : select the FLC to be used for user defined value
* @ DPNI_FLC_STASH : select the FLC to be used for stash control
*/
enum dpni_flc_type {
DPNI_FLC_USER_DEFINED = 0 ,
DPNI_FLC_STASH = 1 ,
} ;
/**
* enum dpni_stash_size - DPNI FLC stashing size
* @ DPNI_STASH_SIZE_0B : no stash
* @ DPNI_STASH_SIZE_64B : stashes 64 bytes
* @ DPNI_STASH_SIZE_128B : stashes 128 bytes
* @ DPNI_STASH_SIZE_192B : stashes 192 bytes
*/
enum dpni_stash_size {
DPNI_STASH_SIZE_0B = 0 ,
DPNI_STASH_SIZE_64B = 1 ,
DPNI_STASH_SIZE_128B = 2 ,
DPNI_STASH_SIZE_192B = 3 ,
} ;
/* DPNI FLC stash options */
/* stashes the whole annotation area (up to 192 bytes) */
# define DPNI_FLC_STASH_FRAME_ANNOTATION 0x00000001
/**
* struct dpni_flc_cfg - Structure representing DPNI FLC configuration
* @ flc_type : FLC type
* @ options : Mask of available options ;
* use ' DPNI_FLC_STASH_ < X > ' values
* @ frame_data_size : Size of frame data to be stashed
* @ flow_context_size : Size of flow context to be stashed
* @ flow_context : 1. In case flc_type is ' DPNI_FLC_USER_DEFINED ' :
* this value will be provided in the frame descriptor
* ( FD [ FLC ] )
* 2. In case flc_type is ' DPNI_FLC_STASH ' :
* this value will be I / O virtual address of the
* flow - context ;
* Must be cacheline - aligned and DMA - able memory
*/
struct dpni_flc_cfg {
enum dpni_flc_type flc_type ;
uint32_t options ;
enum dpni_stash_size frame_data_size ;
enum dpni_stash_size flow_context_size ;
uint64_t flow_context ;
} ;
/* DPNI queue modification options */
/* Select to modify the user's context associated with the queue */
# define DPNI_QUEUE_OPT_USER_CTX 0x00000001
/* Select to modify the queue's destination */
# define DPNI_QUEUE_OPT_DEST 0x00000002
/** Select to modify the flow-context parameters;
* not applicable for Tx - conf / Err queues as the FD comes from the user
*/
# define DPNI_QUEUE_OPT_FLC 0x00000004
/**
* struct dpni_queue_cfg - Structure representing queue configuration
@ -922,11 +1016,17 @@ struct dpni_dest_cfg {
* is contained in ' options '
* @ dest_cfg : Queue destination parameters ;
* valid only if ' DPNI_QUEUE_OPT_DEST ' is contained in ' options '
* @ flc_cfg : Flow context configuration ; in case the TC ' s distribution
* is either NONE or HASH the FLC ' s settings of flow # 0 are used .
* in the case of FS ( flow - steering ) the flow ' s FLC settings
* are used .
* valid only if ' DPNI_QUEUE_OPT_FLC ' is contained in ' options '
*/
struct dpni_queue_cfg {
uint32_t options ;
uint64_t user_ctx ;
struct dpni_dest_cfg dest_cfg ;
struct dpni_flc_cfg flc_cfg ;
} ;
/**
@ -934,11 +1034,13 @@ struct dpni_queue_cfg {
* @ user_ctx : User context value provided in the frame descriptor of each
* dequeued frame
* @ dest_cfg : Queue destination configuration
* @ flc_cfg : Flow context configuration
* @ fqid : Virtual fqid value to be used for dequeue operations
*/
struct dpni_queue_attr {
uint64_t user_ctx ;
struct dpni_dest_cfg dest_cfg ;
struct dpni_flc_cfg flc_cfg ;
uint32_t fqid ;
} ;