lkml.org 
[lkml]   [2021]   [Jan]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 15/34] misc: xlink-pcie: Add XLink API interface
    Date
    From: Srikanth Thokala <srikanth.thokala@intel.com>

    Provide interface for XLink layer to interact with XLink PCIe transport
    layer on both local host and remote host.

    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Reviewed-by: Mark Gross <mgross@linux.intel.com>
    Signed-off-by: Srikanth Thokala <srikanth.thokala@intel.com>
    ---
    drivers/misc/xlink-pcie/common/interface.c | 109 +++++++++++++++++++
    drivers/misc/xlink-pcie/local_host/Makefile | 1 +
    drivers/misc/xlink-pcie/remote_host/Makefile | 1 +
    3 files changed, 111 insertions(+)
    create mode 100644 drivers/misc/xlink-pcie/common/interface.c

    diff --git a/drivers/misc/xlink-pcie/common/interface.c b/drivers/misc/xlink-pcie/common/interface.c
    new file mode 100644
    index 000000000000..56c1d9ed9d8f
    --- /dev/null
    +++ b/drivers/misc/xlink-pcie/common/interface.c
    @@ -0,0 +1,109 @@
    +// SPDX-License-Identifier: GPL-2.0-only
    +/*****************************************************************************
    + *
    + * Intel Keem Bay XLink PCIe Driver
    + *
    + * Copyright (C) 2020 Intel Corporation
    + *
    + ****************************************************************************/
    +
    +#include <linux/xlink_drv_inf.h>
    +
    +#include "core.h"
    +#include "xpcie.h"
    +
    +/* Define xpcie driver interface API */
    +int xlink_pcie_get_device_list(u32 *sw_device_id_list, u32 *num_devices)
    +{
    + if (!sw_device_id_list || !num_devices)
    + return -EINVAL;
    +
    + *num_devices = intel_xpcie_get_device_num(sw_device_id_list);
    +
    + return 0;
    +}
    +EXPORT_SYMBOL(xlink_pcie_get_device_list);
    +
    +int xlink_pcie_get_device_name(u32 sw_device_id, char *device_name,
    + size_t name_size)
    +{
    + if (!device_name)
    + return -EINVAL;
    +
    + return intel_xpcie_get_device_name_by_id(sw_device_id,
    + device_name, name_size);
    +}
    +EXPORT_SYMBOL(xlink_pcie_get_device_name);
    +
    +int xlink_pcie_get_device_status(u32 sw_device_id, u32 *device_status)
    +{
    + u32 status;
    + int rc;
    +
    + if (!device_status)
    + return -EINVAL;
    +
    + rc = intel_xpcie_get_device_status_by_id(sw_device_id, &status);
    + if (rc)
    + return rc;
    +
    + switch (status) {
    + case XPCIE_STATUS_READY:
    + case XPCIE_STATUS_RUN:
    + *device_status = _XLINK_DEV_READY;
    + break;
    + case XPCIE_STATUS_ERROR:
    + *device_status = _XLINK_DEV_ERROR;
    + break;
    + case XPCIE_STATUS_RECOVERY:
    + *device_status = _XLINK_DEV_RECOVERY;
    + break;
    + case XPCIE_STATUS_OFF:
    + *device_status = _XLINK_DEV_OFF;
    + break;
    + default:
    + *device_status = _XLINK_DEV_BUSY;
    + break;
    + }
    +
    + return 0;
    +}
    +EXPORT_SYMBOL(xlink_pcie_get_device_status);
    +
    +int xlink_pcie_boot_device(u32 sw_device_id, const char *binary_name)
    +{
    + return 0;
    +}
    +EXPORT_SYMBOL(xlink_pcie_boot_device);
    +
    +int xlink_pcie_connect(u32 sw_device_id)
    +{
    + return intel_xpcie_pci_connect_device(sw_device_id);
    +}
    +EXPORT_SYMBOL(xlink_pcie_connect);
    +
    +int xlink_pcie_read(u32 sw_device_id, void *data, size_t *const size,
    + u32 timeout)
    +{
    + if (!data || !size)
    + return -EINVAL;
    +
    + return intel_xpcie_pci_read(sw_device_id, data, size, timeout);
    +}
    +EXPORT_SYMBOL(xlink_pcie_read);
    +
    +int xlink_pcie_write(u32 sw_device_id, void *data, size_t *const size,
    + u32 timeout)
    +{
    + if (!data || !size)
    + return -EINVAL;
    +
    + return intel_xpcie_pci_write(sw_device_id, data, size, timeout);
    +}
    +EXPORT_SYMBOL(xlink_pcie_write);
    +
    +int xlink_pcie_reset_device(u32 sw_device_id)
    +{
    + return intel_xpcie_pci_reset_device(sw_device_id);
    +}
    +EXPORT_SYMBOL(xlink_pcie_reset_device);
    diff --git a/drivers/misc/xlink-pcie/local_host/Makefile b/drivers/misc/xlink-pcie/local_host/Makefile
    index 65df94c7e860..16bb1e7345ac 100644
    --- a/drivers/misc/xlink-pcie/local_host/Makefile
    +++ b/drivers/misc/xlink-pcie/local_host/Makefile
    @@ -3,3 +3,4 @@ mxlk_ep-objs := epf.o
    mxlk_ep-objs += dma.o
    mxlk_ep-objs += core.o
    mxlk_ep-objs += ../common/util.o
    +mxlk_ep-objs += ../common/interface.o
    diff --git a/drivers/misc/xlink-pcie/remote_host/Makefile b/drivers/misc/xlink-pcie/remote_host/Makefile
    index e8074dbb1161..088e121ad46e 100644
    --- a/drivers/misc/xlink-pcie/remote_host/Makefile
    +++ b/drivers/misc/xlink-pcie/remote_host/Makefile
    @@ -3,3 +3,4 @@ mxlk-objs := main.o
    mxlk-objs += pci.o
    mxlk-objs += core.o
    mxlk-objs += ../common/util.o
    +mxlk-objs += ../common/interface.o
    --
    2.17.1
    \
     
     \ /
      Last update: 2021-01-08 22:32    [W:4.378 / U:0.328 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site