get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 84969,
    "url": "http://patches.dpdk.org/api/patches/84969/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20201210150648.8784-20-talshn@nvidia.com/",
    "project": {
        "id": 1,
        "url": "http://patches.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": "<20201210150648.8784-20-talshn@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20201210150648.8784-20-talshn@nvidia.com",
    "date": "2020-12-10T15:06:34",
    "name": "[v2,19/33] common/mlx5/windows: add glue functions APIs",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "e4cea091927eae43a65120b3a612eb56c3aebe3d",
    "submitter": {
        "id": 1893,
        "url": "http://patches.dpdk.org/api/people/1893/?format=api",
        "name": "Tal Shnaiderman",
        "email": "talshn@nvidia.com"
    },
    "delegate": {
        "id": 3268,
        "url": "http://patches.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20201210150648.8784-20-talshn@nvidia.com/mbox/",
    "series": [
        {
            "id": 14240,
            "url": "http://patches.dpdk.org/api/series/14240/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=14240",
            "date": "2020-12-10T15:06:17",
            "name": "mlx5 Windows support - part #5",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/14240/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/84969/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/84969/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 ED27BA04DB;\n\tThu, 10 Dec 2020 16:14:41 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 2C0ECCA56;\n\tThu, 10 Dec 2020 16:08:17 +0100 (CET)",
            "from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])\n by dpdk.org (Postfix) with ESMTP id C85ADC97C\n for <dev@dpdk.org>; Thu, 10 Dec 2020 16:07:52 +0100 (CET)",
            "from Internal Mail-Server by MTLPINE1 (envelope-from\n talshn@nvidia.com) with SMTP; 10 Dec 2020 17:07:46 +0200",
            "from nvidia.com (l-wincomp04-vm.mtl.labs.mlnx [10.237.1.5])\n by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 0BAF7h9B007994;\n Thu, 10 Dec 2020 17:07:46 +0200"
        ],
        "From": "Tal Shnaiderman <talshn@nvidia.com>",
        "To": "dev@dpdk.org",
        "Cc": "thomas@monjalon.net, matan@nvidia.com, rasland@nvidia.com,\n ophirmu@nvidia.com",
        "Date": "Thu, 10 Dec 2020 17:06:34 +0200",
        "Message-Id": "<20201210150648.8784-20-talshn@nvidia.com>",
        "X-Mailer": "git-send-email 2.16.1.windows.4",
        "In-Reply-To": "<20201210150648.8784-1-talshn@nvidia.com>",
        "References": "<20201027232335.31427-2-ophirmu@nvidia.com>\n <20201210150648.8784-1-talshn@nvidia.com>",
        "Subject": "[dpdk-dev] [PATCH v2 19/33] common/mlx5/windows: add glue functions\n\tAPIs",
        "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": "Windows glue functions are added to file mlx5/windows/mlx5_glue.c.\nThe following APIs are supported:\nget_device_list, free_device_list, open_device, close_device,\nquery_device, query_hca_iseg, devx_obj_create, devx_obj_destroy,\ndevx_obj_query, devx_obj_modify, devx_general_cmd, devx_umem_reg,\ndevx_umem_dereg, devx_alloc_uar, devx_free_uar, devx_fs_rule_add,\ndevx_fs_rule_del, devx_query_eqn\nNew added files:\nmlx5_win_defs.h - this file imports missing definitions from Linux\nrdma-core library and Linux OS.\nmlx5_win_ext.h - this file contains structs that enable a unified\nLinux/Windows API. Each struct has an equivalent (but different) Linux\nstruct. By calling with 'void *' pointers - the Linux/Windows API is\nidentical.\n\nSigned-off-by: Tal Shnaiderman <talshn@nvidia.com>\nAcked-by: Matan Azrad <matan@nvidia.com>\n---\n drivers/common/mlx5/rte_common_mlx5_exports.def |   1 +\n drivers/common/mlx5/windows/mlx5_glue.c         | 304 ++++++++++++++++++++++++\n drivers/common/mlx5/windows/mlx5_glue.h         |  58 +++++\n drivers/common/mlx5/windows/mlx5_win_defs.h     |  25 ++\n drivers/common/mlx5/windows/mlx5_win_ext.h      |  34 +++\n 5 files changed, 422 insertions(+)\n create mode 100644 drivers/common/mlx5/windows/mlx5_glue.c\n create mode 100644 drivers/common/mlx5/windows/mlx5_glue.h\n create mode 100644 drivers/common/mlx5/windows/mlx5_win_defs.h\n create mode 100644 drivers/common/mlx5/windows/mlx5_win_ext.h",
    "diff": "diff --git a/drivers/common/mlx5/rte_common_mlx5_exports.def b/drivers/common/mlx5/rte_common_mlx5_exports.def\nindex 15aafc3809..2f6aab133b 100644\n--- a/drivers/common/mlx5/rte_common_mlx5_exports.def\n+++ b/drivers/common/mlx5/rte_common_mlx5_exports.def\n@@ -36,6 +36,7 @@ EXPORTS\n \tmlx5_devx_cmd_create_flow_hit_aso_obj\n \n \tmlx5_get_dbr\n+\tmlx5_glue\n \n \tmlx5_malloc_mem_select\n \tmlx5_mr_btree_init\ndiff --git a/drivers/common/mlx5/windows/mlx5_glue.c b/drivers/common/mlx5/windows/mlx5_glue.c\nnew file mode 100644\nindex 0000000000..7f8a00aaa7\n--- /dev/null\n+++ b/drivers/common/mlx5/windows/mlx5_glue.c\n@@ -0,0 +1,304 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright 2020 Mellanox Technologies, Ltd\n+ */\n+\n+#include <errno.h>\n+#include <stdalign.h>\n+#include <stddef.h>\n+#include <stdint.h>\n+#include <stdlib.h>\n+#include <unistd.h>\n+\n+#include <rte_malloc.h>\n+\n+#include \"mlx5_glue.h\"\n+#include \"mlx5_common_utils.h\"\n+#include \"mlx5_win_ext.h\"\n+\n+/*\n+ * The returned value of this API is an array of pointers to mlx5\n+ * devices under Windows. The interesting parameters of a device:\n+ * Device PCI parameters: domain, bus, device id, function.\n+ * Device name.\n+ */\n+static void *\n+mlx5_glue_devx_get_device_list(int *num_devices)\n+{\n+\tstruct devx_device_bdf *devx_bdf_devs = NULL;\n+\tsize_t n_devx_devx = 0;\n+\tint32_t ret = devx_get_device_list(&n_devx_devx, &devx_bdf_devs);\n+\n+\tif (ret) {\n+\t\terrno = ret;\n+\t\t*num_devices = 0;\n+\t\treturn NULL;\n+\t}\n+\t*num_devices = (int)n_devx_devx;\n+\treturn devx_bdf_devs;\n+}\n+\n+static void\n+mlx5_glue_devx_free_device_list(void *list)\n+{\n+\tif (!list) {\n+\t\terrno = EINVAL;\n+\t\treturn;\n+\t}\n+\tdevx_free_device_list(list);\n+}\n+\n+static int\n+mlx5_glue_devx_close_device(void *ctx)\n+{\n+\tmlx5_context_st *mlx5_ctx;\n+\tint rc;\n+\n+\tif (!ctx)\n+\t\treturn -EINVAL;\n+\tmlx5_ctx = (mlx5_context_st *)ctx;\n+\trc = devx_close_device(mlx5_ctx->devx_ctx);\n+\tfree(mlx5_ctx);\n+\treturn rc;\n+}\n+\n+static void *\n+mlx5_glue_devx_open_device(void *device)\n+{\n+\tstruct mlx5_context *mlx5_ctx;\n+\n+\tif (!device) {\n+\t\terrno = EINVAL;\n+\t\treturn NULL;\n+\t}\n+\tmlx5_ctx = malloc((sizeof(struct mlx5_context)));\n+\tif (!mlx5_ctx) {\n+\t\terrno = ENOMEM;\n+\t\treturn NULL;\n+\t}\n+\tmemset(mlx5_ctx, 0, sizeof(*mlx5_ctx));\n+\tmlx5_ctx->devx_ctx = devx_open_device(device);\n+\tif (DEVX_IS_ERR(mlx5_ctx->devx_ctx)) {\n+\t\terrno = -DEVX_PTR_ERR(mlx5_ctx->devx_ctx);\n+\t\tfree(mlx5_ctx);\n+\t\treturn NULL;\n+\t}\n+\treturn mlx5_ctx;\n+}\n+\n+static int\n+mlx5_glue_devx_query_device(void *device_bdf, void *dev_inf)\n+{\n+\tstruct devx_device_bdf *dev_bdf;\n+\tstruct devx_device *mlx5_dev;\n+\n+\tif (!device_bdf)\n+\t\treturn -EINVAL;\n+\tdev_bdf = (struct devx_device_bdf *)device_bdf;\n+\tmlx5_dev = (struct devx_device *)dev_inf;\n+\tint err = devx_query_device(dev_bdf, mlx5_dev);\n+\tif (err)\n+\t\treturn -E_FAIL;\n+\treturn 0;\n+}\n+\n+static void *\n+mlx5_glue_devx_query_hca_iseg_mapping(void *ctx, uint32_t *cb_iseg)\n+{\n+\tstruct mlx5_context *mlx5_ctx;\n+\tvoid *pv_iseg;\n+\tint err;\n+\n+\tif (!ctx) {\n+\t\terrno = EINVAL;\n+\t\treturn NULL;\n+\t}\n+\tmlx5_ctx = (struct mlx5_context *)ctx;\n+\terr = devx_query_hca_iseg_mapping(mlx5_ctx->devx_ctx,\n+\t\t\t\t\t\tcb_iseg, &pv_iseg);\n+\tif (err) {\n+\t\terrno = err;\n+\t\treturn NULL;\n+\t}\n+\treturn pv_iseg;\n+}\n+\n+static void *\n+mlx5_glue_devx_obj_create(void *ctx,\n+\t\t\t      void *in, size_t inlen,\n+\t\t\t      void *out, size_t outlen)\n+{\n+\tmlx5_devx_obj_st *devx_obj;\n+\n+\tif (!ctx) {\n+\t\terrno = EINVAL;\n+\t\treturn NULL;\n+\t}\n+\tdevx_obj = malloc((sizeof(*devx_obj)));\n+\tif (!devx_obj) {\n+\t\terrno = ENOMEM;\n+\t\treturn NULL;\n+\t}\n+\tmemset(devx_obj, 0, sizeof(*devx_obj));\n+\tdevx_obj->devx_ctx = GET_DEVX_CTX(ctx);\n+\tdevx_obj->obj = devx_obj_create(devx_obj->devx_ctx,\n+\t\t\t\t\tin, inlen, out, outlen);\n+\tif (DEVX_IS_ERR(devx_obj->obj)) {\n+\t\terrno = -DEVX_PTR_ERR(devx_obj->obj);\n+\t\tfree(devx_obj);\n+\t\treturn NULL;\n+\t}\n+\treturn devx_obj;\n+}\n+\n+static int\n+mlx5_glue_devx_obj_destroy(void *obj)\n+{\n+\tmlx5_devx_obj_st *devx_obj;\n+\n+\tif (!obj)\n+\t\treturn -EINVAL;\n+\tdevx_obj = obj;\n+\tint rc = devx_obj_destroy(devx_obj->obj);\n+\tfree(devx_obj);\n+\treturn rc;\n+}\n+\n+static int\n+mlx5_glue_devx_general_cmd(void *ctx,\n+\t\t\t   void *in, size_t inlen,\n+\t\t\t   void *out, size_t outlen)\n+{\n+\tif (!ctx)\n+\t\treturn -EINVAL;\n+\treturn devx_cmd(GET_DEVX_CTX(ctx), in, inlen, out, outlen);\n+}\n+\n+static int\n+mlx5_glue_devx_obj_query(void *obj,\n+\t\t\t    void *in, size_t inlen,\n+\t\t\t    void *out, size_t outlen)\n+{\n+\treturn devx_cmd(GET_OBJ_CTX(obj), in, inlen, out, outlen);\n+}\n+\n+static int\n+mlx5_glue_devx_obj_modify(void *obj,\n+\t\t\t    void *in, size_t inlen,\n+\t\t\t    void *out, size_t outlen)\n+{\n+\treturn devx_cmd(GET_OBJ_CTX(obj), in, inlen, out, outlen);\n+}\n+\n+static int\n+mlx5_glue_devx_umem_dereg(void *pumem)\n+{\n+\tstruct devx_obj_handle *umem;\n+\n+\tif (!pumem)\n+\t\treturn -EINVAL;\n+\tumem = pumem;\n+\treturn devx_umem_unreg(umem);\n+}\n+\n+static void *\n+mlx5_glue_devx_umem_reg(void *ctx, void *addr, size_t size,\n+\t\t\t\t  uint32_t access, uint32_t *id)\n+{\n+\tstruct devx_obj_handle *umem_hdl;\n+\tint w_access = DEVX_UMEM_ACCESS_READ;\n+\n+\tif (!ctx) {\n+\t\terrno = EINVAL;\n+\t\treturn NULL;\n+\t}\n+\tif (access)\n+\t\tw_access |= DEVX_UMEM_ACCESS_WRITE;\n+\n+\tumem_hdl = devx_umem_reg(GET_DEVX_CTX(ctx), addr,\n+\t\t\t\t\tsize, w_access, id);\n+\tif (DEVX_IS_ERR(umem_hdl)) {\n+\t\terrno = -DEVX_PTR_ERR(umem_hdl);\n+\t\treturn NULL;\n+\t}\n+\treturn umem_hdl;\n+}\n+\n+static void *\n+mlx5_glue_devx_alloc_uar(void *ctx,\n+\t\tuint32_t flags)\n+{\n+\tdevx_uar_handle *uar;\n+\n+\tif (!ctx) {\n+\t\terrno = EINVAL;\n+\t\treturn NULL;\n+\t}\n+\tuar = devx_alloc_uar(GET_DEVX_CTX(ctx), flags);\n+\tif (DEVX_IS_ERR(uar)) {\n+\t\terrno = -DEVX_PTR_ERR(uar);\n+\t\treturn NULL;\n+\t}\n+\treturn uar;\n+}\n+\n+static int\n+mlx5_glue_devx_query_eqn(void *ctx,\n+\t\tuint32_t cpus, uint32_t *eqn)\n+{\n+\tif (!ctx)\n+\t\treturn -EINVAL;\n+\treturn devx_query_eqn(GET_DEVX_CTX(ctx), cpus, eqn);\n+}\n+\n+static void\n+mlx5_glue_devx_free_uar(void *uar)\n+{\n+\tdevx_free_uar((devx_uar_handle *)uar);\n+}\n+\n+static void*\n+mlx5_glue_devx_fs_rule_add(void *ctx, void *in, uint32_t inlen)\n+\n+{\n+\tstruct devx_obj_handle *rule_hdl = NULL;\n+\n+\tif (!ctx) {\n+\t\terrno = EINVAL;\n+\t\treturn NULL;\n+\t}\n+\trule_hdl = devx_fs_rule_add(GET_DEVX_CTX(ctx), in, inlen);\n+\tif (DEVX_IS_ERR(rule_hdl)) {\n+\t\terrno = -DEVX_PTR_ERR(rule_hdl);\n+\t\treturn NULL;\n+\t}\n+\treturn rule_hdl;\n+}\n+\n+static int\n+mlx5_glue_devx_fs_rule_del(void *flow)\n+{\n+\treturn devx_fs_rule_del(flow);\n+}\n+\n+alignas(RTE_CACHE_LINE_SIZE)\n+const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){\n+\t.version = MLX5_GLUE_VERSION,\n+\t.get_device_list = mlx5_glue_devx_get_device_list,\n+\t.free_device_list = mlx5_glue_devx_free_device_list,\n+\t.open_device = mlx5_glue_devx_open_device,\n+\t.close_device = mlx5_glue_devx_close_device,\n+\t.query_device = mlx5_glue_devx_query_device,\n+\t.query_hca_iseg = mlx5_glue_devx_query_hca_iseg_mapping,\n+\t.devx_obj_create = mlx5_glue_devx_obj_create,\n+\t.devx_obj_destroy = mlx5_glue_devx_obj_destroy,\n+\t.devx_obj_query = mlx5_glue_devx_obj_query,\n+\t.devx_obj_modify = mlx5_glue_devx_obj_modify,\n+\t.devx_general_cmd = mlx5_glue_devx_general_cmd,\n+\t.devx_umem_reg = mlx5_glue_devx_umem_reg,\n+\t.devx_umem_dereg = mlx5_glue_devx_umem_dereg,\n+\t.devx_alloc_uar = mlx5_glue_devx_alloc_uar,\n+\t.devx_free_uar = mlx5_glue_devx_free_uar,\n+\t.devx_fs_rule_add = mlx5_glue_devx_fs_rule_add,\n+\t.devx_fs_rule_del = mlx5_glue_devx_fs_rule_del,\n+\t.devx_query_eqn = mlx5_glue_devx_query_eqn,\n+};\ndiff --git a/drivers/common/mlx5/windows/mlx5_glue.h b/drivers/common/mlx5/windows/mlx5_glue.h\nnew file mode 100644\nindex 0000000000..f2261ec7ac\n--- /dev/null\n+++ b/drivers/common/mlx5/windows/mlx5_glue.h\n@@ -0,0 +1,58 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright 2020 Mellanox Technologies, Ltd\n+ */\n+\n+#ifndef MLX5_GLUE_H_\n+#define MLX5_GLUE_H_\n+\n+#include <stddef.h>\n+#include <stdint.h>\n+\n+#include <rte_byteorder.h>\n+#include <mlx5_win_defs.h>\n+\n+#ifndef MLX5_GLUE_VERSION\n+#define MLX5_GLUE_VERSION \"\"\n+#endif\n+\n+/* LIB_GLUE_VERSION must be updated every time this structure is modified. */\n+struct mlx5_glue {\n+\tconst char *version;\n+\tvoid *(*devx_obj_create)(void *ctx,\n+\t\t\t\t void *in, size_t inlen,\n+\t\t\t\t void *out, size_t outlen);\n+\tint (*devx_obj_destroy)(void *obj);\n+\tint (*devx_obj_query)(void *obj,\n+\t\t\t      void *in, size_t inlen,\n+\t\t\t      void *out, size_t outlen);\n+\tint (*devx_obj_modify)(void *obj,\n+\t\t\t       void *in, size_t inlen,\n+\t\t\t       void *out, size_t outlen);\n+\tint (*devx_general_cmd)(void *ctx,\n+\t\t\t       void *in, size_t inlen,\n+\t\t\t       void *out, size_t outlen);\n+\tint (*devx_umem_dereg)(void *umem);\n+\tvoid *(*devx_umem_reg)(void *ctx,\n+\t\t\tvoid *addr, size_t size,\n+\t\t\tuint32_t access, uint32_t *id);\n+\tvoid *(*devx_alloc_uar)(void *ctx,\n+\t\t\tuint32_t flags);\n+\tvoid (*devx_free_uar)(void *uar);\n+\tvoid *(*get_device_list)(int *num_devices);\n+\tvoid (*free_device_list)(void *list);\n+\tvoid *(*open_device)(void *device);\n+\tint (*close_device)(void *ctx);\n+\tint (*query_device)(void *device_bdf, void *dev_inf);\n+\tvoid* (*query_hca_iseg)(void *ctx, uint32_t *cb_iseg);\n+\tint (*devx_obj_query_async)(void *obj,\n+\t\t\t\t    const void *in, size_t inlen,\n+\t\t\t\t    size_t outlen, uint64_t wr_id,\n+\t\t\t\t    void *cmd_comp);\n+\tvoid *(*devx_fs_rule_add)(void *ctx, void *in, uint32_t inlen);\n+\tint (*devx_fs_rule_del)(void *flow);\n+\tint (*devx_query_eqn)(void *context, uint32_t cpus, uint32_t *eqn);\n+};\n+\n+extern const struct mlx5_glue *mlx5_glue;\n+\n+#endif /* MLX5_GLUE_H_ */\ndiff --git a/drivers/common/mlx5/windows/mlx5_win_defs.h b/drivers/common/mlx5/windows/mlx5_win_defs.h\nnew file mode 100644\nindex 0000000000..72a3131f5e\n--- /dev/null\n+++ b/drivers/common/mlx5/windows/mlx5_win_defs.h\n@@ -0,0 +1,25 @@\n+/*\n+ * Copyright (C) Mellanox Technologies, Ltd. 2001-2020.\n+ *\n+ */\n+#ifndef __MLX5_WIN_DEFS_H__\n+#define __MLX5_WIN_DEFS_H__\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+enum {\n+\tMLX5_CQE_OWNER_MASK\t= 1,\n+\tMLX5_CQE_REQ\t\t= 0,\n+\tMLX5_CQE_RESP_WR_IMM\t= 1,\n+\tMLX5_CQE_RESP_SEND\t= 2,\n+\tMLX5_CQE_RESP_SEND_IMM\t= 3,\n+\tMLX5_CQE_RESP_SEND_INV\t= 4,\n+\tMLX5_CQE_RESIZE_CQ\t= 5,\n+\tMLX5_CQE_NO_PACKET\t= 6,\n+\tMLX5_CQE_REQ_ERR\t= 13,\n+\tMLX5_CQE_RESP_ERR\t= 14,\n+\tMLX5_CQE_INVALID\t= 15,\n+};\n+#endif /* __MLX5_WIN_DEFS_H__ */\ndiff --git a/drivers/common/mlx5/windows/mlx5_win_ext.h b/drivers/common/mlx5/windows/mlx5_win_ext.h\nnew file mode 100644\nindex 0000000000..0e74910e9d\n--- /dev/null\n+++ b/drivers/common/mlx5/windows/mlx5_win_ext.h\n@@ -0,0 +1,34 @@\n+/*\n+ * Copyright (C) Mellanox Technologies, Ltd. 2001-2020.\n+ *\n+ */\n+#ifndef __MLX5_WIN_ETX_H__\n+#define __MLX5_WIN_ETX_H__\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include \"mlx5devx.h\"\n+\n+typedef struct mlx5_context {\n+\tdevx_device_ctx        *devx_ctx;\n+\tstruct devx_device mlx5_dev;\n+\n+} mlx5_context_st;\n+\n+typedef struct {\n+\tdevx_device_ctx *devx_ctx;\n+\tstruct devx_obj_handle *obj;\n+} mlx5_devx_obj_st;\n+\n+struct mlx5_devx_umem {\n+\tvoid                   *addr;\n+\tstruct devx_obj_handle *umem_hdl;\n+\tuint32_t                umem_id;\n+};\n+\n+#define GET_DEVX_CTX(ctx) (((mlx5_context_st *)ctx)->devx_ctx)\n+#define GET_OBJ_CTX(obj)  (((mlx5_devx_obj_st *)obj)->devx_ctx)\n+\n+#endif /* __MLX5_WIN_ETX_H__ */\n",
    "prefixes": [
        "v2",
        "19/33"
    ]
}