NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
DOCA PCC Device
Collaboration diagram for DOCA PCC Device:

Modules

 DOCA PCC Device Algorithm Access
 
 DOCA PCC Device Common
 
 DOCA PCC Device Event
 
 DOCA PCC Device Services
 
 DOCA PCC Device Utilities
 
 DOCA PCC Device Notification Point
 

Data Structures

struct  doca_pcc_dev_results
 CC algorithm results. More...
 

Macros

#define DOCA_DPA_DEVICE
 declares that we are compiling for the DPA Device More...
 
#define DOCA_PCC_DEV_ACK_NACK_TX_EVENT_DISABLED_SUPPORTED   (1)
 
#define DOCA_PCC_DEV_TX_FLAG_ACK_EXPECTED   (1 << 0)
 TX Flag: Ack expected. More...
 
#define DOCA_PCC_DEV_TX_FLAG_OVERLOADED   (1 << 1)
 TX Flag: Overloaded: More...
 
#define DOCA_PCC_DEV_TX_FLAG_RTT_REQ_SENT   (1 << 2)
 TX Flag: RTT packet sent. More...
 
#define DOCA_PCC_DEV_LOG_MAX_RATE   (20) /* rate format in fixed point 20 */
 defines the fixed point fraction size of the rate limiter More...
 
#define DOCA_PCC_DEV_MAX_RATE   (1U << DOCA_PCC_DEV_LOG_MAX_RATE)
 Max rate in rate limiter fixed point. More...
 
#define DOCA_PCC_DEV_DEFAULT_RATE   ((DOCA_PCC_DEV_MAX_RATE >> 8) > (1) ? (DOCA_PCC_DEV_MAX_RATE >> 8) : (1))
 Default rate. The user overrides the default in the user algo function. More...
 
#define DOCA_PCC_DEV_MAX_NUM_USER_SLOTS   (8)
 Max number of algo slots supported by the lib. More...
 
#define DOCA_PCC_DEV_MAX_NUM_ALGOS   (8)
 Max number of algos supported by the lib. More...
 
#define DOCA_PCC_DEV_MAX_NUM_PARAMS_PER_ALGO   (0x26)
 Max number of parameters per algo supported by the lib. More...
 
#define DOCA_PCC_DEV_MAX_NUM_COUNTERS_PER_ALGO   (0x3F)
 Max number of counters per algo supported by the lib. More...
 
#define DOCA_PCC_DEV_ALGO_SLOT_INTERNAL   (0xF)
 Reserved algo slot for internal algo provided by the lib. More...
 
#define DOCA_PCC_DEV_ALGO_INDEX_INTERNAL   (0xF)
 Reserved algo index for internal algo provided by the lib. More...
 

Typedefs

typedef struct doca_pcc_dev_results doca_pcc_dev_results_t
 CC algorithm results. More...
 

Enumerations

enum  doca_pcc_dev_event_type_enum {
  DOCA_PCC_DEV_EVNT_NULL = 0 , DOCA_PCC_DEV_EVNT_FW = 1 , DOCA_PCC_DEV_EVNT_ROCE_CNP = 2 , DOCA_PCC_DEV_EVNT_ROCE_TX = 3 ,
  DOCA_PCC_DEV_EVNT_ROCE_ACK = 4 , DOCA_PCC_DEV_EVNT_ROCE_NACK = 5 , DOCA_PCC_DEV_EVNT_RTT = 6 , DOCA_PCC_DEV_EVNT_ROCE_TX_FOR_ACK_NACK = 31
}
 CC event type. More...
 
enum  doca_pcc_dev_nack_event_sub_type_enum { DOCA_PCC_DEV_NACK_EVNT_NULL = 0 , DOCA_PCC_DEV_NACK_EVNT_RNR = 1 , DOCA_PCC_DEV_NACK_EVNT_OOS = 2 , DOCA_PCC_DEV_NACK_EVNT_DUP_READ = 3 }
 CC Nack event subtypes. More...
 

Functions

DOCA_STABLE void doca_pcc_dev_default_internal_algo (doca_pcc_dev_algo_ctxt_t *algo_ctxt, doca_pcc_dev_event_t *event, const doca_pcc_dev_attr_t *attr, doca_pcc_dev_results_t *results)
 Implements the internal CC algorithm provided by the lib. More...
 
DOCA_STABLE void doca_pcc_dev_user_algo (doca_pcc_dev_algo_ctxt_t *algo_ctxt, doca_pcc_dev_event_t *event, const doca_pcc_dev_attr_t *attr, doca_pcc_dev_results_t *results)
 Entry point to the user algorithm handling code. More...
 
