Path: blob/main/sys/contrib/ncsw/inc/flib/fsl_fman_port.h
48375 views
/*1* Copyright 2008-2013 Freescale Semiconductor Inc.2*3* Redistribution and use in source and binary forms, with or without4* modification, are permitted provided that the following conditions are met:5* * Redistributions of source code must retain the above copyright6* notice, this list of conditions and the following disclaimer.7* * Redistributions in binary form must reproduce the above copyright8* notice, this list of conditions and the following disclaimer in the9* documentation and/or other materials provided with the distribution.10* * Neither the name of Freescale Semiconductor nor the11* names of its contributors may be used to endorse or promote products12* derived from this software without specific prior written permission.13*14*15* ALTERNATIVELY, this software may be distributed under the terms of the16* GNU General Public License ("GPL") as published by the Free Software17* Foundation, either version 2 of that License or (at your option) any18* later version.19*20* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY21* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED22* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE23* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY24* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES25* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;26* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND27* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT28* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS29* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.30*/3132#ifndef __FSL_FMAN_PORT_H33#define __FSL_FMAN_PORT_H3435#include "fsl_fman_sp.h"3637/** @Collection Registers bit fields */3839/** @Description BMI defines */40#define BMI_EBD_EN 0x800000004142#define BMI_PORT_CFG_EN 0x8000000043#define BMI_PORT_CFG_FDOVR 0x0200000044#define BMI_PORT_CFG_IM 0x010000004546#define BMI_PORT_STATUS_BSY 0x800000004748#define BMI_DMA_ATTR_SWP_SHIFT FMAN_SP_DMA_ATTR_SWP_SHIFT49#define BMI_DMA_ATTR_IC_STASH_ON 0x1000000050#define BMI_DMA_ATTR_HDR_STASH_ON 0x0400000051#define BMI_DMA_ATTR_SG_STASH_ON 0x0100000052#define BMI_DMA_ATTR_WRITE_OPTIMIZE FMAN_SP_DMA_ATTR_WRITE_OPTIMIZE5354#define BMI_RX_FIFO_PRI_ELEVATION_SHIFT 1655#define BMI_RX_FIFO_THRESHOLD_ETHE 0x800000005657#define BMI_TX_FRAME_END_CS_IGNORE_SHIFT 2458#define BMI_RX_FRAME_END_CS_IGNORE_SHIFT 2459#define BMI_RX_FRAME_END_CUT_SHIFT 166061#define BMI_IC_TO_EXT_SHIFT FMAN_SP_IC_TO_EXT_SHIFT62#define BMI_IC_FROM_INT_SHIFT FMAN_SP_IC_FROM_INT_SHIFT6364#define BMI_INT_BUF_MARG_SHIFT 2865#define BMI_EXT_BUF_MARG_START_SHIFT FMAN_SP_EXT_BUF_MARG_START_SHIFT6667#define BMI_CMD_MR_LEAC 0x0020000068#define BMI_CMD_MR_SLEAC 0x0010000069#define BMI_CMD_MR_MA 0x0008000070#define BMI_CMD_MR_DEAS 0x0004000071#define BMI_CMD_RX_MR_DEF (BMI_CMD_MR_LEAC | \72BMI_CMD_MR_SLEAC | \73BMI_CMD_MR_MA | \74BMI_CMD_MR_DEAS)75#define BMI_CMD_TX_MR_DEF 076#define BMI_CMD_OP_MR_DEF (BMI_CMD_MR_DEAS | \77BMI_CMD_MR_MA)7879#define BMI_CMD_ATTR_ORDER 0x8000000080#define BMI_CMD_ATTR_SYNC 0x0200000081#define BMI_CMD_ATTR_COLOR_SHIFT 268283#define BMI_FIFO_PIPELINE_DEPTH_SHIFT 1284#define BMI_NEXT_ENG_FD_BITS_SHIFT 2485#define BMI_FRAME_END_CS_IGNORE_SHIFT 248687#define BMI_COUNTERS_EN 0x800000008889#define BMI_EXT_BUF_POOL_VALID FMAN_SP_EXT_BUF_POOL_VALID90#define BMI_EXT_BUF_POOL_EN_COUNTER FMAN_SP_EXT_BUF_POOL_EN_COUNTER91#define BMI_EXT_BUF_POOL_BACKUP FMAN_SP_EXT_BUF_POOL_BACKUP92#define BMI_EXT_BUF_POOL_ID_SHIFT 1693#define BMI_EXT_BUF_POOL_ID_MASK 0x003F000094#define BMI_POOL_DEP_NUM_OF_POOLS_SHIFT 169596#define BMI_TX_FIFO_MIN_FILL_SHIFT 1697#define BMI_TX_FIFO_PIPELINE_DEPTH_SHIFT 129899#define MAX_PERFORMANCE_TASK_COMP 64100#define MAX_PERFORMANCE_RX_QUEUE_COMP 64101#define MAX_PERFORMANCE_TX_QUEUE_COMP 8102#define MAX_PERFORMANCE_DMA_COMP 16103#define MAX_PERFORMANCE_FIFO_COMP 1024104105#define BMI_PERFORMANCE_TASK_COMP_SHIFT 24106#define BMI_PERFORMANCE_QUEUE_COMP_SHIFT 16107#define BMI_PERFORMANCE_DMA_COMP_SHIFT 12108109#define BMI_RATE_LIMIT_GRAN_TX 16000 /* In Kbps */110#define BMI_RATE_LIMIT_GRAN_OP 10000 /* In frames */111#define BMI_RATE_LIMIT_MAX_RATE_IN_GRAN_UNITS 1024112#define BMI_RATE_LIMIT_MAX_BURST_SIZE 1024 /* In KBytes */113#define BMI_RATE_LIMIT_MAX_BURST_SHIFT 16114#define BMI_RATE_LIMIT_HIGH_BURST_SIZE_GRAN 0x80000000115#define BMI_RATE_LIMIT_SCALE_TSBS_SHIFT 16116#define BMI_RATE_LIMIT_SCALE_EN 0x80000000117#define BMI_SG_DISABLE FMAN_SP_SG_DISABLE118119/** @Description QMI defines */120#define QMI_PORT_CFG_EN 0x80000000121#define QMI_PORT_CFG_EN_COUNTERS 0x10000000122123#define QMI_PORT_STATUS_DEQ_TNUM_BSY 0x80000000124#define QMI_PORT_STATUS_DEQ_FD_BSY 0x20000000125126#define QMI_DEQ_CFG_PRI 0x80000000127#define QMI_DEQ_CFG_TYPE1 0x10000000128#define QMI_DEQ_CFG_TYPE2 0x20000000129#define QMI_DEQ_CFG_TYPE3 0x30000000130#define QMI_DEQ_CFG_PREFETCH_PARTIAL 0x01000000131#define QMI_DEQ_CFG_PREFETCH_FULL 0x03000000132#define QMI_DEQ_CFG_SP_MASK 0xf133#define QMI_DEQ_CFG_SP_SHIFT 20134135136/** @Description General port defines */137#define FMAN_PORT_EXT_POOLS_NUM(fm_rev_maj) \138(((fm_rev_maj) == 4) ? 4 : 8)139#define FMAN_PORT_MAX_EXT_POOLS_NUM 8140#define FMAN_PORT_OBS_EXT_POOLS_NUM 2141#define FMAN_PORT_CG_MAP_NUM 8142#define FMAN_PORT_PRS_RESULT_WORDS_NUM 8143#define FMAN_PORT_BMI_FIFO_UNITS 0x100144#define FMAN_PORT_IC_OFFSET_UNITS 0x10145146147/** @Collection FM Port Register Map */148149/** @Description BMI Rx port register map */150struct fman_port_rx_bmi_regs {151uint32_t fmbm_rcfg; /**< Rx Configuration */152uint32_t fmbm_rst; /**< Rx Status */153uint32_t fmbm_rda; /**< Rx DMA attributes*/154uint32_t fmbm_rfp; /**< Rx FIFO Parameters*/155uint32_t fmbm_rfed; /**< Rx Frame End Data*/156uint32_t fmbm_ricp; /**< Rx Internal Context Parameters*/157uint32_t fmbm_rim; /**< Rx Internal Buffer Margins*/158uint32_t fmbm_rebm; /**< Rx External Buffer Margins*/159uint32_t fmbm_rfne; /**< Rx Frame Next Engine*/160uint32_t fmbm_rfca; /**< Rx Frame Command Attributes.*/161uint32_t fmbm_rfpne; /**< Rx Frame Parser Next Engine*/162uint32_t fmbm_rpso; /**< Rx Parse Start Offset*/163uint32_t fmbm_rpp; /**< Rx Policer Profile */164uint32_t fmbm_rccb; /**< Rx Coarse Classification Base */165uint32_t fmbm_reth; /**< Rx Excessive Threshold */166uint32_t reserved003c[1]; /**< (0x03C 0x03F) */167uint32_t fmbm_rprai[FMAN_PORT_PRS_RESULT_WORDS_NUM];168/**< Rx Parse Results Array Init*/169uint32_t fmbm_rfqid; /**< Rx Frame Queue ID*/170uint32_t fmbm_refqid; /**< Rx Error Frame Queue ID*/171uint32_t fmbm_rfsdm; /**< Rx Frame Status Discard Mask*/172uint32_t fmbm_rfsem; /**< Rx Frame Status Error Mask*/173uint32_t fmbm_rfene; /**< Rx Frame Enqueue Next Engine */174uint32_t reserved0074[0x2]; /**< (0x074-0x07C) */175uint32_t fmbm_rcmne; /**< Rx Frame Continuous Mode Next Engine */176uint32_t reserved0080[0x20];/**< (0x080 0x0FF) */177uint32_t fmbm_ebmpi[FMAN_PORT_MAX_EXT_POOLS_NUM];178/**< Buffer Manager pool Information-*/179uint32_t fmbm_acnt[FMAN_PORT_MAX_EXT_POOLS_NUM];180/**< Allocate Counter-*/181uint32_t reserved0130[8];182/**< 0x130/0x140 - 0x15F reserved -*/183uint32_t fmbm_rcgm[FMAN_PORT_CG_MAP_NUM];184/**< Congestion Group Map*/185uint32_t fmbm_mpd; /**< BM Pool Depletion */186uint32_t reserved0184[0x1F]; /**< (0x184 0x1FF) */187uint32_t fmbm_rstc; /**< Rx Statistics Counters*/188uint32_t fmbm_rfrc; /**< Rx Frame Counter*/189uint32_t fmbm_rfbc; /**< Rx Bad Frames Counter*/190uint32_t fmbm_rlfc; /**< Rx Large Frames Counter*/191uint32_t fmbm_rffc; /**< Rx Filter Frames Counter*/192uint32_t fmbm_rfdc; /**< Rx Frame Discard Counter*/193uint32_t fmbm_rfldec; /**< Rx Frames List DMA Error Counter*/194uint32_t fmbm_rodc; /**< Rx Out of Buffers Discard nntr*/195uint32_t fmbm_rbdc; /**< Rx Buffers Deallocate Counter*/196uint32_t reserved0224[0x17]; /**< (0x224 0x27F) */197uint32_t fmbm_rpc; /**< Rx Performance Counters*/198uint32_t fmbm_rpcp; /**< Rx Performance Count Parameters*/199uint32_t fmbm_rccn; /**< Rx Cycle Counter*/200uint32_t fmbm_rtuc; /**< Rx Tasks Utilization Counter*/201uint32_t fmbm_rrquc; /**< Rx Receive Queue Utilization cntr*/202uint32_t fmbm_rduc; /**< Rx DMA Utilization Counter*/203uint32_t fmbm_rfuc; /**< Rx FIFO Utilization Counter*/204uint32_t fmbm_rpac; /**< Rx Pause Activation Counter*/205uint32_t reserved02a0[0x18]; /**< (0x2A0 0x2FF) */206uint32_t fmbm_rdbg; /**< Rx Debug-*/207};208209/** @Description BMI Tx port register map */210struct fman_port_tx_bmi_regs {211uint32_t fmbm_tcfg; /**< Tx Configuration */212uint32_t fmbm_tst; /**< Tx Status */213uint32_t fmbm_tda; /**< Tx DMA attributes */214uint32_t fmbm_tfp; /**< Tx FIFO Parameters */215uint32_t fmbm_tfed; /**< Tx Frame End Data */216uint32_t fmbm_ticp; /**< Tx Internal Context Parameters */217uint32_t fmbm_tfdne; /**< Tx Frame Dequeue Next Engine. */218uint32_t fmbm_tfca; /**< Tx Frame Command attribute. */219uint32_t fmbm_tcfqid; /**< Tx Confirmation Frame Queue ID. */220uint32_t fmbm_tefqid; /**< Tx Frame Error Queue ID */221uint32_t fmbm_tfene; /**< Tx Frame Enqueue Next Engine */222uint32_t fmbm_trlmts; /**< Tx Rate Limiter Scale */223uint32_t fmbm_trlmt; /**< Tx Rate Limiter */224uint32_t reserved0034[0x0e]; /**< (0x034-0x6c) */225uint32_t fmbm_tccb; /**< Tx Coarse Classification base */226uint32_t fmbm_tfne; /**< Tx Frame Next Engine */227uint32_t fmbm_tpfcm[0x02]; /**< Tx Priority based Flow Control (PFC) Mapping */228uint32_t fmbm_tcmne; /**< Tx Frame Continuous Mode Next Engine */229uint32_t reserved0080[0x60]; /**< (0x080-0x200) */230uint32_t fmbm_tstc; /**< Tx Statistics Counters */231uint32_t fmbm_tfrc; /**< Tx Frame Counter */232uint32_t fmbm_tfdc; /**< Tx Frames Discard Counter */233uint32_t fmbm_tfledc; /**< Tx Frame len error discard cntr */234uint32_t fmbm_tfufdc; /**< Tx Frame unsprt frmt discard cntr*/235uint32_t fmbm_tbdc; /**< Tx Buffers Deallocate Counter */236uint32_t reserved0218[0x1A]; /**< (0x218-0x280) */237uint32_t fmbm_tpc; /**< Tx Performance Counters*/238uint32_t fmbm_tpcp; /**< Tx Performance Count Parameters*/239uint32_t fmbm_tccn; /**< Tx Cycle Counter*/240uint32_t fmbm_ttuc; /**< Tx Tasks Utilization Counter*/241uint32_t fmbm_ttcquc; /**< Tx Transmit conf Q util Counter*/242uint32_t fmbm_tduc; /**< Tx DMA Utilization Counter*/243uint32_t fmbm_tfuc; /**< Tx FIFO Utilization Counter*/244};245246/** @Description BMI O/H port register map */247struct fman_port_oh_bmi_regs {248uint32_t fmbm_ocfg; /**< O/H Configuration */249uint32_t fmbm_ost; /**< O/H Status */250uint32_t fmbm_oda; /**< O/H DMA attributes */251uint32_t fmbm_oicp; /**< O/H Internal Context Parameters */252uint32_t fmbm_ofdne; /**< O/H Frame Dequeue Next Engine */253uint32_t fmbm_ofne; /**< O/H Frame Next Engine */254uint32_t fmbm_ofca; /**< O/H Frame Command Attributes. */255uint32_t fmbm_ofpne; /**< O/H Frame Parser Next Engine */256uint32_t fmbm_opso; /**< O/H Parse Start Offset */257uint32_t fmbm_opp; /**< O/H Policer Profile */258uint32_t fmbm_occb; /**< O/H Coarse Classification base */259uint32_t fmbm_oim; /**< O/H Internal margins*/260uint32_t fmbm_ofp; /**< O/H Fifo Parameters*/261uint32_t fmbm_ofed; /**< O/H Frame End Data*/262uint32_t reserved0030[2]; /**< (0x038 - 0x03F) */263uint32_t fmbm_oprai[FMAN_PORT_PRS_RESULT_WORDS_NUM];264/**< O/H Parse Results Array Initialization */265uint32_t fmbm_ofqid; /**< O/H Frame Queue ID */266uint32_t fmbm_oefqid; /**< O/H Error Frame Queue ID */267uint32_t fmbm_ofsdm; /**< O/H Frame Status Discard Mask */268uint32_t fmbm_ofsem; /**< O/H Frame Status Error Mask */269uint32_t fmbm_ofene; /**< O/H Frame Enqueue Next Engine */270uint32_t fmbm_orlmts; /**< O/H Rate Limiter Scale */271uint32_t fmbm_orlmt; /**< O/H Rate Limiter */272uint32_t fmbm_ocmne; /**< O/H Continuous Mode Next Engine */273uint32_t reserved0080[0x20]; /**< 0x080 - 0x0FF Reserved */274uint32_t fmbm_oebmpi[2]; /**< Buf Mngr Observed Pool Info */275uint32_t reserved0108[0x16]; /**< 0x108 - 0x15F Reserved */276uint32_t fmbm_ocgm[FMAN_PORT_CG_MAP_NUM]; /**< Observed Congestion Group Map */277uint32_t fmbm_ompd; /**< Observed BMan Pool Depletion */278uint32_t reserved0184[0x1F]; /**< 0x184 - 0x1FF Reserved */279uint32_t fmbm_ostc; /**< O/H Statistics Counters */280uint32_t fmbm_ofrc; /**< O/H Frame Counter */281uint32_t fmbm_ofdc; /**< O/H Frames Discard Counter */282uint32_t fmbm_ofledc; /**< O/H Frames Len Err Discard Cntr */283uint32_t fmbm_ofufdc; /**< O/H Frames Unsprtd Discard Cutr */284uint32_t fmbm_offc; /**< O/H Filter Frames Counter */285uint32_t fmbm_ofwdc; /**< Rx Frames WRED Discard Counter */286uint32_t fmbm_ofldec; /**< O/H Frames List DMA Error Cntr */287uint32_t fmbm_obdc; /**< O/H Buffers Deallocate Counter */288uint32_t reserved0218[0x17]; /**< (0x218 - 0x27F) */289uint32_t fmbm_opc; /**< O/H Performance Counters */290uint32_t fmbm_opcp; /**< O/H Performance Count Parameters */291uint32_t fmbm_occn; /**< O/H Cycle Counter */292uint32_t fmbm_otuc; /**< O/H Tasks Utilization Counter */293uint32_t fmbm_oduc; /**< O/H DMA Utilization Counter */294uint32_t fmbm_ofuc; /**< O/H FIFO Utilization Counter */295};296297/** @Description BMI port register map */298union fman_port_bmi_regs {299struct fman_port_rx_bmi_regs rx;300struct fman_port_tx_bmi_regs tx;301struct fman_port_oh_bmi_regs oh;302};303304/** @Description QMI port register map */305struct fman_port_qmi_regs {306uint32_t fmqm_pnc; /**< PortID n Configuration Register */307uint32_t fmqm_pns; /**< PortID n Status Register */308uint32_t fmqm_pnts; /**< PortID n Task Status Register */309uint32_t reserved00c[4]; /**< 0xn00C - 0xn01B */310uint32_t fmqm_pnen; /**< PortID n Enqueue NIA Register */311uint32_t fmqm_pnetfc; /**< PortID n Enq Total Frame Counter */312uint32_t reserved024[2]; /**< 0xn024 - 0x02B */313uint32_t fmqm_pndn; /**< PortID n Dequeue NIA Register */314uint32_t fmqm_pndc; /**< PortID n Dequeue Config Register */315uint32_t fmqm_pndtfc; /**< PortID n Dequeue tot Frame cntr */316uint32_t fmqm_pndfdc; /**< PortID n Dequeue FQID Dflt Cntr */317uint32_t fmqm_pndcc; /**< PortID n Dequeue Confirm Counter */318};319320321enum fman_port_dma_swap {322E_FMAN_PORT_DMA_NO_SWAP, /**< No swap, transfer data as is */323E_FMAN_PORT_DMA_SWAP_LE,324/**< The transferred data should be swapped in PPC Little Endian mode */325E_FMAN_PORT_DMA_SWAP_BE326/**< The transferred data should be swapped in Big Endian mode */327};328329/* Default port color */330enum fman_port_color {331E_FMAN_PORT_COLOR_GREEN, /**< Default port color is green */332E_FMAN_PORT_COLOR_YELLOW, /**< Default port color is yellow */333E_FMAN_PORT_COLOR_RED, /**< Default port color is red */334E_FMAN_PORT_COLOR_OVERRIDE /**< Ignore color */335};336337/* QMI dequeue from the SP channel - types */338enum fman_port_deq_type {339E_FMAN_PORT_DEQ_BY_PRI,340/**< Priority precedence and Intra-Class scheduling */341E_FMAN_PORT_DEQ_ACTIVE_FQ,342/**< Active FQ precedence and Intra-Class scheduling */343E_FMAN_PORT_DEQ_ACTIVE_FQ_NO_ICS344/**< Active FQ precedence and override Intra-Class scheduling */345};346347/* QMI dequeue prefetch modes */348enum fman_port_deq_prefetch {349E_FMAN_PORT_DEQ_NO_PREFETCH, /**< No prefetch mode */350E_FMAN_PORT_DEQ_PART_PREFETCH, /**< Partial prefetch mode */351E_FMAN_PORT_DEQ_FULL_PREFETCH /**< Full prefetch mode */352};353354/* Parameters for defining performance counters behavior */355struct fman_port_perf_cnt_params {356uint8_t task_val; /**< Task compare value */357uint8_t queue_val;358/**< Rx or Tx conf queue compare value (unused for O/H ports) */359uint8_t dma_val; /**< Dma compare value */360uint32_t fifo_val; /**< Fifo compare value (in bytes) */361};362363/** @Description FM Port configuration structure, used at init */364struct fman_port_cfg {365struct fman_port_perf_cnt_params perf_cnt_params;366/* BMI parameters */367enum fman_port_dma_swap dma_swap_data;368bool dma_ic_stash_on;369bool dma_header_stash_on;370bool dma_sg_stash_on;371bool dma_write_optimize;372uint16_t ic_ext_offset;373uint8_t ic_int_offset;374uint16_t ic_size;375enum fman_port_color color;376bool sync_req;377bool discard_override;378uint8_t checksum_bytes_ignore;379uint8_t rx_cut_end_bytes;380uint32_t rx_pri_elevation;381uint32_t rx_fifo_thr;382uint8_t rx_fd_bits;383uint8_t int_buf_start_margin;384uint16_t ext_buf_start_margin;385uint16_t ext_buf_end_margin;386uint32_t tx_fifo_min_level;387uint32_t tx_fifo_low_comf_level;388uint8_t tx_fifo_deq_pipeline_depth;389bool stats_counters_enable;390bool perf_counters_enable;391/* QMI parameters */392bool deq_high_pri;393enum fman_port_deq_type deq_type;394enum fman_port_deq_prefetch deq_prefetch_opt;395uint16_t deq_byte_cnt;396bool queue_counters_enable;397bool no_scatter_gather;398int errata_A006675;399int errata_A006320;400int excessive_threshold_register;401int fmbm_rebm_has_sgd;402int fmbm_tfne_has_features;403int qmi_deq_options_support;404};405406enum fman_port_type {407E_FMAN_PORT_TYPE_OP = 0,408/**< Offline parsing port, shares id-s with409* host command, so must have exclusive id-s */410E_FMAN_PORT_TYPE_RX, /**< 1G Rx port */411E_FMAN_PORT_TYPE_RX_10G, /**< 10G Rx port */412E_FMAN_PORT_TYPE_TX, /**< 1G Tx port */413E_FMAN_PORT_TYPE_TX_10G, /**< 10G Tx port */414E_FMAN_PORT_TYPE_DUMMY,415E_FMAN_PORT_TYPE_HC = E_FMAN_PORT_TYPE_DUMMY416/**< Host command port, shares id-s with417* offline parsing ports, so must have exclusive id-s */418};419420struct fman_port_params {421uint32_t discard_mask;422uint32_t err_mask;423uint32_t dflt_fqid;424uint32_t err_fqid;425uint8_t deq_sp;426bool dont_release_buf;427};428429/* Port context - used by most API functions */430struct fman_port {431enum fman_port_type type;432uint8_t fm_rev_maj;433uint8_t fm_rev_min;434union fman_port_bmi_regs *bmi_regs;435struct fman_port_qmi_regs *qmi_regs;436bool im_en;437uint8_t ext_pools_num;438};439440/** @Description External buffer pools configuration */441struct fman_port_bpools {442uint8_t count; /**< Num of pools to set up */443bool counters_enable; /**< Enable allocate counters */444uint8_t grp_bp_depleted_num;445/**< Number of depleted pools - if reached the BMI indicates446* the MAC to send a pause frame */447struct {448uint8_t bpid; /**< BM pool ID */449uint16_t size;450/**< Pool's size - must be in ascending order */451bool is_backup;452/**< If this is a backup pool */453bool grp_bp_depleted;454/**< Consider this buffer in multiple pools depletion criteria*/455bool single_bp_depleted;456/**< Consider this buffer in single pool depletion criteria */457bool pfc_priorities_en;458} bpool[FMAN_PORT_MAX_EXT_POOLS_NUM];459};460461enum fman_port_rate_limiter_scale_down {462E_FMAN_PORT_RATE_DOWN_NONE,463E_FMAN_PORT_RATE_DOWN_BY_2,464E_FMAN_PORT_RATE_DOWN_BY_4,465E_FMAN_PORT_RATE_DOWN_BY_8466};467468/* Rate limiter configuration */469struct fman_port_rate_limiter {470uint8_t count_1micro_bit;471bool high_burst_size_gran;472/**< Defines burst_size granularity for OP ports; when TRUE,473* burst_size below counts in frames, otherwise in 10^3 frames */474uint16_t burst_size;475/**< Max burst size, in KBytes for Tx port, according to476* high_burst_size_gran definition for OP port */477uint32_t rate;478/**< In Kbps for Tx port, in frames/sec for OP port */479enum fman_port_rate_limiter_scale_down rate_factor;480};481482/* BMI statistics counters */483enum fman_port_stats_counters {484E_FMAN_PORT_STATS_CNT_FRAME,485/**< Number of processed frames; valid for all ports */486E_FMAN_PORT_STATS_CNT_DISCARD,487/**< For Rx ports - frames discarded by QMAN, for Tx or O/H ports -488* frames discarded due to DMA error; valid for all ports */489E_FMAN_PORT_STATS_CNT_DEALLOC_BUF,490/**< Number of buffer deallocate operations; valid for all ports */491E_FMAN_PORT_STATS_CNT_RX_BAD_FRAME,492/**< Number of bad Rx frames, like CRC error, Rx FIFO overflow etc;493* valid for Rx ports only */494E_FMAN_PORT_STATS_CNT_RX_LARGE_FRAME,495/**< Number of Rx oversized frames, that is frames exceeding max frame496* size configured for the corresponding ETH controller;497* valid for Rx ports only */498E_FMAN_PORT_STATS_CNT_RX_OUT_OF_BUF,499/**< Frames discarded due to lack of external buffers; valid for500* Rx ports only */501E_FMAN_PORT_STATS_CNT_LEN_ERR,502/**< Frames discarded due to frame length error; valid for Tx and503* O/H ports only */504E_FMAN_PORT_STATS_CNT_UNSUPPORTED_FORMAT,505/**< Frames discarded due to unsupported FD format; valid for Tx506* and O/H ports only */507E_FMAN_PORT_STATS_CNT_FILTERED_FRAME,508/**< Number of frames filtered out by PCD module; valid for509* Rx and OP ports only */510E_FMAN_PORT_STATS_CNT_DMA_ERR,511/**< Frames rejected by QMAN that were not able to release their512* buffers due to DMA error; valid for Rx and O/H ports only */513E_FMAN_PORT_STATS_CNT_WRED_DISCARD514/**< Frames going through O/H port that were not able to to enter the515* return queue due to WRED algorithm; valid for O/H ports only */516};517518/* BMI performance counters */519enum fman_port_perf_counters {520E_FMAN_PORT_PERF_CNT_CYCLE, /**< Cycle counter */521E_FMAN_PORT_PERF_CNT_TASK_UTIL, /**< Tasks utilization counter */522E_FMAN_PORT_PERF_CNT_QUEUE_UTIL,523/**< For Rx ports - Rx queue utilization, for Tx ports - Tx conf queue524* utilization; not valid for O/H ports */525E_FMAN_PORT_PERF_CNT_DMA_UTIL, /**< DMA utilization counter */526E_FMAN_PORT_PERF_CNT_FIFO_UTIL, /**< FIFO utilization counter */527E_FMAN_PORT_PERF_CNT_RX_PAUSE528/**< Number of cycles in which Rx pause activation control is on;529* valid for Rx ports only */530};531532/* QMI counters */533enum fman_port_qmi_counters {534E_FMAN_PORT_ENQ_TOTAL, /**< EnQ tot frame cntr */535E_FMAN_PORT_DEQ_TOTAL, /**< DeQ tot frame cntr; invalid for Rx ports */536E_FMAN_PORT_DEQ_FROM_DFLT,537/**< Dequeue from default FQID counter not valid for Rx ports */538E_FMAN_PORT_DEQ_CONFIRM /**< DeQ confirm cntr invalid for Rx ports */539};540541542/** @Collection FM Port API */543void fman_port_defconfig(struct fman_port_cfg *cfg, enum fman_port_type type);544int fman_port_init(struct fman_port *port,545struct fman_port_cfg *cfg,546struct fman_port_params *params);547int fman_port_enable(struct fman_port *port);548int fman_port_disable(const struct fman_port *port);549int fman_port_set_bpools(const struct fman_port *port,550const struct fman_port_bpools *bp);551int fman_port_set_rate_limiter(struct fman_port *port,552struct fman_port_rate_limiter *rate_limiter);553int fman_port_delete_rate_limiter(struct fman_port *port);554int fman_port_set_err_mask(struct fman_port *port, uint32_t err_mask);555int fman_port_set_discard_mask(struct fman_port *port, uint32_t discard_mask);556int fman_port_modify_rx_fd_bits(struct fman_port *port,557uint8_t rx_fd_bits,558bool add);559int fman_port_set_perf_cnt_params(struct fman_port *port,560struct fman_port_perf_cnt_params *params);561int fman_port_set_stats_cnt_mode(struct fman_port *port, bool enable);562int fman_port_set_perf_cnt_mode(struct fman_port *port, bool enable);563int fman_port_set_queue_cnt_mode(struct fman_port *port, bool enable);564int fman_port_set_bpool_cnt_mode(struct fman_port *port,565uint8_t bpid,566bool enable);567uint32_t fman_port_get_stats_counter(struct fman_port *port,568enum fman_port_stats_counters counter);569void fman_port_set_stats_counter(struct fman_port *port,570enum fman_port_stats_counters counter,571uint32_t value);572uint32_t fman_port_get_perf_counter(struct fman_port *port,573enum fman_port_perf_counters counter);574void fman_port_set_perf_counter(struct fman_port *port,575enum fman_port_perf_counters counter,576uint32_t value);577uint32_t fman_port_get_qmi_counter(struct fman_port *port,578enum fman_port_qmi_counters counter);579void fman_port_set_qmi_counter(struct fman_port *port,580enum fman_port_qmi_counters counter,581uint32_t value);582uint32_t fman_port_get_bpool_counter(struct fman_port *port, uint8_t bpid);583void fman_port_set_bpool_counter(struct fman_port *port,584uint8_t bpid,585uint32_t value);586int fman_port_add_congestion_grps(struct fman_port *port,587uint32_t grps_map[FMAN_PORT_CG_MAP_NUM]);588int fman_port_remove_congestion_grps(struct fman_port *port,589uint32_t grps_map[FMAN_PORT_CG_MAP_NUM]);590591592#endif /* __FSL_FMAN_PORT_H */593594595