mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 20:18:18 +00:00 
			
		
		
		
	Sphinx expects Return: and not @return to indicate a return value.
find . -name '*.c' -exec \
sed -i 's/^\(\s\)\*\(\s*\)@return\(\s\)/\1*\2Return:\3/' {} \;
find . -name '*.h' -exec \
sed -i 's/^\(\s\)\*\(\s*\)@return\(\s\)/\1*\2Return:\3/' {} \;
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
		
	
			
		
			
				
	
	
		
			234 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			234 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| /*
 | |
|  * Copyright (C) 2020 Marvell International Ltd.
 | |
|  *
 | |
|  * Interface to the hardware Input Packet Data unit.
 | |
|  */
 | |
| 
 | |
| #ifndef __CVMX_IPD_H__
 | |
| #define __CVMX_IPD_H__
 | |
| 
 | |
| #include "cvmx-pki.h"
 | |
| 
 | |
| /* CSR typedefs have been moved to cvmx-ipd-defs.h */
 | |
| 
 | |
| typedef cvmx_ipd_1st_mbuff_skip_t cvmx_ipd_mbuff_not_first_skip_t;
 | |
| typedef cvmx_ipd_1st_next_ptr_back_t cvmx_ipd_second_next_ptr_back_t;
 | |
| 
 | |
| typedef struct cvmx_ipd_tag_fields {
 | |
| 	u64 ipv6_src_ip : 1;
 | |
| 	u64 ipv6_dst_ip : 1;
 | |
| 	u64 ipv6_src_port : 1;
 | |
| 	u64 ipv6_dst_port : 1;
 | |
| 	u64 ipv6_next_header : 1;
 | |
| 	u64 ipv4_src_ip : 1;
 | |
| 	u64 ipv4_dst_ip : 1;
 | |
| 	u64 ipv4_src_port : 1;
 | |
| 	u64 ipv4_dst_port : 1;
 | |
| 	u64 ipv4_protocol : 1;
 | |
| 	u64 input_port : 1;
 | |
| } cvmx_ipd_tag_fields_t;
 | |
| 
 | |
| typedef struct cvmx_pip_port_config {
 | |
| 	u64 parse_mode;
 | |
| 	u64 tag_type;
 | |
| 	u64 tag_mode;
 | |
| 	cvmx_ipd_tag_fields_t tag_fields;
 | |
| } cvmx_pip_port_config_t;
 | |
| 
 | |
| typedef struct cvmx_ipd_config_struct {
 | |
| 	u64 first_mbuf_skip;
 | |
| 	u64 not_first_mbuf_skip;
 | |
| 	u64 ipd_enable;
 | |
| 	u64 enable_len_M8_fix;
 | |
| 	u64 cache_mode;
 | |
| 	cvmx_fpa_pool_config_t packet_pool;
 | |
| 	cvmx_fpa_pool_config_t wqe_pool;
 | |
| 	cvmx_pip_port_config_t port_config;
 | |
| } cvmx_ipd_config_t;
 | |
| 
 | |
| extern cvmx_ipd_config_t cvmx_ipd_cfg;
 | |
| 
 | |
| /**
 | |
|  * Gets the fpa pool number of packet pool
 | |
|  */
 | |
| static inline s64 cvmx_fpa_get_packet_pool(void)
 | |
