Spdk/python/spdk/rpc/accel.py
Konrad Sztyber b2454dfbcc accel: introduce platform drivers
The goal of a platform driver is to execute chained accel operations in
the most efficient way possible.  A driver is aware of the hardware
available on a platform and can execute several operations as a single
one.  For instance, if we want to do DMA and then encrypt the data, the
driver can do both at the same time, if the hardware is capable of doing
that.

Platform drivers aren't required to support all operations.  If a given
operation cannot be executed, the driver should notify accel to continue
processing a sequence, via spdk_accel_sequence_continue(), and that
operation will processed by a module assigned to its opcode.

It is required however, that all platform drivers support memory
domains, including the "virtual" accel domain.  A method for allocating
those buffers will be added in the following patches.

This patch only adds methods to register and select platorm drivers, but
doesn't change the way a sequnce is executed (i.e. it doesn't use the
driver to execute it).

Signed-off-by: Konrad Sztyber <konrad.sztyber@intel.com>
Change-Id: I97a0b07e264601ab3cf980735319fe8cea54d38e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16375
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: Paul Luse <paul.e.luse@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
2023-02-13 13:52:06 +00:00

91 lines
1.9 KiB
Python

# SPDX-License-Identifier: BSD-3-Clause
# Copyright (C) 2022 Intel Corporation.
# All rights reserved.
#
from spdk.rpc.helpers import deprecated_alias
def accel_get_opc_assignments(client):
"""Get list of opcode name to module assignments.
"""
return client.call('accel_get_opc_assignments')
@deprecated_alias('accel_get_engine_info')
def accel_get_module_info(client):
"""Get list of valid module names and their operations.
"""
return client.call('accel_get_module_info')
def accel_assign_opc(client, opname, module):
"""Manually assign an operation to a module.
Args:
opname: name of operation
module: name of module
"""
params = {
'opname': opname,
'module': module,
}
return client.call('accel_assign_opc', params)
def accel_crypto_key_create(client, cipher, key, key2, name):
"""Create Data Encryption Key Identifier.
Args:
cipher: cipher
key: key
key2: key2
name: key name
"""
params = {
'cipher': cipher,
'key': key,
'name': name,
}
if key2 is not None:
params['key2'] = key2
return client.call('accel_crypto_key_create', params)
def accel_crypto_key_destroy(client, name):
"""Destroy Data Encryption Key.
Args:
name: key name
"""
params = {
'name': name
}
return client.call('accel_crypto_key_destroy', params)
def accel_crypto_keys_get(client, key_name):
"""Get a list of the crypto keys.
Args:
key_name: Get information about a specific key
"""
params = {}
if key_name is not None:
params['key_name'] = key_name
return client.call('accel_crypto_keys_get', params)
def accel_set_driver(client, name):
"""Select accel platform driver to execute operation chains.
Args:
name: name of the driver
"""
return client.call('accel_set_driver', {'name': name})