mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 09:11:26 +03:00
Modify nvscic2c-pcie files to use updated licenses as per nvidia-oot. Bug 3739487 Jira C2C-826 Change-Id: I819b459fdb0743d37bc08b4c9b92097d87e62884 Signed-off-by: dbadgaiyan <dbadgaiyan@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2830686 Reviewed-by: svcacv <svcacv@nvidia.com> Reviewed-by: Arihant Jejani <ajejani@nvidia.com> Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com> GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
128 lines
3.2 KiB
C
128 lines
3.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/* Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */
|
|
|
|
#ifndef __COMM_CHANNEL_H__
|
|
#define __COMM_CHANNEL_H__
|
|
|
|
#include <uapi/misc/nvscic2c-pcie-ioctl.h>
|
|
|
|
#include "common.h"
|
|
|
|
/* forward declaration. */
|
|
struct driver_ctx_t;
|
|
|
|
enum comm_msg_type {
|
|
/* invalid.*/
|
|
COMM_MSG_TYPE_INVALID = 0,
|
|
|
|
/*
|
|
* One time message from peer @DRV_MODE_EPC (PCIe RP) towards
|
|
* @DRV_MODE_EPF(PCIe EP) for boot-strap mechanism.
|
|
*/
|
|
COMM_MSG_TYPE_BOOTSTRAP,
|
|
|
|
/* Link status shared between @DRV_MODE_EPC and @DRV_MODE_EPF.*/
|
|
COMM_MSG_TYPE_LINK,
|
|
|
|
/* Share/Register export object with peer.*/
|
|
COMM_MSG_TYPE_REGISTER,
|
|
|
|
/* Unregister exported object back with peer.*/
|
|
COMM_MSG_TYPE_UNREGISTER,
|
|
|
|
/* return edma rx descriptor iova to peer x86 */
|
|
COMM_MSG_TYPE_EDMA_RX_DESC_IOVA_RETURN,
|
|
|
|
/*
|
|
* One time message from peer @DRV_MODE_EPC (PCIe RP) towards
|
|
* @DRV_MODE_EPF(PCIe EP) for initiating shutdown.
|
|
*/
|
|
COMM_MSG_TYPE_SHUTDOWN,
|
|
|
|
/* Maximum. */
|
|
COMM_MSG_TYPE_MAXIMUM,
|
|
};
|
|
|
|
/*
|
|
* For @DRV_MODE_EPF(PCIe EP), it doesn't know the send area towards
|
|
* @DRV_MODE_EPC (PCIe RP - there is not BAR with PCIe RP). This is the first
|
|
* message and only once sent by @DRV_MODE_EPC towards @DRV_MODE_EPF for latter
|
|
* to configure it's outbound translation.
|
|
*/
|
|
struct comm_msg_bootstrap {
|
|
u64 iova;
|
|
enum peer_cpu_t peer_cpu;
|
|
};
|
|
|
|
/* to simply,only one channel c2c remote edma case */
|
|
struct comm_msg_edma_rx_desc_iova {
|
|
dma_addr_t iova;
|
|
};
|
|
|
|
/* Link status shared between @DRV_MODE_EPC and @DRV_MODE_EPF.
|
|
* Possible use: @DRV_MODE_EPC sends bootstrap message
|
|
* to @DRV_MODE_EPF without setting it's own PCIe link = UP, therefore,
|
|
* on compeleting initialization, @DRV_MODE_EPF(once bootstrap msg
|
|
* is received) shall send link = up message to @DRV_MODE_EPC.
|
|
*/
|
|
struct comm_msg_link {
|
|
enum nvscic2c_pcie_link status;
|
|
};
|
|
|
|
/*
|
|
* Private channel communication message sent by NvSciC2cPcie consumer
|
|
* towards producer to register the exported object at the NvSciC2cPcie
|
|
* producer SoC.
|
|
*/
|
|
struct comm_msg_register {
|
|
u64 export_desc;
|
|
u64 iova;
|
|
size_t size;
|
|
size_t offsetof;
|
|
};
|
|
|
|
/*
|
|
* Private channel communication message sent by NvSciC2cPcie producer
|
|
* towards onsumer to unregister it's exported object.
|
|
*/
|
|
struct comm_msg_unregister {
|
|
u64 export_desc;
|
|
u64 iova;
|
|
size_t size;
|
|
size_t offsetof;
|
|
};
|
|
|
|
struct comm_msg {
|
|
enum comm_msg_type type;
|
|
union data {
|
|
struct comm_msg_bootstrap bootstrap;
|
|
struct comm_msg_link link;
|
|
struct comm_msg_register reg;
|
|
struct comm_msg_unregister unreg;
|
|
struct comm_msg_edma_rx_desc_iova edma_rx_desc_iova;
|
|
} u;
|
|
} __aligned(8);
|
|
|
|
int
|
|
comm_channel_init(struct driver_ctx_t *drv_ctx, void **comm_channel_h);
|
|
|
|
void
|
|
comm_channel_deinit(void **comm_channel_h);
|
|
|
|
int
|
|
comm_channel_msg_send(void *comm_channel_h, struct comm_msg *msg);
|
|
|
|
int
|
|
comm_channel_ctrl_msg_send(void *comm_channel_h, struct comm_msg *msg);
|
|
|
|
int
|
|
comm_channel_register_msg_cb(void *comm_channel_h, enum comm_msg_type type,
|
|
struct callback_ops *ops);
|
|
int
|
|
comm_channel_unregister_msg_cb(void *comm_channel_h, enum comm_msg_type type);
|
|
|
|
int
|
|
comm_channel_edma_rx_desc_iova_send(void *comm_channel_h, struct comm_msg *msg);
|
|
|
|
#endif //__COMM_CHANNEL_H__
|