forked from xen-troops/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
xen/gntdev: Make private routines/structures accessible
This is in preparation for adding support of DMA buffer functionality: make map/unmap related code and structures, used privately by gntdev, ready for dma-buf extension, which will re-use these. Rename corresponding structures as those become non-private to gntdev now. Signed-off-by: Oleksandr Andrushchenko <[email protected]> Reviewed-by: Boris Ostrovsky <[email protected]> Signed-off-by: Boris Ostrovsky <[email protected]>
- Loading branch information
Oleksandr Andrushchenko
authored and
Boris Ostrovsky
committed
Jul 27, 2018
1 parent
975ef7f
commit 1d31456
Showing
2 changed files
with
131 additions
and
91 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
|
||
/* | ||
* Common functionality of grant device. | ||
* | ||
* Copyright (c) 2006-2007, D G Murray. | ||
* (c) 2009 Gerd Hoffmann <[email protected]> | ||
* (c) 2018 Oleksandr Andrushchenko, EPAM Systems Inc. | ||
*/ | ||
|
||
#ifndef _GNTDEV_COMMON_H | ||
#define _GNTDEV_COMMON_H | ||
|
||
#include <linux/mm.h> | ||
#include <linux/mman.h> | ||
#include <linux/mmu_notifier.h> | ||
#include <linux/types.h> | ||
|
||
struct gntdev_priv { | ||
/* Maps with visible offsets in the file descriptor. */ | ||
struct list_head maps; | ||
/* | ||
* Maps that are not visible; will be freed on munmap. | ||
* Only populated if populate_freeable_maps == 1 | ||
*/ | ||
struct list_head freeable_maps; | ||
/* lock protects maps and freeable_maps. */ | ||
struct mutex lock; | ||
struct mm_struct *mm; | ||
struct mmu_notifier mn; | ||
|
||
#ifdef CONFIG_XEN_GRANT_DMA_ALLOC | ||
/* Device for which DMA memory is allocated. */ | ||
struct device *dma_dev; | ||
#endif | ||
}; | ||
|
||
struct gntdev_unmap_notify { | ||
int flags; | ||
/* Address relative to the start of the gntdev_grant_map. */ | ||
int addr; | ||
int event; | ||
}; | ||
|
||
struct gntdev_grant_map { | ||
struct list_head next; | ||
struct vm_area_struct *vma; | ||
int index; | ||
int count; | ||
int flags; | ||
refcount_t users; | ||
struct gntdev_unmap_notify notify; | ||
struct ioctl_gntdev_grant_ref *grants; | ||
struct gnttab_map_grant_ref *map_ops; | ||
struct gnttab_unmap_grant_ref *unmap_ops; | ||
struct gnttab_map_grant_ref *kmap_ops; | ||
struct gnttab_unmap_grant_ref *kunmap_ops; | ||
struct page **pages; | ||
unsigned long pages_vm_start; | ||
|
||
#ifdef CONFIG_XEN_GRANT_DMA_ALLOC | ||
/* | ||
* If dmabuf_vaddr is not NULL then this mapping is backed by DMA | ||
* capable memory. | ||
*/ | ||
|
||
struct device *dma_dev; | ||
/* Flags used to create this DMA buffer: GNTDEV_DMA_FLAG_XXX. */ | ||
int dma_flags; | ||
void *dma_vaddr; | ||
dma_addr_t dma_bus_addr; | ||
/* Needed to avoid allocation in gnttab_dma_free_pages(). */ | ||
xen_pfn_t *frames; | ||
#endif | ||
}; | ||
|
||
struct gntdev_grant_map *gntdev_alloc_map(struct gntdev_priv *priv, int count, | ||
int dma_flags); | ||
|
||
void gntdev_add_map(struct gntdev_priv *priv, struct gntdev_grant_map *add); | ||
|
||
void gntdev_put_map(struct gntdev_priv *priv, struct gntdev_grant_map *map); | ||
|
||
bool gntdev_account_mapped_pages(int count); | ||
|
||
int gntdev_map_grant_pages(struct gntdev_grant_map *map); | ||
|
||
#endif |
Oops, something went wrong.