mirror of
https://github.com/torvalds/linux.git
synced 2026-04-22 08:44:02 -04:00
The Rate Limiting (RL) feature allows to control the rate of requests
that can be submitted on a ring pair (RP). This allows sharing a QAT
device among multiple users while ensuring a guaranteed throughput.
The driver provides a mechanism that allows users to set policies, that
are programmed to the device. The device is then enforcing those policies.
Configuration of RL is accomplished through entities called SLAs
(Service Level Agreement). Each SLA object gets a unique identifier
and defines the limitations for a single service across up to four
ring pairs (RPs count allocated to a single VF).
The rate is determined using two fields:
* CIR (Committed Information Rate), i.e., the guaranteed rate.
* PIR (Peak Information Rate), i.e., the maximum rate achievable
when the device has available resources.
The rate values are expressed in permille scale i.e. 0-1000.
Ring pair selection is achieved by providing a 64-bit mask, where
each bit corresponds to one of the ring pairs.
This adds an interface and logic that allow to add, update, retrieve
and remove an SLA.
Signed-off-by: Damian Muszynski <damian.muszynski@intel.com>
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Reviewed-by: Tero Kristo <tero.kristo@linux.intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
28 lines
1.2 KiB
C
28 lines
1.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/* Copyright(c) 2023 Intel Corporation */
|
|
#ifndef ADF_ADMIN
|
|
#define ADF_ADMIN
|
|
|
|
#include "icp_qat_fw_init_admin.h"
|
|
|
|
struct adf_accel_dev;
|
|
|
|
int adf_init_admin_comms(struct adf_accel_dev *accel_dev);
|
|
void adf_exit_admin_comms(struct adf_accel_dev *accel_dev);
|
|
int adf_send_admin_init(struct adf_accel_dev *accel_dev);
|
|
int adf_get_ae_fw_counters(struct adf_accel_dev *accel_dev, u16 ae, u64 *reqs, u64 *resps);
|
|
int adf_init_admin_pm(struct adf_accel_dev *accel_dev, u32 idle_delay);
|
|
int adf_send_admin_tim_sync(struct adf_accel_dev *accel_dev, u32 cnt);
|
|
int adf_send_admin_hb_timer(struct adf_accel_dev *accel_dev, uint32_t ticks);
|
|
int adf_send_admin_rl_init(struct adf_accel_dev *accel_dev,
|
|
struct icp_qat_fw_init_admin_slice_cnt *slices);
|
|
int adf_send_admin_rl_add_update(struct adf_accel_dev *accel_dev,
|
|
struct icp_qat_fw_init_admin_req *req);
|
|
int adf_send_admin_rl_delete(struct adf_accel_dev *accel_dev, u16 node_id,
|
|
u8 node_type);
|
|
int adf_get_fw_timestamp(struct adf_accel_dev *accel_dev, u64 *timestamp);
|
|
int adf_get_pm_info(struct adf_accel_dev *accel_dev, dma_addr_t p_state_addr, size_t buff_size);
|
|
int adf_get_cnv_stats(struct adf_accel_dev *accel_dev, u16 ae, u16 *err_cnt, u16 *latest_err);
|
|
|
|
#endif
|