DOCA_STABLE void doca_pcc_dev_user_init (uint32_t *disable_event_bitmask)
 Entry point to the user one time initialization code. More...
 
DOCA_STABLE doca_pcc_dev_error_t doca_pcc_dev_user_set_algo_params (uint32_t port_num, uint32_t algo_slot, uint32_t param_id_base, uint32_t param_num, const uint32_t *new_param_values, uint32_t *params)
 User callback executed then parameters are set. More...
 
DOCA_EXPERIMENTAL doca_pcc_dev_error_t doca_pcc_dev_custom_header_set (doca_pcc_dev_algo_ctxt_t *algo_ctxt, doca_pcc_dev_event_t *event, uint32_t *header, uint32_t header_size, uint32_t wait_completed)
 User callback executed to set custom header in CCMAD probe packet. More...
 
typedef struct mlnx_cc_algo_ctxt_t doca_pcc_dev_algo_ctxt_t
 
typedef struct mlnx_cc_attr_t doca_pcc_dev_attr_t
 
typedef struct mlnx_cc_event_t doca_pcc_dev_event_t
 
typedef struct mlnx_cc_event_general_attr_t doca_pcc_dev_event_general_attr_t
 
typedef struct mlnx_cc_roce_tx_cntrs_t doca_pcc_dev_roce_tx_cntrs_t
 
typedef struct mlnx_cc_roce_tx_t doca_pcc_dev_roce_tx_t
 
typedef struct mlnx_cc_ack_nack_cnp_extra_t doca_pcc_dev_ack_nack_cnp_extra_t
 
typedef struct mlnx_cc_ack_nack_cnp_t doca_pcc_dev_ack_nack_cnp_t
 
typedef struct mlnx_cc_rtt_tstamp_t doca_pcc_dev_rtt_tstamp_t
 
typedef struct mlnx_cc_fw_data_t doca_pcc_dev_fw_data_t
 
typedef union mlnx_cc_event_spec_attr_t doca_pcc_dev_event_spec_attr_t
 
typedef struct mlnx_cc_roce_tx_extra_t doca_pcc_dev_roce_tx_extra_t
 

Detailed Description

DOCA PCC Device library. For more details please refer to the user guide on DOCA devzone.

Macro Definition Documentation

◆ DOCA_DPA_DEVICE

#define DOCA_DPA_DEVICE

declares that we are compiling for the DPA Device

Note
Must be defined before the first API use/include of DOCA

Definition at line 31 of file doca_pcc_dev.h.

◆ DOCA_PCC_DEV_ACK_NACK_TX_EVENT_DISABLED_SUPPORTED

#define DOCA_PCC_DEV_ACK_NACK_TX_EVENT_DISABLED_SUPPORTED   (1)

Flag to check if disabling ACK/NACK is supported

Definition at line 81 of file doca_pcc_dev.h.

◆ DOCA_PCC_DEV_ALGO_INDEX_INTERNAL

#define DOCA_PCC_DEV_ALGO_INDEX_INTERNAL   (0xF)

Reserved algo index for internal algo provided by the lib.

Definition at line 144 of file doca_pcc_dev.h.

◆ DOCA_PCC_DEV_ALGO_SLOT_INTERNAL

#define DOCA_PCC_DEV_ALGO_SLOT_INTERNAL   (0xF)

Reserved algo slot for internal algo provided by the lib.

Definition at line 139 of file doca_pcc_dev.h.

◆ DOCA_PCC_DEV_DEFAULT_RATE

#define DOCA_PCC_DEV_DEFAULT_RATE   ((DOCA_PCC_DEV_MAX_RATE >> 8) > (1) ? (DOCA_PCC_DEV_MAX_RATE >> 8) : (1))

Default rate. The user overrides the default in the user algo function.

Definition at line 114 of file doca_pcc_dev.h.

◆ DOCA_PCC_DEV_LOG_MAX_RATE

#define DOCA_PCC_DEV_LOG_MAX_RATE   (20) /* rate format in fixed point 20 */

defines the fixed point fraction size of the rate limiter

Definition at line 104 of file doca_pcc_dev.h.

◆ DOCA_PCC_DEV_MAX_NUM_ALGOS

#define DOCA_PCC_DEV_MAX_NUM_ALGOS   (8)

Max number of algos supported by the lib.

Definition at line 124 of file doca_pcc_dev.h.

◆ DOCA_PCC_DEV_MAX_NUM_COUNTERS_PER_ALGO

#define DOCA_PCC_DEV_MAX_NUM_COUNTERS_PER_ALGO   (0x3F)