| {
 | |
| 	return (cvmx_ipd_cfg.packet_pool.pool_num);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Gets the buffer size of packet pool buffer
 | |
|  */
 | |
| static inline u64 cvmx_fpa_get_packet_pool_block_size(void)
 | |
| {
 | |
| 	return (cvmx_ipd_cfg.packet_pool.buffer_size);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Gets the buffer count of packet pool
 | |
|  */
 | |
| static inline u64 cvmx_fpa_get_packet_pool_buffer_count(void)
 | |
| {
 | |
| 	return (cvmx_ipd_cfg.packet_pool.buffer_count);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Gets the fpa pool number of wqe pool
 | |
|  */
 | |
| static inline s64 cvmx_fpa_get_wqe_pool(void)
 | |
| {
 | |
| 	return (cvmx_ipd_cfg.wqe_pool.pool_num);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Gets the buffer size of wqe pool buffer
 | |
|  */
 | |
| static inline u64 cvmx_fpa_get_wqe_pool_block_size(void)
 | |
| {
 | |
| 	return (cvmx_ipd_cfg.wqe_pool.buffer_size);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Gets the buffer count of wqe pool
 | |
|  */
 | |
| static inline u64 cvmx_fpa_get_wqe_pool_buffer_count(void)
 | |
| {
 | |
| 	return (cvmx_ipd_cfg.wqe_pool.buffer_count);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Sets the ipd related configuration in internal structure which is then used
 | |
|  * for seting IPD hardware block
 | |
|  */
 | |
| int cvmx_ipd_set_config(cvmx_ipd_config_t ipd_config);
 | |
| 
 | |
| /**
 | |
|  * Gets the ipd related configuration from internal structure.
 | |
|  */
 | |
| void cvmx_ipd_get_config(cvmx_ipd_config_t *ipd_config);
 | |
| 
 | |
| /**
 | |
|  * Sets the internal FPA pool data structure for packet buffer pool.
 | |
|  * @param pool	fpa pool number yo use
 | |
|  * @param buffer_size	buffer size of pool
 | |
|  * @param buffer_count	number of buufers to allocate to pool
 | |
|  */
 | |
| void cvmx_ipd_set_packet_pool_config(s64 pool, u64 buffer_size, u64 buffer_count);
 | |
| 
 | |
| /**
 | |
|  * Sets the internal FPA pool data structure for wqe pool.
 | |
|  * @param pool	fpa pool number yo use
 | |
|  * @param buffer_size	buffer size of pool
 | |
|  * @param buffer_count	number of buufers to allocate to pool
 | |
|  */
 | |
| void cvmx_ipd_set_wqe_pool_config(s64 pool, u64 buffer_size, u64 buffer_count);
 | |
| 
 | |
| /**
 | |
|  * Gets the FPA packet buffer pool parameters.
 | |
|  */
 | |
| static inline void cvmx_fpa_get_packet_pool_config(s64 *pool, u64 *buffer_size, u64 *buffer_count)
 | |
| {
 | |
| 	if (pool)
 | |
| 		*pool = cvmx_ipd_cfg.packet_pool.pool_num;
 | |
| 	if (buffer_size)
 | |
| 		*buffer_size = cvmx_ipd_cfg.packet_pool.buffer_size;
 | |
| 	if (buffer_count)
 | |
| 		*buffer_count = cvmx_ipd_cfg.packet_pool.buffer_count;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Sets the FPA packet buffer pool parameters.
 | |
|  */
 | |
| static inline void cvmx_fpa_set_packet_pool_config(s64 pool, u64 buffer_size, u64 buffer_count)
 | |
| {
 | |
| 	cvmx_ipd_set_packet_pool_config(pool, buffer_size, buffer_count);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Gets the FPA WQE pool parameters.
 | |
|  */
 | |
| static inline void cvmx_fpa_get_wqe_pool_config(s64 *pool, u64 *buffer_size, u64 *buffer_count)
 | |
| {
 | |
| 	if (pool)
 | |
| 		*pool = cvmx_ipd_cfg.wqe_pool.pool_num;
 | |
| 	if (buffer_size)
 | |
| 		*buffer_size = cvmx_ipd_cfg.wqe_pool.buffer_size;
 | |
| 	if (buffer_count)
 | |
| 		*buffer_count = cvmx_ipd_cfg.wqe_pool.buffer_count;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Sets the FPA WQE pool parameters.
 | |
|  */
 | |
| static inline void cvmx_fpa_set_wqe_pool_config(s64 pool, u64 buffer_size, u64 buffer_count)
 | |
| {
 | |
| 	cvmx_ipd_set_wqe_pool_config(pool, buffer_size, buffer_count);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Configure IPD
 | |
|  *
 | |
|  * @param mbuff_size Packets buffer size in 8 byte words
 | |
|  * @param first_mbuff_skip
 | |
|  *                   Number of 8 byte words to skip in the first buffer
 | |
|  * @param not_first_mbuff_skip
 | |
|  *                   Number of 8 byte words to skip in each following buffer
 | |
|  * @param first_back Must be same as first_mbuff_skip / 128
 | |
|  * @param second_back
 | |
|  *                   Must be same as not_first_mbuff_skip / 128
 | |
|  * @param wqe_fpa_pool
 | |
|  *                   FPA pool to get work entries from
 | |
|  * @param cache_mode
 | |
|  * @param back_pres_enable_flag
 | |
|  *                   Enable or disable port back pressure at a global level.
 | |
|  *                   This should always be 1 as more accurate control can be
 | |
|  *                   found in IPD_PORTX_BP_PAGE_CNT[BP_ENB].
 | |
|  */
 | |
| void cvmx_ipd_config(u64 mbuff_size, u64 first_mbuff_skip, u64 not_first_mbuff_skip, u64 first_back,
 | |
| 		     u64 second_back, u64 wqe_fpa_pool, cvmx_ipd_mode_t cache_mode,
 | |
| 		     u64 back_pres_enable_flag);
 | |
| /**
 | |
|  * Enable IPD
 | |
|  */
 | |
| void cvmx_ipd_enable(void);
 | |
| 
 | |
| /**
 | |
|  * Disable IPD
 | |
|  */
 | |
| void cvmx_ipd_disable(void);
 | |
| 
 | |
| void __cvmx_ipd_free_ptr(void);
 | |
| 
 | |
| void cvmx_ipd_set_packet_pool_buffer_count(u64 buffer_count);
 | |
| void cvmx_ipd_set_wqe_pool_buffer_count(u64 buffer_count);
 | |
| 
 | |
| /**
 | |
|  * Setup Random Early Drop on a specific input queue
 | |
|  *
 | |
|  * @param queue  Input queue to setup RED on (0-7)
 | |
|  * @param pass_thresh
 | |
|  *               Packets will begin slowly dropping when there are less than
 | |
|  *               this many packet buffers free in FPA 0.
 | |
|  * @param drop_thresh
 | |
|  *               All incoming packets will be dropped when there are less
 | |
|  *               than this many free packet buffers in FPA 0.
 | |
|  * Return: Zero on success. Negative on failure
 | |
|  */
 | |
| int cvmx_ipd_setup_red_queue(int queue, int pass_thresh, int drop_thresh);
 | |
| 
 | |
| /**
 | |
|  * Setup Random Early Drop to automatically begin dropping packets.
 | |
|  *
 | |
|  * @param pass_thresh
 | |
|  *               Packets will begin slowly dropping when there are less than
 | |
|  *               this many packet buffers free in FPA 0.
 | |
|  * @param drop_thresh
 | |
|  *               All incoming packets will be dropped when there are less
 | |
|  *               than this many free packet buffers in FPA 0.
 | |
|  * Return: Zero on success. Negative on failure
 | |
|  */
 | |
| int cvmx_ipd_setup_red(int pass_thresh, int drop_thresh);
 | |
| 
 | |
| #endif /*  __CVMX_IPD_H__ */
 |