linux/drivers/staging/media/atomisp/pci/runtime/queue/interface/ia_css_queue.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * Support for Intel Camera Imaging ISP subsystem.
   4 * Copyright (c) 2010 - 2015, Intel Corporation.
   5 *
   6 * This program is free software; you can redistribute it and/or modify it
   7 * under the terms and conditions of the GNU General Public License,
   8 * version 2, as published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope it will be useful, but WITHOUT
  11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  13 * more details.
  14 */
  15
  16#ifndef __IA_CSS_QUEUE_H
  17#define __IA_CSS_QUEUE_H
  18
  19#include <platform_support.h>
  20#include <type_support.h>
  21
  22#include "ia_css_queue_comm.h"
  23#include "../src/queue_access.h"
  24
  25/* Local Queue object descriptor */
  26struct ia_css_queue_local {
  27        ia_css_circbuf_desc_t *cb_desc; /*Circbuf desc for local queues*/
  28        ia_css_circbuf_elem_t *cb_elems; /*Circbuf elements*/
  29};
  30
  31typedef struct ia_css_queue_local ia_css_queue_local_t;
  32
  33/* Handle for queue object*/
  34typedef struct ia_css_queue ia_css_queue_t;
  35
  36/*****************************************************************************
  37 * Queue Public APIs
  38 *****************************************************************************/
  39/* @brief Initialize a local queue instance.
  40 *
  41 * @param[out] qhandle. Handle to queue instance for use with API
  42 * @param[in]  desc.   Descriptor with queue properties filled-in
  43 * @return     0      - Successful init of local queue instance.
  44 * @return     -EINVAL - Invalid argument.
  45 *
  46 */
  47int ia_css_queue_local_init(
  48    ia_css_queue_t *qhandle,
  49    ia_css_queue_local_t *desc);
  50
  51/* @brief Initialize a remote queue instance
  52 *
  53 * @param[out] qhandle. Handle to queue instance for use with API
  54 * @param[in]  desc.   Descriptor with queue properties filled-in
  55 * @return     0      - Successful init of remote queue instance.
  56 * @return     -EINVAL - Invalid argument.
  57 */
  58int ia_css_queue_remote_init(
  59    ia_css_queue_t *qhandle,
  60    ia_css_queue_remote_t *desc);
  61
  62/* @brief Uninitialize a queue instance
  63 *
  64 * @param[in]  qhandle. Handle to queue instance
  65 * @return     0 - Successful uninit.
  66 *
  67 */
  68int ia_css_queue_uninit(
  69    ia_css_queue_t *qhandle);
  70
  71/* @brief Enqueue an item in the queue instance
  72 *
  73 * @param[in]  qhandle. Handle to queue instance
  74 * @param[in]  item.    Object to be enqueued.
  75 * @return     0       - Successful enqueue.
  76 * @return     -EINVAL  - Invalid argument.
  77 * @return     -ENOBUFS - Queue is full.
  78 *
  79 */
  80int ia_css_queue_enqueue(
  81    ia_css_queue_t *qhandle,
  82    uint32_t item);
  83
  84/* @brief Dequeue an item from the queue instance
  85 *
  86 * @param[in]  qhandle. Handle to queue instance
  87 * @param[out] item.    Object to be dequeued into this item.
  88
  89 * @return     0       - Successful dequeue.
  90 * @return     -EINVAL  - Invalid argument.
  91 * @return     -ENODATA - Queue is empty.
  92 *
  93 */
  94int ia_css_queue_dequeue(
  95    ia_css_queue_t *qhandle,
  96    uint32_t *item);
  97
  98/* @brief Check if the queue is empty
  99 *
 100 * @param[in]  qhandle.  Handle to queue instance
 101 * @param[in]  is_empty  True if empty, False if not.
 102 * @return     0       - Successful access state.
 103 * @return     -EINVAL  - Invalid argument.
 104 * @return     -ENOSYS  - Function not implemented.
 105 *
 106 */
 107int ia_css_queue_is_empty(
 108    ia_css_queue_t *qhandle,
 109    bool *is_empty);
 110
 111/* @brief Check if the queue is full
 112 *
 113 * @param[in]  qhandle.  Handle to queue instance
 114 * @param[in]  is_full   True if Full, False if not.
 115 * @return     0       - Successfully access state.
 116 * @return     -EINVAL  - Invalid argument.
 117 * @return     -ENOSYS  - Function not implemented.
 118 *
 119 */
 120int ia_css_queue_is_full(
 121    ia_css_queue_t *qhandle,
 122    bool *is_full);
 123
 124/* @brief Get used space in the queue
 125 *
 126 * @param[in]  qhandle.  Handle to queue instance
 127 * @param[in]  size      Number of available elements in the queue
 128 * @return     0       - Successfully access state.
 129 * @return     -EINVAL  - Invalid argument.
 130 *
 131 */
 132int ia_css_queue_get_used_space(
 133    ia_css_queue_t *qhandle,
 134    uint32_t *size);
 135
 136/* @brief Get free space in the queue
 137 *
 138 * @param[in]  qhandle.  Handle to queue instance
 139 * @param[in]  size      Number of free elements in the queue
 140 * @return     0       - Successfully access state.
 141 * @return     -EINVAL  - Invalid argument.
 142 *
 143 */
 144int ia_css_queue_get_free_space(
 145    ia_css_queue_t *qhandle,
 146    uint32_t *size);
 147
 148/* @brief Peek at an element in the queue
 149 *
 150 * @param[in]  qhandle.  Handle to queue instance
 151 * @param[in]  offset   Offset of element to peek,
 152 *                       starting from head of queue
 153 * @param[in]  element   Value of element returned
 154 * @return     0       - Successfully access state.
 155 * @return     -EINVAL  - Invalid argument.
 156 *
 157 */
 158int ia_css_queue_peek(
 159    ia_css_queue_t *qhandle,
 160    u32 offset,
 161    uint32_t *element);
 162
 163/* @brief Get the usable size for the queue
 164 *
 165 * @param[in]  qhandle. Handle to queue instance
 166 * @param[out] size     Size value to be returned here.
 167 * @return     0       - Successful get size.
 168 * @return     -EINVAL  - Invalid argument.
 169 * @return     -ENOSYS  - Function not implemented.
 170 *
 171 */
 172int ia_css_queue_get_size(
 173    ia_css_queue_t *qhandle,
 174    uint32_t *size);
 175
 176#endif /* __IA_CSS_QUEUE_H */
 177