Max number of counters per algo supported by the lib.

Definition at line 134 of file doca_pcc_dev.h.

◆ DOCA_PCC_DEV_MAX_NUM_PARAMS_PER_ALGO

#define DOCA_PCC_DEV_MAX_NUM_PARAMS_PER_ALGO   (0x26)

Max number of parameters per algo supported by the lib.

Definition at line 129 of file doca_pcc_dev.h.

◆ DOCA_PCC_DEV_MAX_NUM_USER_SLOTS

#define DOCA_PCC_DEV_MAX_NUM_USER_SLOTS   (8)

Max number of algo slots supported by the lib.

Definition at line 119 of file doca_pcc_dev.h.

◆ DOCA_PCC_DEV_MAX_RATE

#define DOCA_PCC_DEV_MAX_RATE   (1U << DOCA_PCC_DEV_LOG_MAX_RATE)

Max rate in rate limiter fixed point.

Definition at line 109 of file doca_pcc_dev.h.

◆ DOCA_PCC_DEV_TX_FLAG_ACK_EXPECTED

#define DOCA_PCC_DEV_TX_FLAG_ACK_EXPECTED   (1 << 0)

TX Flag: Ack expected.

Definition at line 89 of file doca_pcc_dev.h.

◆ DOCA_PCC_DEV_TX_FLAG_OVERLOADED

#define DOCA_PCC_DEV_TX_FLAG_OVERLOADED   (1 << 1)

TX Flag: Overloaded:

Definition at line 94 of file doca_pcc_dev.h.

◆ DOCA_PCC_DEV_TX_FLAG_RTT_REQ_SENT

#define DOCA_PCC_DEV_TX_FLAG_RTT_REQ_SENT   (1 << 2)

TX Flag: RTT packet sent.

Definition at line 99 of file doca_pcc_dev.h.

Typedef Documentation

◆ doca_pcc_dev_ack_nack_cnp_extra_t

◆ doca_pcc_dev_ack_nack_cnp_t

◆ doca_pcc_dev_algo_ctxt_t

◆ doca_pcc_dev_attr_t

Definition at line 1 of file doca_pcc_dev_data_structures.h.

◆ doca_pcc_dev_event_general_attr_t

◆ doca_pcc_dev_event_spec_attr_t

◆ doca_pcc_dev_event_t

Definition at line 1 of file doca_pcc_dev_data_structures.h.

◆ doca_pcc_dev_fw_data_t

Definition at line 1 of file doca_pcc_dev_data_structures.h.

◆ doca_pcc_dev_results_t

CC algorithm results.

◆ doca_pcc_dev_roce_tx_cntrs_t

◆ doca_pcc_dev_roce_tx_extra_t

◆ doca_pcc_dev_roce_tx_t

Definition at line 1 of file doca_pcc_dev_data_structures.h.

◆ doca_pcc_dev_rtt_tstamp_t

Enumeration Type Documentation

◆ doca_pcc_dev_event_type_enum

CC event type.

Enumerator
DOCA_PCC_DEV_EVNT_NULL 

Unspecified event type

DOCA_PCC_DEV_EVNT_FW 

Deprecated - not used

DOCA_PCC_DEV_EVNT_ROCE_CNP 

RoCE CNP (Congestion Notification Packet) received

DOCA_PCC_DEV_EVNT_ROCE_TX 

TX packet burst transition ended

DOCA_PCC_DEV_EVNT_ROCE_ACK 

RoCE ACK Packet received

DOCA_PCC_DEV_EVNT_ROCE_NACK 

RoCE NACK Packet received

DOCA_PCC_DEV_EVNT_RTT 

RTT probe response packet event

DOCA_PCC_DEV_EVNT_ROCE_TX_FOR_ACK_NACK 

ROCE TX event for ACK/NACK packets

Definition at line 45 of file doca_pcc_dev.h.

◆ doca_pcc_dev_nack_event_sub_type_enum

CC Nack event subtypes.

Enumerator
DOCA_PCC_DEV_NACK_EVNT_NULL 

Unspecified NACK type

DOCA_PCC_DEV_NACK_EVNT_RNR 

RNR (Receiver Not Ready) NACK received

DOCA_PCC_DEV_NACK_EVNT_OOS 

OOS (Out of Sequence) NACK received

DOCA_PCC_DEV_NACK_EVNT_DUP_READ 

Duplicated Read (with same PSN) NACK received

Definition at line 59 of file doca_pcc_dev.h.

Function Documentation

◆ doca_pcc_dev_custom_header_set()

