root/include/xen/xen-front-pgdir-shbuf.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 OR MIT */
   2 
   3 /*
   4  * Xen frontend/backend page directory based shared buffer
   5  * helper module.
   6  *
   7  * Copyright (C) 2018 EPAM Systems Inc.
   8  *
   9  * Author: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
  10  */
  11 
  12 #ifndef __XEN_FRONT_PGDIR_SHBUF_H_
  13 #define __XEN_FRONT_PGDIR_SHBUF_H_
  14 
  15 #include <linux/kernel.h>
  16 
  17 #include <xen/grant_table.h>
  18 
  19 struct xen_front_pgdir_shbuf_ops;
  20 
  21 struct xen_front_pgdir_shbuf {
  22         /*
  23          * Number of references granted for the backend use:
  24          *
  25          *  - for frontend allocated/imported buffers this holds the number
  26          *    of grant references for the page directory and the pages
  27          *    of the buffer
  28          *
  29          *  - for the buffer provided by the backend this only holds the number
  30          *    of grant references for the page directory itself as grant
  31          *    references for the buffer will be provided by the backend.
  32          */
  33         int num_grefs;
  34         grant_ref_t *grefs;
  35         /* Page directory backing storage. */
  36         u8 *directory;
  37 
  38         /*
  39          * Number of pages for the shared buffer itself (excluding the page
  40          * directory).
  41          */
  42         int num_pages;
  43         /*
  44          * Backing storage of the shared buffer: these are the pages being
  45          * shared.
  46          */
  47         struct page **pages;
  48 
  49         struct xenbus_device *xb_dev;
  50 
  51         /* These are the ops used internally depending on be_alloc mode. */
  52         const struct xen_front_pgdir_shbuf_ops *ops;
  53 
  54         /* Xen map handles for the buffer allocated by the backend. */
  55         grant_handle_t *backend_map_handles;
  56 };
  57 
  58 struct xen_front_pgdir_shbuf_cfg {
  59         struct xenbus_device *xb_dev;
  60 
  61         /* Number of pages of the buffer backing storage. */
  62         int num_pages;
  63         /* Pages of the buffer to be shared. */
  64         struct page **pages;
  65 
  66         /*
  67          * This is allocated outside because there are use-cases when
  68          * the buffer structure is allocated as a part of a bigger one.
  69          */
  70         struct xen_front_pgdir_shbuf *pgdir;
  71         /*
  72          * Mode of grant reference sharing: if set then backend will share
  73          * grant references to the buffer with the frontend.
  74          */
  75         int be_alloc;
  76 };
  77 
  78 int xen_front_pgdir_shbuf_alloc(struct xen_front_pgdir_shbuf_cfg *cfg);
  79 
  80 grant_ref_t
  81 xen_front_pgdir_shbuf_get_dir_start(struct xen_front_pgdir_shbuf *buf);
  82 
  83 int xen_front_pgdir_shbuf_map(struct xen_front_pgdir_shbuf *buf);
  84 
  85 int xen_front_pgdir_shbuf_unmap(struct xen_front_pgdir_shbuf *buf);
  86 
  87 void xen_front_pgdir_shbuf_free(struct xen_front_pgdir_shbuf *buf);
  88 
  89 #endif /* __XEN_FRONT_PGDIR_SHBUF_H_ */

/* [<][>][^][v][top][bottom][index][help] */