cmd_params->num_cgs = cfg->num_cgs;
cmd_params->num_opr = cfg->num_opr;
cmd_params->dist_key_size = cfg->dist_key_size;
+ cmd_params->num_channels = cfg->num_channels;
/* send command to mc*/
err = mc_send_command(mc_io, &cmd);
cmd_params = (struct dpni_cmd_set_pools *)cmd.params;
cmd_params->num_dpbp = cfg->num_dpbp;
cmd_params->pool_options = cfg->pool_options;
- for (i = 0; i < cmd_params->num_dpbp; i++) {
+ for (i = 0; i < DPNI_MAX_DPBP; i++) {
cmd_params->pool[i].dpbp_id =
cpu_to_le16(cfg->pools[i].dpbp_id);
cmd_params->pool[i].priority_mask =
attr->num_tx_tcs = rsp_params->num_tx_tcs;
attr->mac_filter_entries = rsp_params->mac_filter_entries;
attr->vlan_filter_entries = rsp_params->vlan_filter_entries;
+ attr->num_channels = rsp_params->num_channels;
attr->qos_entries = rsp_params->qos_entries;
attr->fs_entries = le16_to_cpu(rsp_params->fs_entries);
attr->qos_key_size = rsp_params->qos_key_size;
* in all enqueue operations
*
* Return: '0' on Success; Error code otherwise.
+ *
+ * If dpni object is created using multiple Tc channels this function will return
+ * qdid value for the first channel
*/
int dpni_get_qdid(struct fsl_mc_io *mc_io,
uint32_t cmd_flags,
* @token: Token of DPNI object
* @tx_cr_shaper: TX committed rate shaping configuration
* @tx_er_shaper: TX excess rate shaping configuration
- * @coupled: Committed and excess rate shapers are coupled
+ * @param: Special parameters
+ * bit0: Committed and excess rates are coupled
+ * bit1: 1 modify LNI shaper, 0 modify channel shaper
+ * bit8-15: Tx channel to be shaped. Used only if bit1 is set to zero
+ * bits16-26: OAL (Overhead accounting length 11bit value). Used only
+ * when bit1 is set.
*
* Return: '0' on Success; Error code otherwise.
*/
uint16_t token,
const struct dpni_tx_shaping_cfg *tx_cr_shaper,
const struct dpni_tx_shaping_cfg *tx_er_shaper,
- int coupled)
+ uint32_t param)
{
struct dpni_cmd_set_tx_shaping *cmd_params;
struct mc_command cmd = { 0 };
+ int coupled, lni_shaper;
+ uint8_t channel_id;
+ uint16_t oal;
/* prepare command */
cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_TX_SHAPING,
cpu_to_le32(tx_cr_shaper->rate_limit);
cmd_params->tx_er_rate_limit =
cpu_to_le32(tx_er_shaper->rate_limit);
- dpni_set_field(cmd_params->coupled, COUPLED, coupled);
+
+ coupled = !!(param & 0x01);
+ dpni_set_field(cmd_params->options, COUPLED, coupled);
+
+ lni_shaper = !!((param >> 1) & 0x01);
+ dpni_set_field(cmd_params->options, LNI_SHAPER, lni_shaper);
+
+ channel_id = (param >> 8) & 0xff;
+ cmd_params->channel_id = channel_id;
+
+ oal = (param >> 16) & 0x7FF;
+ cmd_params->oal = cpu_to_le16(oal);
/* send command to mc*/
return mc_send_command(mc_io, &cmd);
cmd_flags,
token);
cmd_params = (struct dpni_cmd_set_tx_priorities *)cmd.params;
+ cmd_params->channel_idx = cfg->channel_idx;
dpni_set_field(cmd_params->flags,
SEPARATE_GRP,
cfg->separate_groups);
* @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
* @token: Token of DPNI object
* @qtype: Type of queue - only Rx and Tx types are supported
- * @tc_id: Traffic class selection (0-7)
+ * @param: Traffic class and channel ID.
+ * MSB - channel id; used only for DPNI_QUEUE_TX and DPNI_QUEUE_TX_CONFIRM,
+ * ignored for the rest
+ * LSB - traffic class
+ * Use macro DPNI_BUILD_PARAM() to build correct value.
+ * If dpni uses a single channel (uses only channel zero) the parameter can receive
+ * traffic class directly.
* @early_drop_iova: I/O virtual address of 256 bytes DMA-able memory filled
* with the early-drop configuration by calling dpni_prepare_early_drop()
*
uint32_t cmd_flags,
uint16_t token,
enum dpni_queue_type qtype,
- uint8_t tc_id,
+ uint16_t param,
uint64_t early_drop_iova)
{
struct dpni_cmd_early_drop *cmd_params;
token);
cmd_params = (struct dpni_cmd_early_drop *)cmd.params;
cmd_params->qtype = qtype;
- cmd_params->tc = tc_id;
+ cmd_params->tc = (uint8_t)(param & 0xff);
+ cmd_params->channel_id = (uint8_t)((param >> 8) & 0xff);
cmd_params->early_drop_iova = cpu_to_le64(early_drop_iova);
/* send command to mc*/
* @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
* @token: Token of DPNI object
* @qtype: Type of queue - only Rx and Tx types are supported
- * @tc_id: Traffic class selection (0-7)
+ * @param: Traffic class and channel ID.
+ * MSB - channel id; used only for DPNI_QUEUE_TX and DPNI_QUEUE_TX_CONFIRM,
+ * ignored for the rest
+ * LSB - traffic class
+ * Use macro DPNI_BUILD_PARAM() to build correct value.
+ * If dpni uses a single channel (uses only channel zero) the parameter can receive
+ * traffic class directly.
* @early_drop_iova: I/O virtual address of 256 bytes DMA-able memory
*
* warning: After calling this function, call dpni_extract_early_drop() to
uint32_t cmd_flags,
uint16_t token,
enum dpni_queue_type qtype,
- uint8_t tc_id,
+ uint16_t param,
uint64_t early_drop_iova)
{
struct dpni_cmd_early_drop *cmd_params;
token);
cmd_params = (struct dpni_cmd_early_drop *)cmd.params;
cmd_params->qtype = qtype;
- cmd_params->tc = tc_id;
+ cmd_params->tc = (uint8_t)(param & 0xff);
+ cmd_params->channel_id = (uint8_t)((param >> 8) & 0xff);
cmd_params->early_drop_iova = cpu_to_le64(early_drop_iova);
/* send command to mc*/
uint32_t cmd_flags,
uint16_t token,
enum dpni_queue_type qtype,
- uint8_t tc_id,
- const struct dpni_congestion_notification_cfg *cfg)
+ uint16_t param,
+ const struct dpni_congestion_notification_cfg *cfg)
{
struct dpni_cmd_set_congestion_notification *cmd_params;
struct mc_command cmd = { 0 };
token);
cmd_params = (struct dpni_cmd_set_congestion_notification *)cmd.params;
cmd_params->qtype = qtype;
- cmd_params->tc = tc_id;
+ cmd_params->tc = (uint8_t)(param & 0xff);
+ cmd_params->channel_id = (uint8_t)((param >> 8) & 0xff);
cmd_params->congestion_point = cfg->cg_point;
cmd_params->cgid = (uint8_t)cfg->cgid;
cmd_params->dest_id = cpu_to_le32(cfg->dest_cfg.dest_id);
* @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
* @token: Token of DPNI object
* @qtype: Type of queue - Rx, Tx and Tx confirm types are supported
- * @tc_id: Traffic class selection (0-7)
+ * @param: Traffic class and channel. Bits[0-7] contain traaffic class,
+ * byte[8-15] contains channel id
* @cfg: congestion notification configuration
*
* Return: '0' on Success; error code otherwise.
uint32_t cmd_flags,
uint16_t token,
enum dpni_queue_type qtype,
- uint8_t tc_id,
- struct dpni_congestion_notification_cfg *cfg)
+ uint16_t param,
+ struct dpni_congestion_notification_cfg *cfg)
{
struct dpni_rsp_get_congestion_notification *rsp_params;
struct dpni_cmd_get_congestion_notification *cmd_params;
token);
cmd_params = (struct dpni_cmd_get_congestion_notification *)cmd.params;
cmd_params->qtype = qtype;
- cmd_params->tc = tc_id;
+ cmd_params->tc = (uint8_t)(param & 0xff);
+ cmd_params->channel_id = (uint8_t)((param >> 8) & 0xff);
cmd_params->congestion_point = cfg->cg_point;
cmd_params->cgid = cfg->cgid;
uint32_t cmd_flags,
uint16_t token,
enum dpni_queue_type qtype,
- uint8_t tc,
+ uint16_t param,
uint8_t index,
uint8_t options,
const struct dpni_queue *queue)
token);
cmd_params = (struct dpni_cmd_set_queue *)cmd.params;
cmd_params->qtype = qtype;
- cmd_params->tc = tc;
+ cmd_params->tc = (uint8_t)(param & 0xff);
+ cmd_params->channel_id = (uint8_t)((param >> 8) & 0xff);
cmd_params->index = index;
cmd_params->options = options;
cmd_params->dest_id = cpu_to_le32(queue->destination.id);
* @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
* @token: Token of DPNI object
* @qtype: Type of queue - all queue types are supported
- * @tc: Traffic class, in range 0 to NUM_TCS - 1
+ * @param: Traffic class and channel ID.
+ * MSB - channel id; used only for DPNI_QUEUE_TX and DPNI_QUEUE_TX_CONFIRM,
+ * ignored for the rest
+ * LSB - traffic class
+ * Use macro DPNI_BUILD_PARAM() to build correct value.
+ * If dpni uses a single channel (uses only channel zero) the parameter can receive
+ * traffic class directly.
* @index: Selects the specific queue out of the set allocated for the
* same TC. Value must be in range 0 to NUM_QUEUES - 1
* @queue: Queue configuration structure
uint32_t cmd_flags,
uint16_t token,
enum dpni_queue_type qtype,
- uint8_t tc,
+ uint16_t param,
uint8_t index,
struct dpni_queue *queue,
struct dpni_queue_id *qid)
token);
cmd_params = (struct dpni_cmd_get_queue *)cmd.params;
cmd_params->qtype = qtype;
- cmd_params->tc = tc;
+ cmd_params->tc = (uint8_t)(param & 0xff);
cmd_params->index = index;
+ cmd_params->channel_id = (uint8_t)((param >> 8) & 0xff);
/* send command to mc */
err = mc_send_command(mc_io, &cmd);
* @token: Token of DPNI object
* @page: Selects the statistics page to retrieve, see
* DPNI_GET_STATISTICS output. Pages are numbered 0 to 6.
- * @param: Custom parameter for some pages used to select
- * a certain statistic source, for example the TC.
+ * @param: Custom parameter for some pages used to select
+ * a certain statistic source, for example the TC.
+ * - page_0: not used
+ * - page_1: not used
+ * - page_2: not used
+ * - page_3: high_byte - channel_id, low_byte - traffic class
+ * - page_4: high_byte - queue_index have meaning only if dpni is
+ * created using option DPNI_OPT_CUSTOM_CG, low_byte - traffic class
+ * - page_5: not used
+ * - page_6: not used
* @stat: Structure containing the statistics
*
* Return: '0' on Success; Error code otherwise.
uint16_t token,
enum dpni_congestion_point cg_point,
enum dpni_queue_type qtype,
- uint8_t tc,
+ uint16_t param,
uint8_t index,
struct dpni_taildrop *taildrop)
{
cmd_params = (struct dpni_cmd_set_taildrop *)cmd.params;
cmd_params->congestion_point = cg_point;
cmd_params->qtype = qtype;
- cmd_params->tc = tc;
+ cmd_params->tc = (uint8_t)(param & 0xff);
+ cmd_params->channel_id = (uint8_t)((param >> 8) & 0xff);
cmd_params->index = index;
cmd_params->units = taildrop->units;
cmd_params->threshold = cpu_to_le32(taildrop->threshold);
* Maximum number of storage-profiles per DPNI
*/
#define DPNI_MAX_SP 2
+/**
+ * Maximum number of Tx channels per DPNI
+ */
+#define DPNI_MAX_CHANNELS 16
/**
* All traffic classes considered; see dpni_set_queue()
*/
#define DPNI_SW_SEQUENCE_LAYOUT_SIZE 33
+/**
+ * Build a parameter from dpni channel and trafiic class. This parameter
+ * will be used to configure / query information from dpni objects created
+ * to support multiple channels.
+ */
+#define DPNI_BUILD_PARAM(channel, tc_id) (((channel) << 8) | (tc_id))
+
int dpni_open(struct fsl_mc_io *mc_io,
uint32_t cmd_flags,
int dpni_id,
* field is ignored if the DPNI has a single TC. Otherwise,
* a value of 0 defaults to 64. Maximum supported value
* is 64.
+ * @num_channels: Number of egress channels used by this dpni object. If
+ * set to zero the dpni object will use a single CEETM channel.
*/
struct dpni_cfg {
uint32_t options;
uint8_t num_cgs;
uint16_t num_opr;
uint8_t dist_key_size;
+ uint8_t num_channels;
};
int dpni_create(struct fsl_mc_io *mc_io,
uint8_t fs_key_size;
uint16_t wriop_version;
uint8_t num_cgs;
+ uint8_t num_channels;
};
int dpni_get_attributes(struct fsl_mc_io *mc_io,
uint16_t max_burst_size;
};
+/**
+ * Build the parameter for dpni_set_tx_shaping() call
+ * @oal: Overhead accounting length. 11bit value added to the size of
+ * each frame. Used only for LNI shaping. If set to zero, will use default
+ * value of 24. Ignored if shaping_lni is set to zero.
+ * @shaping_lni: 1 for LNI shaping (configure whole throughput of the dpni object)
+ * 0 for channel shaping (configure shaping for individual channels)
+ * Set to one only if dpni is connected to a dpmac object.
+ * @channel_id: Channel to be configured. Ignored shaping_lni is set to 1
+ * @coupled: Committed and excess rates are coupled
+ */
+#define DPNI_TX_SHAPING_PARAM(oal, shaping_lni, channel_id, coupled) ( \
+ ((uint32_t)(((oal) & 0x7ff) << 16)) | \
+ ((uint32_t)((channel_id) & 0xff) << 8) | \
+ ((uint32_t)(!!shaping_lni) << 1) | \
+ ((uint32_t)!!coupled))
+
int dpni_set_tx_shaping(struct fsl_mc_io *mc_io,
uint32_t cmd_flags,
uint16_t token,
const struct dpni_tx_shaping_cfg *tx_cr_shaper,
const struct dpni_tx_shaping_cfg *tx_er_shaper,
- int coupled);
+ uint32_t param);
int dpni_set_max_frame_length(struct fsl_mc_io *mc_io,
uint32_t cmd_flags,
/**
* struct dpni_tx_priorities_cfg - Structure representing transmission
* priorities for DPNI TCs
+ * @channel_idx: channel to perform the configuration
* @tc_sched: An array of traffic-classes
* @prio_group_A: Priority of group A
* @prio_group_B: Priority of group B
* @separate_groups: Treat A and B groups as separate
*/
struct dpni_tx_priorities_cfg {
+ uint8_t channel_idx;
struct dpni_tx_schedule_cfg tc_sched[DPNI_MAX_TC];
uint32_t prio_group_A;
uint32_t prio_group_B;
uint32_t cmd_flags,
uint16_t token,
enum dpni_queue_type qtype,
- uint8_t tc_id,
+ uint16_t param,
uint64_t early_drop_iova);
int dpni_get_early_drop(struct fsl_mc_io *mc_io,
uint32_t cmd_flags,
uint16_t token,
enum dpni_queue_type qtype,
- uint8_t tc_id,
+ uint16_t param,
uint64_t early_drop_iova);
/**
uint32_t cmd_flags,
uint16_t token,
enum dpni_queue_type qtype,
- uint8_t tc_id,
- const struct dpni_congestion_notification_cfg *cfg);
+ uint16_t param,
+ const struct dpni_congestion_notification_cfg *cfg);
int dpni_get_congestion_notification(struct fsl_mc_io *mc_io,
uint32_t cmd_flags,
uint16_t token,
enum dpni_queue_type qtype,
- uint8_t tc_id,
- struct dpni_congestion_notification_cfg *cfg);
+ uint16_t param,
+ struct dpni_congestion_notification_cfg *cfg);
/* DPNI FLC stash options */
uint32_t cmd_flags,
uint16_t token,
enum dpni_queue_type qtype,
- uint8_t tc,
+ uint16_t param,
uint8_t index,
uint8_t options,
const struct dpni_queue *queue);
uint32_t cmd_flags,
uint16_t token,
enum dpni_queue_type qtype,
- uint8_t tc,
+ uint16_t param,
uint8_t index,
struct dpni_queue *queue,
struct dpni_queue_id *qid);
uint16_t token,
enum dpni_congestion_point cg_point,
enum dpni_queue_type q_type,
- uint8_t tc,
+ uint16_t param,
uint8_t q_index,
struct dpni_taildrop *taildrop);
#define _FSL_DPNI_CMD_H
/* DPNI Version */
-#define DPNI_VER_MAJOR 7
-#define DPNI_VER_MINOR 17
+#define DPNI_VER_MAJOR 8
+#define DPNI_VER_MINOR 0
#define DPNI_CMD_BASE_VERSION 1
#define DPNI_CMD_VERSION_2 2
#define DPNI_CMD_VERSION_3 3
#define DPNI_CMD_VERSION_4 4
#define DPNI_CMD_VERSION_5 5
+#define DPNI_CMD_VERSION_6 6
#define DPNI_CMD_ID_OFFSET 4
#define DPNI_CMD(id) (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_BASE_VERSION)
#define DPNI_CMD_V3(id) (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_VERSION_3)
#define DPNI_CMD_V4(id) (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_VERSION_4)
#define DPNI_CMD_V5(id) (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_VERSION_5)
+#define DPNI_CMD_V6(id) (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_VERSION_6)
/* Command IDs */
#define DPNI_CMDID_OPEN DPNI_CMD(0x801)
#define DPNI_CMDID_CLOSE DPNI_CMD(0x800)
-#define DPNI_CMDID_CREATE DPNI_CMD_V5(0x901)
+#define DPNI_CMDID_CREATE DPNI_CMD_V6(0x901)
#define DPNI_CMDID_DESTROY DPNI_CMD(0x981)
#define DPNI_CMDID_GET_API_VERSION DPNI_CMD(0xa01)
#define DPNI_CMDID_ENABLE DPNI_CMD(0x002)
#define DPNI_CMDID_DISABLE DPNI_CMD(0x003)
-#define DPNI_CMDID_GET_ATTR DPNI_CMD_V3(0x004)
+#define DPNI_CMDID_GET_ATTR DPNI_CMD_V4(0x004)
#define DPNI_CMDID_RESET DPNI_CMD(0x005)
#define DPNI_CMDID_IS_ENABLED DPNI_CMD(0x006)
#define DPNI_CMDID_SET_MAX_FRAME_LENGTH DPNI_CMD(0x216)
#define DPNI_CMDID_GET_MAX_FRAME_LENGTH DPNI_CMD(0x217)
#define DPNI_CMDID_SET_LINK_CFG DPNI_CMD_V2(0x21A)
-#define DPNI_CMDID_SET_TX_SHAPING DPNI_CMD_V2(0x21B)
+#define DPNI_CMDID_SET_TX_SHAPING DPNI_CMD_V3(0x21B)
#define DPNI_CMDID_SET_MCAST_PROMISC DPNI_CMD(0x220)
#define DPNI_CMDID_GET_MCAST_PROMISC DPNI_CMD(0x221)
#define DPNI_CMDID_REMOVE_FS_ENT DPNI_CMD(0x245)
#define DPNI_CMDID_CLR_FS_ENT DPNI_CMD(0x246)
-#define DPNI_CMDID_SET_TX_PRIORITIES DPNI_CMD_V2(0x250)
+#define DPNI_CMDID_SET_TX_PRIORITIES DPNI_CMD_V3(0x250)
#define DPNI_CMDID_GET_RX_TC_POLICING DPNI_CMD(0x251)
-#define DPNI_CMDID_GET_STATISTICS DPNI_CMD_V3(0x25D)
+#define DPNI_CMDID_GET_STATISTICS DPNI_CMD_V4(0x25D)
#define DPNI_CMDID_RESET_STATISTICS DPNI_CMD(0x25E)
-#define DPNI_CMDID_GET_QUEUE DPNI_CMD_V2(0x25F)
-#define DPNI_CMDID_SET_QUEUE DPNI_CMD_V2(0x260)
+#define DPNI_CMDID_GET_QUEUE DPNI_CMD_V3(0x25F)
+#define DPNI_CMDID_SET_QUEUE DPNI_CMD_V3(0x260)
#define DPNI_CMDID_GET_TAILDROP DPNI_CMD_V2(0x261)
-#define DPNI_CMDID_SET_TAILDROP DPNI_CMD_V2(0x262)
+#define DPNI_CMDID_SET_TAILDROP DPNI_CMD_V3(0x262)
#define DPNI_CMDID_GET_PORT_MAC_ADDR DPNI_CMD(0x263)
#define DPNI_CMDID_GET_BUFFER_LAYOUT DPNI_CMD_V2(0x264)
#define DPNI_CMDID_SET_BUFFER_LAYOUT DPNI_CMD_V2(0x265)
-#define DPNI_CMDID_SET_CONGESTION_NOTIFICATION DPNI_CMD_V2(0x267)
-#define DPNI_CMDID_GET_CONGESTION_NOTIFICATION DPNI_CMD_V2(0x268)
-#define DPNI_CMDID_SET_EARLY_DROP DPNI_CMD_V2(0x269)
-#define DPNI_CMDID_GET_EARLY_DROP DPNI_CMD_V2(0x26A)
+#define DPNI_CMDID_SET_CONGESTION_NOTIFICATION DPNI_CMD_V3(0x267)
+#define DPNI_CMDID_GET_CONGESTION_NOTIFICATION DPNI_CMD_V3(0x268)
+#define DPNI_CMDID_SET_EARLY_DROP DPNI_CMD_V3(0x269)
+#define DPNI_CMDID_GET_EARLY_DROP DPNI_CMD_V3(0x26A)
#define DPNI_CMDID_GET_OFFLOAD DPNI_CMD(0x26B)
#define DPNI_CMDID_SET_OFFLOAD DPNI_CMD(0x26C)
#define DPNI_CMDID_SET_TX_CONFIRMATION_MODE DPNI_CMD(0x266)
uint8_t num_queues;
uint8_t num_tcs;
uint8_t mac_filter_entries;
- uint8_t pad1;
+ uint8_t num_channels;
uint8_t vlan_filter_entries;
uint8_t pad2;
uint8_t qos_entries;
uint8_t num_tx_tcs;
/* response word 1 */
uint8_t vlan_filter_entries;
- uint8_t pad1;
+ uint8_t num_channels;
uint8_t qos_entries;
uint8_t pad2;
uint16_t fs_entries;
#define DPNI_COUPLED_SHIFT 0
#define DPNI_COUPLED_SIZE 1
+#define DPNI_LNI_SHAPER_SHIFT 1
+#define DPNI_LNI_SHAPER_SIZE 1
struct dpni_cmd_set_tx_shaping {
uint16_t tx_cr_max_burst_size;
uint32_t pad;
uint32_t tx_cr_rate_limit;
uint32_t tx_er_rate_limit;
- /* from LSB: coupled:1 */
- uint8_t coupled;
+ /* from LSB: coupled:1, lni_shaper: 1*/
+ uint8_t options;
+ uint8_t channel_id;
+ uint16_t oal;
};
struct dpni_cmd_set_max_frame_length {
uint16_t flags;
uint8_t prio_group_A;
uint8_t prio_group_B;
- uint32_t pad0;
+ uint8_t channel_idx;
+ uint8_t pad0[3];
uint8_t modes[4];
uint32_t pad1;
uint64_t pad2;
uint8_t qtype;
uint8_t tc;
uint8_t index;
+ uint8_t channel_id;
};
#define DPNI_DEST_TYPE_SHIFT 0
uint64_t user_context;
/* cmd word 4 */
uint8_t cgid;
+ uint8_t channel_id;
};
#define DPNI_DISCARD_ON_MISS_SHIFT 0
struct dpni_cmd_early_drop {
uint8_t qtype;
uint8_t tc;
- uint8_t pad[6];
+ uint8_t channel_id;
+ uint8_t pad[5];
uint64_t early_drop_iova;
};
uint8_t qtype;
uint8_t tc;
uint8_t index;
- uint32_t pad0;
+ uint8_t channel_id;
+ uint8_t pad0[3];
/* cmd word 1 */
/* from LSB: enable:1 oal_lo:7 */
uint8_t enable_oal_lo;
struct dpni_cmd_set_congestion_notification {
uint8_t qtype;
uint8_t tc;
- uint8_t pad;
+ uint8_t channel_id;
uint8_t congestion_point;
uint8_t cgid;
uint8_t pad2[3];
struct dpni_cmd_get_congestion_notification {
uint8_t qtype;
uint8_t tc;
- uint8_t pad;
+ uint8_t channel_id;
uint8_t congestion_point;
uint8_t cgid;
};