DOCA_EXPERIMENTAL doca_pcc_dev_error_t doca_pcc_dev_custom_header_set ( doca_pcc_dev_algo_ctxt_t algo_ctxt,
doca_pcc_dev_event_t event,
uint32_t *  header,
uint32_t  header_size,
uint32_t  wait_completed 
)

User callback executed to set custom header in CCMAD probe packet.

Called in user application to change custom header only for CCMAD probe type

Parameters
[in]algo_ctxt- pointer to user context for this flow (restored from previous iteration)
[in]event- pointer to event data struct to be used with getter functions
[in]header- header content memory address
[in]header_size- header size length, the unit is Double Words.
[in]wait_completed- When set, the function will return after the setting is applied, assuring that the next probe packet will use the custom header content. When cleared, the function will not wait for the setting to finish. It will return earlier, and the next transmitted probe may still use the previous header content.
Returns
- DOCA_PCC_DEV_STATUS_OK: CCMAD probe with custom header is changed successfully DOCA_PCC_DEV_STATUS_FAIL: CCMAD probe header is not changed

◆ doca_pcc_dev_default_internal_algo()

DOCA_STABLE void doca_pcc_dev_default_internal_algo ( doca_pcc_dev_algo_ctxt_t algo_ctxt,
doca_pcc_dev_event_t event,
const doca_pcc_dev_attr_t attr,
doca_pcc_dev_results_t results 
)

Implements the internal CC algorithm provided by the lib.

The lib provides an internal built-in CC algorithm implementation. The user may call this function for flows with algo_slot that is not set by the user (An unknown algo_slot can be the result of running without algo negotiation)

Parameters
[in]algo_ctxt-
See also
doca_pcc_dev_user_algo
Parameters
[in]event-
See also
doca_pcc_dev_user_algo
Parameters
[in]attr-
See also
doca_pcc_dev_user_algo
Parameters
[out]results-
See also
doca_pcc_dev_user_algo

◆ doca_pcc_dev_user_algo()

DOCA_STABLE void doca_pcc_dev_user_algo ( doca_pcc_dev_algo_ctxt_t algo_ctxt,
doca_pcc_dev_event_t event,
const doca_pcc_dev_attr_t attr,
doca_pcc_dev_results_t results 
)

Entry point to the user algorithm handling code.

This code handles a single event. it receives the algorithm context, the event information (opaque struct), and some attributes (algo id), and returns the PCC rate The event info should not be used directly through the struct. It is recommended to use the supplied "getter" functions (doca_pcc_dev_event.h) to help generate more future compatible code if event information placement changes

Parameters
[in]algo_ctxt- pointer to user context for this flow (restored from previous iteration)
[in]event- pointer to event data struct to be used with getter functions
[in]attr- information about event like algo type
[out]results- new rate information to be written to HW. The rate is expressed as a 20b fixed point number in range (0 , 1]

Definition at line 153 of file rp_rtt_template_dev_main.c.

◆ doca_pcc_dev_user_init()

DOCA_STABLE void doca_pcc_dev_user_init ( uint32_t *  disable_event_bitmask)

Entry point to the user one time initialization code.

This is called on PCC process load and should initialize the data of all user algorithms.

Parameters
[out]disable_event_bitmask- a bitmaks of events that should be discarded and not passed to the event processing code

Definition at line 188 of file rp_rtt_template_dev_main.c.

◆ doca_pcc_dev_user_set_algo_params()

DOCA_STABLE doca_pcc_dev_error_t doca_pcc_dev_user_set_algo_params ( uint32_t  port_num,
uint32_t  algo_slot,
uint32_t  param_id_base,
uint32_t  param_num,
const uint32_t *  new_param_values,
uint32_t *  params 
)

User callback executed then parameters are set.

Called when the parameter change was set externally. The implementation should: Check the given new_parameters values. If those are correct from the algorithm perspective, assign them to the given parameter array.

Parameters
[in]port_num- index of the port
[in]algo_slot- Algo slot identifier as referred to in the PPCC command field "algo_slot" if possible it should be equal to the algo_idx
[in]param_id_base- id of the first parameter that was changed.
[in]param_num- number of all parameters that were changed
[in]new_param_values- pointer to an array which holds param_num number of new values for parameters
[in]params- pointer to an array which holds beginning of the current parameters to be changed
Returns
- DOCA_PCC_DEV_STATUS_OK: Parameters were set DOCA_PCC_DEV_STATUS_FAIL: the values (one or more) are not legal. No parameters were changed

Definition at line 233 of file rp_rtt_template_dev_main.c.