get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/64732/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 64732,
    "url": "http://patchwork.dpdk.org/api/patches/64732/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20200115182832.17012-2-marcinx.smoczynski@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20200115182832.17012-2-marcinx.smoczynski@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200115182832.17012-2-marcinx.smoczynski@intel.com",
    "date": "2020-01-15T18:28:27",
    "name": "[v3,1/6] cryptodev: introduce cpu crypto support API",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "51f4b65df9683964940e2d99e82b1293de720457",
    "submitter": {
        "id": 1293,
        "url": "http://patchwork.dpdk.org/api/people/1293/?format=api",
        "name": "Marcin Smoczynski",
        "email": "marcinx.smoczynski@intel.com"
    },
    "delegate": {
        "id": 6690,
        "url": "http://patchwork.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20200115182832.17012-2-marcinx.smoczynski@intel.com/mbox/",
    "series": [
        {
            "id": 8142,
            "url": "http://patchwork.dpdk.org/api/series/8142/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=8142",
            "date": "2020-01-15T18:28:26",
            "name": "Introduce CPU crypto mode",
            "version": 3,
            "mbox": "http://patchwork.dpdk.org/series/8142/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/64732/comments/",
    "check": "fail",
    "checks": "http://patchwork.dpdk.org/api/patches/64732/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id D03DAA0514;\n\tWed, 15 Jan 2020 19:30:31 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 305721C29C;\n\tWed, 15 Jan 2020 19:30:27 +0100 (CET)",
            "from mga01.intel.com (mga01.intel.com [192.55.52.88])\n by dpdk.org (Postfix) with ESMTP id CC67F1C297\n for <dev@dpdk.org>; Wed, 15 Jan 2020 19:30:24 +0100 (CET)",
            "from fmsmga001.fm.intel.com ([10.253.24.23])\n by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n 15 Jan 2020 10:30:24 -0800",
            "from msmoczyx-mobl.ger.corp.intel.com ([10.104.125.3])\n by fmsmga001.fm.intel.com with ESMTP; 15 Jan 2020 10:30:22 -0800"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.70,323,1574150400\"; d=\"scan'208\";a=\"254502250\"",
        "From": "Marcin Smoczynski <marcinx.smoczynski@intel.com>",
        "To": "akhil.goyal@nxp.com, konstantin.ananyev@intel.com,\n roy.fan.zhang@intel.com,\n declan.doherty@intel.com, radu.nicolau@intel.com",
        "Cc": "dev@dpdk.org,\n\tMarcin Smoczynski <marcinx.smoczynski@intel.com>",
        "Date": "Wed, 15 Jan 2020 19:28:27 +0100",
        "Message-Id": "<20200115182832.17012-2-marcinx.smoczynski@intel.com>",
        "X-Mailer": "git-send-email 2.21.0.windows.1",
        "In-Reply-To": "<20200115182832.17012-1-marcinx.smoczynski@intel.com>",
        "References": "<20200115182832.17012-1-marcinx.smoczynski@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v3 1/6] cryptodev: introduce cpu crypto support\n\tAPI",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Add new API allowing to process crypto operations in a synchronous\nmanner. Operations are performed on a set of SG arrays.\n\nSync mode is selected by setting appropriate flag in an xform\ntype number. Cryptodevs which allows CPU crypto operation mode have to\nuse RTE_CRYPTODEV_FF_SYM_CPU_CRYPTO capability.\n\nSigned-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>\nSigned-off-by: Marcin Smoczynski <marcinx.smoczynski@intel.com>\n---\n lib/librte_cryptodev/rte_crypto_sym.h         | 62 ++++++++++++++++++-\n lib/librte_cryptodev/rte_cryptodev.c          | 30 +++++++++\n lib/librte_cryptodev/rte_cryptodev.h          | 20 ++++++\n lib/librte_cryptodev/rte_cryptodev_pmd.h      | 19 ++++++\n .../rte_cryptodev_version.map                 |  1 +\n 5 files changed, 131 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/lib/librte_cryptodev/rte_crypto_sym.h b/lib/librte_cryptodev/rte_crypto_sym.h\nindex ffa038dc4..f5dd05ab0 100644\n--- a/lib/librte_cryptodev/rte_crypto_sym.h\n+++ b/lib/librte_cryptodev/rte_crypto_sym.h\n@@ -25,6 +25,59 @@ extern \"C\" {\n #include <rte_mempool.h>\n #include <rte_common.h>\n \n+/**\n+ * Crypto IO Vector (in analogy with struct iovec)\n+ * Supposed be used to pass input/output data buffers for crypto data-path\n+ * functions.\n+ */\n+struct rte_crypto_vec {\n+\t/** virtual address of the data buffer */\n+\tvoid *base;\n+\t/** IOVA of the data buffer */\n+\trte_iova_t *iova;\n+\t/** length of the data buffer */\n+\tuint32_t len;\n+};\n+\n+struct rte_crypto_sgl {\n+\t/** start of an array of vectors */\n+\tstruct rte_crypto_vec *vec;\n+\t/** size of an array of vectors */\n+\tuint32_t num;\n+};\n+\n+struct rte_crypto_sym_vec {\n+\t/** array of SGL vectors */\n+\tstruct rte_crypto_sgl *sgl;\n+\t/** array of pointers to IV */\n+\tvoid **iv;\n+\t/** array of pointers to AAD */\n+\tvoid **aad;\n+\t/** array of pointers to digest */\n+\tvoid **digest;\n+\t/**\n+\t * array of statuses for each operation:\n+\t *  - 0 on success\n+\t *  - errno on error\n+\t */\n+\tint32_t *status;\n+\t/** number of operations to perform */\n+\tuint32_t num;\n+};\n+\n+/**\n+ * used for cpu_crypto_process_bulk() to specify head/tail offsets\n+ * for auth/cipher processing.\n+ */\n+union rte_crypto_sym_ofs {\n+\tuint64_t raw;\n+\tstruct {\n+\t\tstruct {\n+\t\t\tuint16_t head;\n+\t\t\tuint16_t tail;\n+\t\t} auth, cipher;\n+\t} ofs;\n+};\n \n /** Symmetric Cipher Algorithms */\n enum rte_crypto_cipher_algorithm {\n@@ -425,7 +478,14 @@ enum rte_crypto_sym_xform_type {\n \tRTE_CRYPTO_SYM_XFORM_NOT_SPECIFIED = 0,\t/**< No xform specified */\n \tRTE_CRYPTO_SYM_XFORM_AUTH,\t\t/**< Authentication xform */\n \tRTE_CRYPTO_SYM_XFORM_CIPHER,\t\t/**< Cipher xform  */\n-\tRTE_CRYPTO_SYM_XFORM_AEAD\t\t/**< AEAD xform  */\n+\tRTE_CRYPTO_SYM_XFORM_AEAD,\t\t/**< AEAD xform  */\n+\n+\tRTE_CRYPTO_SYM_XFORM_TYPE_MASK = 0xFFFF,\n+\t/**< xform type mask value */\n+\tRTE_CRYPTO_SYM_XFORM_FLAG_MASK = 0xFFFF0000,\n+\t/**< xform flag mask value */\n+\tRTE_CRYPTO_SYM_CPU_CRYPTO = 0x80000000,\n+\t/**< xform flag for cpu-crypto */\n };\n \n /**\ndiff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c\nindex 89aa2ed3e..157fda890 100644\n--- a/lib/librte_cryptodev/rte_cryptodev.c\n+++ b/lib/librte_cryptodev/rte_cryptodev.c\n@@ -1616,6 +1616,36 @@ rte_cryptodev_sym_session_get_user_data(\n \treturn (void *)(sess->sess_data + sess->nb_drivers);\n }\n \n+static inline void\n+sym_crypto_fill_status(struct rte_crypto_sym_vec *vec, int32_t errnum)\n+{\n+\tuint32_t i;\n+\tfor (i = 0; i < vec->num; i++)\n+\t\tvec->status[i] = errnum;\n+}\n+\n+uint32_t\n+rte_cryptodev_sym_cpu_crypto_process(uint8_t dev_id,\n+\tstruct rte_cryptodev_sym_session *sess, union rte_crypto_sym_ofs ofs,\n+\tstruct rte_crypto_sym_vec *vec)\n+{\n+\tstruct rte_cryptodev *dev;\n+\n+\tif (!rte_cryptodev_pmd_is_valid_dev(dev_id)) {\n+\t\tsym_crypto_fill_status(vec, EINVAL);\n+\t\treturn 0;\n+\t}\n+\n+\tdev = rte_cryptodev_pmd_get_dev(dev_id);\n+\n+\tif (*dev->dev_ops->sym_cpu_process == NULL) {\n+\t\tsym_crypto_fill_status(vec, ENOTSUP);\n+\t\treturn 0;\n+\t}\n+\n+\treturn dev->dev_ops->sym_cpu_process(dev, sess, ofs, vec);\n+}\n+\n /** Initialise rte_crypto_op mempool element */\n static void\n rte_crypto_op_init(struct rte_mempool *mempool,\ndiff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h\nindex c6ffa3b35..8786dfb90 100644\n--- a/lib/librte_cryptodev/rte_cryptodev.h\n+++ b/lib/librte_cryptodev/rte_cryptodev.h\n@@ -450,6 +450,8 @@ rte_cryptodev_asym_get_xform_enum(enum rte_crypto_asym_xform_type *xform_enum,\n /**< Support encrypted-digest operations where digest is appended to data */\n #define RTE_CRYPTODEV_FF_ASYM_SESSIONLESS\t\t(1ULL << 20)\n /**< Support asymmetric session-less operations */\n+#define\tRTE_CRYPTODEV_FF_SYM_CPU_CRYPTO\t\t\t(1ULL << 21)\n+/**< Support symmeteric cpu-crypto processing */\n \n \n /**\n@@ -1274,6 +1276,24 @@ void *\n rte_cryptodev_sym_session_get_user_data(\n \t\t\t\t\tstruct rte_cryptodev_sym_session *sess);\n \n+/**\n+ * Perform actual crypto processing (encrypt/digest or auth/decrypt)\n+ * on user provided data.\n+ *\n+ * @param\tdev_id\tThe device identifier.\n+ * @param\tsess\tCryptodev session structure\n+ * @param\tofs\tStart and stop offsets for auth and cipher operations\n+ * @param\tvec\tVectorized operation descriptor\n+ *\n+ * @return\n+ *  - Returns number of successfully processed packets.\n+ */\n+__rte_experimental\n+uint32_t\n+rte_cryptodev_sym_cpu_crypto_process(uint8_t dev_id,\n+\tstruct rte_cryptodev_sym_session *sess, union rte_crypto_sym_ofs ofs,\n+\tstruct rte_crypto_sym_vec *vec);\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/librte_cryptodev/rte_cryptodev_pmd.h b/lib/librte_cryptodev/rte_cryptodev_pmd.h\nindex fba14f2fa..5d9ee5fef 100644\n--- a/lib/librte_cryptodev/rte_cryptodev_pmd.h\n+++ b/lib/librte_cryptodev/rte_cryptodev_pmd.h\n@@ -308,6 +308,23 @@ typedef void (*cryptodev_sym_free_session_t)(struct rte_cryptodev *dev,\n  */\n typedef void (*cryptodev_asym_free_session_t)(struct rte_cryptodev *dev,\n \t\tstruct rte_cryptodev_asym_session *sess);\n+/**\n+ * Perform actual crypto processing (encrypt/digest or auth/decrypt)\n+ * on user provided data.\n+ *\n+ * @param\tdev\tCrypto device pointer\n+ * @param\tsess\tCryptodev session structure\n+ * @param\tofs\tStart and stop offsets for auth and cipher operations\n+ * @param\tvec\tVectorized operation descriptor\n+ *\n+ * @return\n+ *  - Returns number of successfully processed packets.\n+ *\n+ */\n+typedef uint32_t (*cryptodev_sym_cpu_crypto_process_t)\n+\t(struct rte_cryptodev *dev, struct rte_cryptodev_sym_session *sess,\n+\tunion rte_crypto_sym_ofs ofs, struct rte_crypto_sym_vec *vec);\n+\n \n /** Crypto device operations function pointer table */\n struct rte_cryptodev_ops {\n@@ -342,6 +359,8 @@ struct rte_cryptodev_ops {\n \t/**< Clear a Crypto sessions private data. */\n \tcryptodev_asym_free_session_t asym_session_clear;\n \t/**< Clear a Crypto sessions private data. */\n+\tcryptodev_sym_cpu_crypto_process_t sym_cpu_process;\n+\t/**< process input data synchronously (cpu-crypto). */\n };\n \n \ndiff --git a/lib/librte_cryptodev/rte_cryptodev_version.map b/lib/librte_cryptodev/rte_cryptodev_version.map\nindex 1dd1e259a..6e41b4be5 100644\n--- a/lib/librte_cryptodev/rte_cryptodev_version.map\n+++ b/lib/librte_cryptodev/rte_cryptodev_version.map\n@@ -71,6 +71,7 @@ EXPERIMENTAL {\n \trte_cryptodev_asym_session_init;\n \trte_cryptodev_asym_xform_capability_check_modlen;\n \trte_cryptodev_asym_xform_capability_check_optype;\n+\trte_cryptodev_sym_cpu_crypto_process;\n \trte_cryptodev_sym_get_existing_header_session_size;\n \trte_cryptodev_sym_session_get_user_data;\n \trte_cryptodev_sym_session_pool_create;\n",
    "prefixes": [
        "v3",
        "1/6"
    ]
}