123e8fcb0SNipun Gupta /* SPDX-License-Identifier: BSD-3-Clause 2*2cb2abf3SHemant Agrawal * Copyright 2018-2021 NXP 323e8fcb0SNipun Gupta */ 423e8fcb0SNipun Gupta 523e8fcb0SNipun Gupta #ifndef __FSL_DPDMAI_H 623e8fcb0SNipun Gupta #define __FSL_DPDMAI_H 723e8fcb0SNipun Gupta 8c9da6cfaSHemant Agrawal #include <rte_compat.h> 9c9da6cfaSHemant Agrawal 1023e8fcb0SNipun Gupta struct fsl_mc_io; 1123e8fcb0SNipun Gupta 1223e8fcb0SNipun Gupta /* Data Path DMA Interface API 1323e8fcb0SNipun Gupta * Contains initialization APIs and runtime control APIs for DPDMAI 1423e8fcb0SNipun Gupta */ 1523e8fcb0SNipun Gupta 1623e8fcb0SNipun Gupta /* General DPDMAI macros */ 1723e8fcb0SNipun Gupta 1823e8fcb0SNipun Gupta /** 1923e8fcb0SNipun Gupta * Maximum number of Tx/Rx priorities per DPDMAI object 2023e8fcb0SNipun Gupta */ 2123e8fcb0SNipun Gupta #define DPDMAI_PRIO_NUM 2 2223e8fcb0SNipun Gupta 2323e8fcb0SNipun Gupta /** 2423e8fcb0SNipun Gupta * All queues considered; see dpdmai_set_rx_queue() 2523e8fcb0SNipun Gupta */ 2623e8fcb0SNipun Gupta #define DPDMAI_ALL_QUEUES (uint8_t)(-1) 2723e8fcb0SNipun Gupta 28c9da6cfaSHemant Agrawal __rte_internal 2923e8fcb0SNipun Gupta int dpdmai_open(struct fsl_mc_io *mc_io, 3023e8fcb0SNipun Gupta uint32_t cmd_flags, 3123e8fcb0SNipun Gupta int dpdmai_id, 3223e8fcb0SNipun Gupta uint16_t *token); 3323e8fcb0SNipun Gupta 34c9da6cfaSHemant Agrawal __rte_internal 3523e8fcb0SNipun Gupta int dpdmai_close(struct fsl_mc_io *mc_io, 3623e8fcb0SNipun Gupta uint32_t cmd_flags, 3723e8fcb0SNipun Gupta uint16_t token); 3823e8fcb0SNipun Gupta 39*2cb2abf3SHemant Agrawal /* DPDMAI options */ 40*2cb2abf3SHemant Agrawal 41*2cb2abf3SHemant Agrawal /** 42*2cb2abf3SHemant Agrawal * Enable individual Congestion Groups usage per each priority queue 43*2cb2abf3SHemant Agrawal * If this option is not enabled then only one CG is used for all priority 44*2cb2abf3SHemant Agrawal * queues 45*2cb2abf3SHemant Agrawal * If this option is enabled then a separate specific CG is used for each 46*2cb2abf3SHemant Agrawal * individual priority queue. 47*2cb2abf3SHemant Agrawal * In this case the priority queue must be specified via congestion notification 48*2cb2abf3SHemant Agrawal * API 49*2cb2abf3SHemant Agrawal */ 50*2cb2abf3SHemant Agrawal #define DPDMAI_OPT_CG_PER_PRIORITY 0x00000001 51*2cb2abf3SHemant Agrawal 5223e8fcb0SNipun Gupta /** 5323e8fcb0SNipun Gupta * struct dpdmai_cfg - Structure representing DPDMAI configuration 5423e8fcb0SNipun Gupta * @priorities: Priorities for the DMA hardware processing; valid priorities are 5523e8fcb0SNipun Gupta * configured with values 1-8; the entry following last valid entry 5623e8fcb0SNipun Gupta * should be configured with 0 57*2cb2abf3SHemant Agrawal * @options: dpdmai options 5823e8fcb0SNipun Gupta */ 5923e8fcb0SNipun Gupta struct dpdmai_cfg { 60b4a63e60SHemant Agrawal uint8_t num_queues; 6123e8fcb0SNipun Gupta uint8_t priorities[DPDMAI_PRIO_NUM]; 62*2cb2abf3SHemant Agrawal struct { 63*2cb2abf3SHemant Agrawal uint32_t options; 64*2cb2abf3SHemant Agrawal } adv; 6523e8fcb0SNipun Gupta }; 6623e8fcb0SNipun Gupta 6723e8fcb0SNipun Gupta int dpdmai_create(struct fsl_mc_io *mc_io, 6823e8fcb0SNipun Gupta uint16_t dprc_token, 6923e8fcb0SNipun Gupta uint32_t cmd_flags, 7023e8fcb0SNipun Gupta const struct dpdmai_cfg *cfg, 7123e8fcb0SNipun Gupta uint32_t *obj_id); 7223e8fcb0SNipun Gupta 7323e8fcb0SNipun Gupta int dpdmai_destroy(struct fsl_mc_io *mc_io, 7423e8fcb0SNipun Gupta uint16_t dprc_token, 7523e8fcb0SNipun Gupta uint32_t cmd_flags, 7623e8fcb0SNipun Gupta uint32_t object_id); 7723e8fcb0SNipun Gupta 78c9da6cfaSHemant Agrawal __rte_internal 7923e8fcb0SNipun Gupta int dpdmai_enable(struct fsl_mc_io *mc_io, 8023e8fcb0SNipun Gupta uint32_t cmd_flags, 8123e8fcb0SNipun Gupta uint16_t token); 8223e8fcb0SNipun Gupta 83c9da6cfaSHemant Agrawal __rte_internal 8423e8fcb0SNipun Gupta int dpdmai_disable(struct fsl_mc_io *mc_io, 8523e8fcb0SNipun Gupta uint32_t cmd_flags, 8623e8fcb0SNipun Gupta uint16_t token); 8723e8fcb0SNipun Gupta 8823e8fcb0SNipun Gupta int dpdmai_is_enabled(struct fsl_mc_io *mc_io, 8923e8fcb0SNipun Gupta uint32_t cmd_flags, 9023e8fcb0SNipun Gupta uint16_t token, 9123e8fcb0SNipun Gupta int *en); 9223e8fcb0SNipun Gupta 9323e8fcb0SNipun Gupta int dpdmai_reset(struct fsl_mc_io *mc_io, 9423e8fcb0SNipun Gupta uint32_t cmd_flags, 9523e8fcb0SNipun Gupta uint16_t token); 9623e8fcb0SNipun Gupta 9723e8fcb0SNipun Gupta /** 9823e8fcb0SNipun Gupta * struct dpdmai_attr - Structure representing DPDMAI attributes 9923e8fcb0SNipun Gupta * @id: DPDMAI object ID 10023e8fcb0SNipun Gupta * @num_of_priorities: number of priorities 101*2cb2abf3SHemant Agrawal * @options: dpdmai options 10223e8fcb0SNipun Gupta */ 10323e8fcb0SNipun Gupta struct dpdmai_attr { 10423e8fcb0SNipun Gupta int id; 10523e8fcb0SNipun Gupta uint8_t num_of_priorities; 106b4a63e60SHemant Agrawal uint8_t num_of_queues; 107*2cb2abf3SHemant Agrawal uint32_t options; 10823e8fcb0SNipun Gupta }; 10923e8fcb0SNipun Gupta 110c9da6cfaSHemant Agrawal __rte_internal 11123e8fcb0SNipun Gupta int dpdmai_get_attributes(struct fsl_mc_io *mc_io, 11223e8fcb0SNipun Gupta uint32_t cmd_flags, 11323e8fcb0SNipun Gupta uint16_t token, 11423e8fcb0SNipun Gupta struct dpdmai_attr *attr); 11523e8fcb0SNipun Gupta 11623e8fcb0SNipun Gupta /** 11723e8fcb0SNipun Gupta * enum dpdmai_dest - DPDMAI destination types 11823e8fcb0SNipun Gupta * @DPDMAI_DEST_NONE: Unassigned destination; The queue is set in parked mode 11923e8fcb0SNipun Gupta * and does not generate FQDAN notifications; user is expected to dequeue 12023e8fcb0SNipun Gupta * from the queue based on polling or other user-defined method 12123e8fcb0SNipun Gupta * @DPDMAI_DEST_DPIO: The queue is set in schedule mode and generates FQDAN 12223e8fcb0SNipun Gupta * notifications to the specified DPIO; user is expected to dequeue 12323e8fcb0SNipun Gupta * from the queue only after notification is received 12423e8fcb0SNipun Gupta * @DPDMAI_DEST_DPCON: The queue is set in schedule mode and does not generate 12523e8fcb0SNipun Gupta * FQDAN notifications, but is connected to the specified DPCON object; 12623e8fcb0SNipun Gupta * user is expected to dequeue from the DPCON channel 12723e8fcb0SNipun Gupta */ 12823e8fcb0SNipun Gupta enum dpdmai_dest { 12923e8fcb0SNipun Gupta DPDMAI_DEST_NONE = 0, 13023e8fcb0SNipun Gupta DPDMAI_DEST_DPIO = 1, 13123e8fcb0SNipun Gupta DPDMAI_DEST_DPCON = 2 13223e8fcb0SNipun Gupta }; 13323e8fcb0SNipun Gupta 13423e8fcb0SNipun Gupta /** 13523e8fcb0SNipun Gupta * struct dpdmai_dest_cfg - Structure representing DPDMAI destination parameters 13623e8fcb0SNipun Gupta * @dest_type: Destination type 13723e8fcb0SNipun Gupta * @dest_id: Either DPIO ID or DPCON ID, depending on the destination type 13823e8fcb0SNipun Gupta * @priority: Priority selection within the DPIO or DPCON channel; valid values 13923e8fcb0SNipun Gupta * are 0-1 or 0-7, depending on the number of priorities in that 14023e8fcb0SNipun Gupta * channel; not relevant for 'DPDMAI_DEST_NONE' option 14123e8fcb0SNipun Gupta */ 14223e8fcb0SNipun Gupta struct dpdmai_dest_cfg { 14323e8fcb0SNipun Gupta enum dpdmai_dest dest_type; 14423e8fcb0SNipun Gupta int dest_id; 14523e8fcb0SNipun Gupta uint8_t priority; 14623e8fcb0SNipun Gupta }; 14723e8fcb0SNipun Gupta 14823e8fcb0SNipun Gupta /* DPDMAI queue modification options */ 14923e8fcb0SNipun Gupta 15023e8fcb0SNipun Gupta /** 15123e8fcb0SNipun Gupta * Select to modify the user's context associated with the queue 15223e8fcb0SNipun Gupta */ 15323e8fcb0SNipun Gupta #define DPDMAI_QUEUE_OPT_USER_CTX 0x00000001 15423e8fcb0SNipun Gupta 15523e8fcb0SNipun Gupta /** 15623e8fcb0SNipun Gupta * Select to modify the queue's destination 15723e8fcb0SNipun Gupta */ 15823e8fcb0SNipun Gupta #define DPDMAI_QUEUE_OPT_DEST 0x00000002 15923e8fcb0SNipun Gupta 16023e8fcb0SNipun Gupta /** 16123e8fcb0SNipun Gupta * struct dpdmai_rx_queue_cfg - DPDMAI RX queue configuration 16223e8fcb0SNipun Gupta * @options: Flags representing the suggested modifications to the queue; 16323e8fcb0SNipun Gupta * Use any combination of 'DPDMAI_QUEUE_OPT_<X>' flags 16423e8fcb0SNipun Gupta * @user_ctx: User context value provided in the frame descriptor of each 16523e8fcb0SNipun Gupta * dequeued frame; 16623e8fcb0SNipun Gupta * valid only if 'DPDMAI_QUEUE_OPT_USER_CTX' is contained in 'options' 16723e8fcb0SNipun Gupta * @dest_cfg: Queue destination parameters; 16823e8fcb0SNipun Gupta * valid only if 'DPDMAI_QUEUE_OPT_DEST' is contained in 'options' 16923e8fcb0SNipun Gupta */ 17023e8fcb0SNipun Gupta struct dpdmai_rx_queue_cfg { 17123e8fcb0SNipun Gupta uint32_t options; 17223e8fcb0SNipun Gupta uint64_t user_ctx; 17323e8fcb0SNipun Gupta struct dpdmai_dest_cfg dest_cfg; 17423e8fcb0SNipun Gupta 17523e8fcb0SNipun Gupta }; 17623e8fcb0SNipun Gupta 177c9da6cfaSHemant Agrawal __rte_internal 17823e8fcb0SNipun Gupta int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io, 17923e8fcb0SNipun Gupta uint32_t cmd_flags, 18023e8fcb0SNipun Gupta uint16_t token, 181b4a63e60SHemant Agrawal uint8_t queue_idx, 18223e8fcb0SNipun Gupta uint8_t priority, 18323e8fcb0SNipun Gupta const struct dpdmai_rx_queue_cfg *cfg); 18423e8fcb0SNipun Gupta 18523e8fcb0SNipun Gupta /** 18623e8fcb0SNipun Gupta * struct dpdmai_rx_queue_attr - Structure representing attributes of Rx queues 18723e8fcb0SNipun Gupta * @user_ctx: User context value provided in the frame descriptor of each 18823e8fcb0SNipun Gupta * dequeued frame 18923e8fcb0SNipun Gupta * @dest_cfg: Queue destination configuration 19023e8fcb0SNipun Gupta * @fqid: Virtual FQID value to be used for dequeue operations 19123e8fcb0SNipun Gupta */ 19223e8fcb0SNipun Gupta struct dpdmai_rx_queue_attr { 19323e8fcb0SNipun Gupta uint64_t user_ctx; 19423e8fcb0SNipun Gupta struct dpdmai_dest_cfg dest_cfg; 19523e8fcb0SNipun Gupta uint32_t fqid; 19623e8fcb0SNipun Gupta }; 19723e8fcb0SNipun Gupta 198c9da6cfaSHemant Agrawal __rte_internal 19923e8fcb0SNipun Gupta int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io, 20023e8fcb0SNipun Gupta uint32_t cmd_flags, 20123e8fcb0SNipun Gupta uint16_t token, 202b4a63e60SHemant Agrawal uint8_t queue_idx, 20323e8fcb0SNipun Gupta uint8_t priority, 20423e8fcb0SNipun Gupta struct dpdmai_rx_queue_attr *attr); 20523e8fcb0SNipun Gupta 20623e8fcb0SNipun Gupta /** 20723e8fcb0SNipun Gupta * struct dpdmai_tx_queue_attr - Structure representing attributes of Tx queues 20823e8fcb0SNipun Gupta * @fqid: Virtual FQID to be used for sending frames to DMA hardware 20923e8fcb0SNipun Gupta */ 21023e8fcb0SNipun Gupta 21123e8fcb0SNipun Gupta struct dpdmai_tx_queue_attr { 21223e8fcb0SNipun Gupta uint32_t fqid; 21323e8fcb0SNipun Gupta }; 21423e8fcb0SNipun Gupta 215c9da6cfaSHemant Agrawal __rte_internal 21623e8fcb0SNipun Gupta int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io, 21723e8fcb0SNipun Gupta uint32_t cmd_flags, 21823e8fcb0SNipun Gupta uint16_t token, 219b4a63e60SHemant Agrawal uint8_t queue_idx, 22023e8fcb0SNipun Gupta uint8_t priority, 22123e8fcb0SNipun Gupta struct dpdmai_tx_queue_attr *attr); 22223e8fcb0SNipun Gupta 22323e8fcb0SNipun Gupta #endif /* __FSL_DPDMAI_H */ 224