linux/drivers/staging/media/atomisp/pci/runtime/queue/src/queue_access.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 __QUEUE_ACCESS_H
  17#define __QUEUE_ACCESS_H
  18
  19#include <linux/errno.h>
  20
  21#include <type_support.h>
  22#include <ia_css_queue_comm.h>
  23#include <ia_css_circbuf.h>
  24
  25#define QUEUE_IGNORE_START_FLAG 0x0001
  26#define QUEUE_IGNORE_END_FLAG   0x0002
  27#define QUEUE_IGNORE_SIZE_FLAG  0x0004
  28#define QUEUE_IGNORE_STEP_FLAG  0x0008
  29#define QUEUE_IGNORE_DESC_FLAGS_MAX 0x000f
  30
  31#define QUEUE_IGNORE_SIZE_START_STEP_FLAGS \
  32        (QUEUE_IGNORE_SIZE_FLAG | \
  33        QUEUE_IGNORE_START_FLAG | \
  34        QUEUE_IGNORE_STEP_FLAG)
  35
  36#define QUEUE_IGNORE_SIZE_END_STEP_FLAGS \
  37        (QUEUE_IGNORE_SIZE_FLAG | \
  38        QUEUE_IGNORE_END_FLAG   | \
  39        QUEUE_IGNORE_STEP_FLAG)
  40
  41#define QUEUE_IGNORE_START_END_STEP_FLAGS \
  42        (QUEUE_IGNORE_START_FLAG | \
  43        QUEUE_IGNORE_END_FLAG     | \
  44        QUEUE_IGNORE_STEP_FLAG)
  45
  46#define QUEUE_CB_DESC_INIT(cb_desc)     \
  47        do {                            \
  48                (cb_desc)->size  = 0;   \
  49                (cb_desc)->step  = 0;   \
  50                (cb_desc)->start = 0;   \
  51                (cb_desc)->end   = 0;   \
  52        } while (0)
  53
  54struct ia_css_queue {
  55        u8 type;        /* Specify remote/local type of access */
  56        u8 location;    /* Cell location for queue */
  57        u8 proc_id;     /* Processor id for queue access */
  58        union {
  59                ia_css_circbuf_t cb_local;
  60                struct {
  61                        u32 cb_desc_addr; /*Circbuf desc address for remote queues*/
  62                        u32 cb_elems_addr; /*Circbuf elements addr for remote queue*/
  63                }       remote;
  64        } desc;
  65};
  66
  67int ia_css_queue_load(
  68    struct ia_css_queue *rdesc,
  69    ia_css_circbuf_desc_t *cb_desc,
  70    uint32_t ignore_desc_flags);
  71
  72int ia_css_queue_store(
  73    struct ia_css_queue *rdesc,
  74    ia_css_circbuf_desc_t *cb_desc,
  75    uint32_t ignore_desc_flags);
  76
  77int ia_css_queue_item_load(
  78    struct ia_css_queue *rdesc,
  79    u8 position,
  80    ia_css_circbuf_elem_t *item);
  81
  82int ia_css_queue_item_store(
  83    struct ia_css_queue *rdesc,
  84    u8 position,
  85    ia_css_circbuf_elem_t *item);
  86
  87#endif /* __QUEUE_ACCESS_H */
  88