4 * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in
15 * the documentation and/or other materials provided with the
17 * * Neither the name of Intel Corporation nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 #ifndef RTE_IVSHMEM_H_
35 #define RTE_IVSHMEM_H_
37 #include <rte_memzone.h>
38 #include <rte_mempool.h>
43 * The RTE IVSHMEM interface provides functions to create metadata files
44 * describing memory segments to be shared via QEMU IVSHMEM.
52 #define IVSHMEM_MAGIC 0x0BADC0DE
53 #define IVSHMEM_NAME_LEN 32
56 * Structure that holds IVSHMEM shared metadata entry.
58 struct rte_ivshmem_metadata_entry {
59 struct rte_memzone mz; /**< shared memzone */
60 uint64_t offset; /**< offset of memzone within IVSHMEM device */
64 * Structure that holds IVSHMEM metadata.
66 struct rte_ivshmem_metadata {
67 int magic_number; /**< magic number */
68 char name[IVSHMEM_NAME_LEN]; /**< name of the metadata file */
69 struct rte_ivshmem_metadata_entry entry[RTE_LIBRTE_IVSHMEM_MAX_ENTRIES];
70 /**< metadata entries */
74 * Creates metadata file with a given name
77 * Name of metadata file to be created
81 * - On failure, a negative value
83 int rte_ivshmem_metadata_create(const char * name);
86 * Adds memzone to a specific metadata file
91 * Name of metadata file for the memzone to be added to
95 * - On failure, a negative value
97 int rte_ivshmem_metadata_add_memzone(const struct rte_memzone * mz,
98 const char * md_name);
101 * Adds a ring descriptor to a specific metadata file
104 * Ring descriptor to be added
106 * Name of metadata file for the ring to be added to
110 * - On failure, a negative value
112 int rte_ivshmem_metadata_add_ring(const struct rte_ring * r,
113 const char * md_name);
116 * Adds a mempool to a specific metadata file
119 * Mempool to be added
121 * Name of metadata file for the mempool to be added to
125 * - On failure, a negative value
127 int rte_ivshmem_metadata_add_mempool(const struct rte_mempool * mp,
128 const char * md_name);
132 * Generates the QEMU command-line for IVSHMEM device for a given metadata file.
133 * This function is to be called after all the objects were added.
136 * Buffer to be filled with the command line arguments.
138 * Size of the buffer.
140 * Name of metadata file to generate QEMU command-line parameters for
144 * - On failure, a negative value
146 int rte_ivshmem_metadata_cmdline_generate(char *buffer, unsigned size,
151 * Dump all metadata entries from a given metadata file to the console.
154 * A pointer to a file for output
156 * Name of the metadata file to be dumped to console.
158 void rte_ivshmem_metadata_dump(FILE *f, const char *name);
165 #endif /* RTE_IVSHMEM_H_ */