Files
Shardar Mohammed 83000c2754 misc: nvscic2c-pcie: fix build errors
Fix build errors when this driver compiled against K6.1 (kernel-oot)
- Remove dma-iommu.h header inclusion as its not present in K6.1
- Define IOVA_RANGE_CACHE_MAX_SIZE if this macro is not defined
- Import DMA_BUF "MODULE_IMPORT_NS(DMA_BUF);" to avoid below error
"ERROR: modpost: module nvscic2c-pcie-epc uses symbol dma_buf_* from
 namespace DMA_BUF, but does not import it"

Bug 3978996

Change-Id: Idd9a53b19c63467583b87f64ffa2c2e888ac02e1
Signed-off-by: Shardar Mohammed <smohammed@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2898149
Reviewed-by: Deepak Kumar Badgaiyan <dbadgaiyan@nvidia.com>
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
2023-05-09 05:25:54 -07:00

179 lines
4.1 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/* Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */
#ifndef __VMAP_INTERNAL_H__
#define __VMAP_INTERNAL_H__
#include <linux/dma-buf.h>
#include <linux/pci.h>
#include "common.h"
#include "vmap.h"
/* forward declaration. */
struct vmap_ctx_t;
struct memobj_pin_t {
/* Input param fd -> dma_buf to be mapped.*/
struct dma_buf *dmabuf;
enum vmap_mngd mngd;
enum vmap_obj_prot prot;
enum vmap_obj_type type;
/* Input dmabuf mapped to pci-dev(dev mngd) or dummy dev(client mngd).*/
struct dma_buf_attachment *attach;
struct sg_table *sgt;
enum dma_data_direction dir;
/*
* [OUT]contiguous iova region obtained from client (iova-mngr).
* which input dmabuf is mapped to.
*/
void *iova_block_h;
struct vmap_obj_attributes attrib;
/*
* [OUT]
* Per scatter-list nent mapping - used during free.
* Used for client-managed map only.
*/
u32 nr_nents;
struct iova_nent {
u64 iova;
size_t len;
bool mapped_iova;
} *nents;
};
struct syncobj_pin_t {
s32 fd;
u32 syncpt_id;
struct host1x_syncpt *sp;
phys_addr_t phy_addr;
enum vmap_mngd mngd;
enum vmap_obj_prot prot;
enum vmap_obj_type type;
/* local sync objs do not require pinning to pcie address space.*/
bool pin_reqd;
/*
* [OUT]contiguous iova region obtained from client (iova-mngr)
* which syncpoint shim aper is mapped to.
*/
void *iova_block_h;
struct vmap_obj_attributes attrib;
bool mapped_iova;
};
struct importobj_reg_t {
/*
* export descriptor and whereabouts of exported obj
* as received from remote end.
*/
u64 export_desc;
/* times exported by remote, imported by local.*/
u32 nr_export;
u32 nr_import;
struct vmap_obj_attributes attrib;
};
/* virtual mapping information for Mem obj.*/
struct memobj_map_ref {
s32 obj_id;
struct kref refcount;
struct memobj_pin_t pin;
struct vmap_ctx_t *vmap_ctx;
};
/* virtual mapping information for Sync obj. */
struct syncobj_map_ref {
s32 obj_id;
struct kref refcount;
struct syncobj_pin_t pin;
struct vmap_ctx_t *vmap_ctx;
};
/* virtual mapping information for Imported obj. */
struct importobj_map_ref {
s32 obj_id;
struct kref refcount;
struct importobj_reg_t reg;
struct vmap_ctx_t *vmap_ctx;
};
/* vmap subunit/abstraction context. */
struct vmap_ctx_t {
/* pci-client abstraction handle.*/
void *pci_client_h;
/* comm-channel abstraction. */
void *comm_channel_h;
/* host1x platform device for syncpoint interfaces.*/
struct platform_device *host1x_pdev;
/*
* dummy platform device. - This has smmu disabled to get the
* physical addresses of exported Mem objects when using client
* managed mapping.
*/
struct platform_device *dummy_pdev;
bool dummy_pdev_init;
/*
* Management of Mem/Sync object Ids.
*
* All objects mapped are identified by - pin_id. IDR mechanism
* generates these IDs. We maintain separate book-keeping for
* Mem, Sync and Import objects. The ID shall overalap between
* Mem, Sync and Import objects.
*
* ID is the pinned handle returned to other units.
*/
struct idr mem_idr;
struct idr sync_idr;
struct idr import_idr;
/* exclusive access to mem idr.*/
struct mutex mem_idr_lock;
/* exclusive access to sync idr.*/
struct mutex sync_idr_lock;
/* exclusive access to import idr.*/
struct mutex import_idr_lock;
};
void
memobj_devmngd_unpin(struct vmap_ctx_t *vmap_ctx,
struct memobj_pin_t *pin);
int
memobj_devmngd_pin(struct vmap_ctx_t *vmap_ctx,
struct memobj_pin_t *pin);
void
memobj_clientmngd_unpin(struct vmap_ctx_t *vmap_ctx,
struct memobj_pin_t *pin);
int
memobj_clientmngd_pin(struct vmap_ctx_t *vmap_ctx,
struct memobj_pin_t *pin);
void
memobj_unpin(struct vmap_ctx_t *vmap_ctx,
struct memobj_pin_t *pin);
int
memobj_pin(struct vmap_ctx_t *vmap_ctx,
struct memobj_pin_t *pin);
void
syncobj_clientmngd_unpin(struct vmap_ctx_t *vmap_ctx,
struct syncobj_pin_t *pin);
void
syncobj_unpin(struct vmap_ctx_t *vmap_ctx,
struct syncobj_pin_t *pin);
int
syncobj_pin(struct vmap_ctx_t *vmap_ctx,
struct syncobj_pin_t *pin);
#endif //__VMAP_INTERNAL_H__