#ifndef ICP_ACCEL_DEVICES_H_
#define ICP_ACCEL_DEVICES_H_
#include "cpa.h"
#include "qat_utils.h"
#include "adf_accel_devices.h"
#define ADF_CFG_NO_INSTANCE 0xFFFFFFFF
#define ICP_DC_TX_RING_0 6
#define ICP_DC_TX_RING_1 7
#define ICP_RX_RINGS_OFFSET 8
#define ICP_RINGS_PER_BANK 16
#define ICP_ARB_WRK_THREAD_TO_SARB 12
#define MAX_ACCEL_NAME_LEN 16
#define ADF_DEVICE_NAME_LENGTH 32
#define ADF_DEVICE_TYPE_LENGTH 8
#define ADF_CTL_DEVICE_NAME "/dev/qat_adf_ctl"
typedef enum {
ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC = 0x01,
ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC = 0x02,
ICP_ACCEL_CAPABILITIES_CIPHER = 0x04,
ICP_ACCEL_CAPABILITIES_AUTHENTICATION = 0x08,
ICP_ACCEL_CAPABILITIES_RESERVED_1 = 0x10,
ICP_ACCEL_CAPABILITIES_COMPRESSION = 0x20,
ICP_ACCEL_CAPABILITIES_DEPRECATED = 0x40,
ICP_ACCEL_CAPABILITIES_RANDOM_NUMBER = 0x80,
ICP_ACCEL_CAPABILITIES_CRYPTO_ZUC = 0x100,
ICP_ACCEL_CAPABILITIES_SHA3 = 0x200,
ICP_ACCEL_CAPABILITIES_KPT = 0x400,
ICP_ACCEL_CAPABILITIES_RL = 0x800,
ICP_ACCEL_CAPABILITIES_HKDF = 0x1000,
ICP_ACCEL_CAPABILITIES_ECEDMONT = 0x2000,
ICP_ACCEL_CAPABILITIES_EXT_ALGCHAIN = 0x4000,
ICP_ACCEL_CAPABILITIES_SHA3_EXT = 0x8000,
ICP_ACCEL_CAPABILITIES_AESGCM_SPC = 0x10000,
ICP_ACCEL_CAPABILITIES_CHACHA_POLY = 0x20000,
ICP_ACCEL_CAPABILITIES_SM2 = 0x40000,
ICP_ACCEL_CAPABILITIES_SM3 = 0x80000,
ICP_ACCEL_CAPABILITIES_SM4 = 0x100000,
ICP_ACCEL_CAPABILITIES_INLINE = 0x200000,
ICP_ACCEL_CAPABILITIES_CNV_INTEGRITY = 0x400000,
ICP_ACCEL_CAPABILITIES_CNV_INTEGRITY64 = 0x800000,
ICP_ACCEL_CAPABILITIES_LZ4_COMPRESSION = 0x1000000,
ICP_ACCEL_CAPABILITIES_LZ4S_COMPRESSION = 0x2000000,
ICP_ACCEL_CAPABILITIES_AES_V2 = 0x4000000,
ICP_ACCEL_CAPABILITIES_KPT2 = 0x8000000,
} icp_accel_capabilities_t;
typedef enum device_type_e {
DEVICE_UNKNOWN = 0,
DEVICE_DH895XCC,
DEVICE_DH895XCCVF,
DEVICE_C62X,
DEVICE_C62XVF,
DEVICE_C3XXX,
DEVICE_C3XXXVF,
DEVICE_200XX,
DEVICE_200XXVF,
DEVICE_C4XXX,
DEVICE_C4XXXVF,
DEVICE_D15XX,
DEVICE_D15XXVF,
DEVICE_4XXX,
DEVICE_4XXXVF
} device_type_t;
typedef enum adf_service_type_s {
ADF_SERVICE_CRYPTO,
ADF_SERVICE_COMPRESS,
ADF_SERVICE_MAX
} adf_service_type_t;
typedef struct accel_dev_s {
Cpa32U accelId;
Cpa8U *pAccelName;
Cpa32U aeMask;
device_type_t deviceType;
char deviceName[ADF_DEVICE_NAME_LENGTH + 1];
Cpa32U accelCapabilitiesMask;
Cpa32U dcExtendedFeatures;
QatUtilsAtomic usageCounter;
Cpa32U deviceMemAvail;
void *pRingInflight;
void *pSalHandle;
void *pQatStats;
void *ringInfoCallBack;
void *pShramConstants;
Cpa64U pShramConstantsDma;
Cpa32U adfSubsystemStatus;
Cpa8U pkg_id;
enum dev_sku_info sku;
Cpa32U pciDevId;
Cpa8U devFileName[ADF_DEVICE_NAME_LENGTH];
Cpa32S csrFileHdl;
Cpa32S ringFileHdl;
void *accel;
Cpa32U maxNumBanks;
Cpa32U maxNumRingsPerBank;
void *pInstMgr;
void *banks;
struct adf_accel_dev *accel_dev;
struct accel_dev_s *pPrev;
struct accel_dev_s *pNext;
} icp_accel_dev_t;
#endif