Commit 39344a89 authored by Ioana Ciornei's avatar Ioana Ciornei Committed by David S. Miller
Browse files

dpaa2-eth: add API for Tx shaping



Add the necessary API (dpni_set_tx_shaping) for configuring the rate and
burst size of a per port shaper in DPAA2.

Signed-off-by: default avatarIoana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e3ec13be
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -626,4 +626,17 @@ struct dpni_cmd_set_congestion_notification {
	__le32 threshold_exit;
};

#define DPNI_COUPLED_SHIFT	0
#define DPNI_COUPLED_SIZE	1

struct dpni_cmd_set_tx_shaping {
	__le16 tx_cr_max_burst_size;
	__le16 tx_er_max_burst_size;
	__le32 pad;
	__le32 tx_cr_rate_limit;
	__le32 tx_er_rate_limit;
	/* from LSB: coupled:1 */
	u8 coupled;
};

#endif /* _FSL_DPNI_CMD_H */
+36 −0
Original line number Diff line number Diff line
@@ -1963,3 +1963,39 @@ int dpni_clear_qos_table(struct fsl_mc_io *mc_io,
	/* send command to mc*/
	return mc_send_command(mc_io, &cmd);
}

/**
 * dpni_set_tx_shaping() - Set the transmit shaping
 * @mc_io:		Pointer to MC portal's I/O object
 * @cmd_flags:		Command flags; one or more of 'MC_CMD_FLAG_'
 * @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
 *
 * Return:	'0' on Success; Error code otherwise.
 */
int dpni_set_tx_shaping(struct fsl_mc_io *mc_io,
			u32 cmd_flags,
			u16 token,
			const struct dpni_tx_shaping_cfg *tx_cr_shaper,
			const struct dpni_tx_shaping_cfg *tx_er_shaper,
			int coupled)
{
	struct dpni_cmd_set_tx_shaping *cmd_params;
	struct fsl_mc_command cmd = { 0 };

	/* prepare command */
	cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_TX_SHAPING,
					  cmd_flags,
					  token);
	cmd_params = (struct dpni_cmd_set_tx_shaping *)cmd.params;
	cmd_params->tx_cr_max_burst_size = cpu_to_le16(tx_cr_shaper->max_burst_size);
	cmd_params->tx_er_max_burst_size = cpu_to_le16(tx_er_shaper->max_burst_size);
	cmd_params->tx_cr_rate_limit = 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);

	/* send command to mc*/
	return mc_send_command(mc_io, &cmd);
}
+16 −0
Original line number Diff line number Diff line
@@ -1062,5 +1062,21 @@ int dpni_get_api_version(struct fsl_mc_io *mc_io,
			 u32 cmd_flags,
			 u16 *major_ver,
			 u16 *minor_ver);
/**
 * struct dpni_tx_shaping - Structure representing DPNI tx shaping configuration
 * @rate_limit:		Rate in Mbps
 * @max_burst_size:	Burst size in bytes (up to 64KB)
 */
struct dpni_tx_shaping_cfg {
	u32 rate_limit;
	u16 max_burst_size;
};

int dpni_set_tx_shaping(struct fsl_mc_io *mc_io,
			u32 cmd_flags,
			u16 token,
			const struct dpni_tx_shaping_cfg *tx_cr_shaper,
			const struct dpni_tx_shaping_cfg *tx_er_shaper,
			int coupled);

#endif /* __FSL_DPNI_H */