aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/include/api/odp/pool.h
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linux-generic/include/api/odp/pool.h')
-rw-r--r--platform/linux-generic/include/api/odp/pool.h203
1 files changed, 203 insertions, 0 deletions
diff --git a/platform/linux-generic/include/api/odp/pool.h b/platform/linux-generic/include/api/odp/pool.h
new file mode 100644
index 000000000..19efb5940
--- /dev/null
+++ b/platform/linux-generic/include/api/odp/pool.h
@@ -0,0 +1,203 @@
+/* Copyright (c) 2015, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+
+/**
+ * @file
+ *
+ * ODP pool
+ */
+
+#ifndef ODP_POOL_H_
+#define ODP_POOL_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#include <odp/std_types.h>
+#include <odp/platform_types.h>
+#include <odp/buffer.h>
+#include <odp/event.h>
+
+/** @addtogroup odp_buffer
+ * Operations on a pool.
+ * @{
+ */
+
+/** Maximum queue name lenght in chars */
+#define ODP_POOL_NAME_LEN 32
+
+/**
+ * Pool parameters
+ * Used to communicate pool creation options.
+ */
+typedef struct odp_pool_param_t {
+ union {
+ struct {
+ uint32_t size; /**< Buffer size in bytes. The
+ maximum number of bytes
+ application will store in each
+ buffer. */
+ uint32_t align; /**< Minimum buffer alignment in bytes.
+ Valid values are powers of two.
+ Use 0 for default alignment.
+ Default will always be a multiple
+ of 8. */
+ uint32_t num; /**< Number of buffers in the pool */
+ } buf;
+/* Reserved for packet and timeout specific params
+ struct {
+ uint32_t seg_size;
+ uint32_t seg_align;
+ uint32_t num;
+ } pkt;
+*/
+ struct {
+ uint32_t __res1; /* Keep struct identical to buf, */
+ uint32_t __res2; /* until pool implementation is fixed*/
+ uint32_t num; /**< Number of timeouts in the pool */
+ } tmo;
+ };
+
+ int type; /**< Pool type */
+
+} odp_pool_param_t;
+
+/** Invalid pool type */
+#define ODP_POOL_TYPE_INVALID ODP_EVENT_TYPE_INVALID
+/** Packet pool*/
+#define ODP_POOL_PACKET ODP_EVENT_PACKET
+/** Buffer pool */
+#define ODP_POOL_BUFFER ODP_EVENT_BUFFER
+/** Timeout pool */
+#define ODP_POOL_TIMEOUT ODP_EVENT_TIMEOUT
+
+/**
+ * Create a pool
+ * This routine is used to create a pool. It take three
+ * arguments: the optional name of the pool to be created, an optional shared
+ * memory handle, and a parameter struct that describes the pool to be
+ * created. If a name is not specified the result is an anonymous pool that
+ * cannot be referenced by odp_pool_lookup().
+ *
+ * @param name Name of the pool, max ODP_POOL_NAME_LEN-1 chars.
+ * May be specified as NULL for anonymous pools.
+ *
+ * @param shm The shared memory object in which to create the pool.
+ * Use ODP_SHM_NULL to reserve default memory type
+ * for the pool type.
+ *
+ * @param params Pool parameters.
+ *
+ * @return Handle of the created pool
+ * @retval ODP_POOL_INVALID Pool could not be created
+ */
+
+odp_pool_t odp_pool_create(const char *name,
+ odp_shm_t shm,
+ odp_pool_param_t *params);
+
+/**
+ * Destroy a pool previously created by odp_pool_create()
+ *
+ * @param pool Handle of the pool to be destroyed
+ *
+ * @retval 0 Success
+ * @retval -1 Failure
+ *
+ * @note This routine destroys a previously created pool. This call
+ * does not destroy any shared memory object passed to
+ * odp_pool_create() used to store the pool contents. The caller
+ * takes responsibility for that. If no shared memory object was passed as
+ * part of the create call, then this routine will destroy any internal shared
+ * memory objects associated with the pool. Results are undefined if
+ * an attempt is made to destroy a pool that contains allocated or
+ * otherwise active buffers.
+ */
+int odp_pool_destroy(odp_pool_t pool);
+
+/**
+ * Find a pool by name
+ *
+ * @param name Name of the pool
+ *
+ * @return Handle of found pool
+ * @retval ODP_POOL_INVALID Pool could not be found
+ *
+ * @note This routine cannot be used to look up an anonymous pool (one created
+ * with no name).
+ */
+odp_pool_t odp_pool_lookup(const char *name);
+
+/**
+ * Pool information struct
+ * Used to get information about a pool.
+ */
+typedef struct odp_pool_info_t {
+ const char *name; /**< pool name */
+ odp_shm_t shm; /**< handle of shared memory area
+ supplied by application to
+ contain pool, or
+ ODP_SHM_INVALID if this pool is
+ managed by ODP */
+ odp_pool_param_t params; /**< pool parameters */
+} odp_pool_info_t;
+
+/**
+ * Retrieve information about a pool
+ *
+ * @param pool Pool handle
+ *
+ * @param[out] info Receives an odp_pool_info_t object
+ * that describes the pool.
+ *
+ * @retval 0 Success
+ * @retval -1 Failure. Info could not be retrieved.
+ */
+
+int odp_pool_info(odp_pool_t pool, odp_pool_info_t *info);
+
+/**
+ * Print pool info
+ *
+ * @param pool Pool handle
+ *
+ * @note This routine writes implementation-defined information about the
+ * specified pool to the ODP log. The intended use is for debugging.
+ */
+void odp_pool_print(odp_pool_t pool);
+
+/**
+ * Buffer alloc
+ *
+ * The validity of a buffer can be cheked at any time with odp_buffer_is_valid()
+ * @param pool Pool handle
+ *
+ * @return Handle of allocated buffer
+ * @retval ODP_BUFFER_INVALID Buffer could not be allocated
+ */
+odp_buffer_t odp_buffer_alloc(odp_pool_t pool);
+
+/**
+ * Buffer free
+ *
+ * @param buf Buffer handle
+ *
+ */
+void odp_buffer_free(odp_buffer_t buf);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif