diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-06-07 12:34:37 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-06-07 12:34:37 -0700 |
commit | 3036bc45364f98515a2c446d7fac2c34dcfbeff4 (patch) | |
tree | f565c03254413b779981ee5e9ed81b19d5b62c78 /drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue | |
parent | c90fca951e90ba470a3dc6087667edffcf8db21b (diff) | |
parent | 48a8bbc7ca494709522621929f8407ab823d73fc (diff) | |
download | op-kernel-dev-3036bc45364f98515a2c446d7fac2c34dcfbeff4.zip op-kernel-dev-3036bc45364f98515a2c446d7fac2c34dcfbeff4.tar.gz |
Merge tag 'media/v4.18-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media updates from Mauro Carvalho Chehab:
- remove of atomisp driver from staging, as nobody would have time to
dedicate huge efforts to fix all the problems there. Also, we have a
feeling that the driver may not even run the way it is.
- move Zoran driver to staging, in order to be either fixed to use VB2
and the proper media kAPIs or to be removed
- remove videobuf-dvb driver, with is unused for a while
- some V4L2 documentation fixes/improvements
- new sensor drivers: imx258 and ov7251
- a new driver was added to allow using I2C transparent drivers
- several improvements at the ddbridge driver
- several improvements at the ISDB pt1 driver, making it more coherent
with the DVB framework
- added a new platform driver for MIPI CSI-2 RX: cadence
- now, all media drivers can be compiled on x86 with COMPILE_TEST
- almost all media drivers now build on non-x86 architectures with
COMPILE_TEST
- lots of other random stuff: cleanups, support for new board models,
bug fixes, etc
* tag 'media/v4.18-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (464 commits)
media: omap2: fix compile-testing with FB_OMAP2=m
media: media/radio/Kconfig: add back RADIO_ISA
media: v4l2-ioctl.c: fix missing unlock in __video_do_ioctl()
media: pxa_camera: ignore -ENOIOCTLCMD from v4l2_subdev_call for s_power
media: arch: sh: migor: Fix TW9910 PDN gpio
media: staging: tegra-vde: Reset VDE regardless of memory client resetting failure
media: marvel-ccic: mmp: select VIDEOBUF2_VMALLOC/DMA_CONTIG
media: marvel-ccic: allow ccic and mmp drivers to coexist
media: uvcvideo: Prevent setting unavailable flags
media: ddbridge: conditionally enable fast TS for stv0910-equipped bridges
media: dvb-frontends/stv0910: make TS speed configurable
media: ddbridge/mci: add identifiers to function definition arguments
media: ddbridge/mci: protect against out-of-bounds array access in stop()
media: rc: ensure input/lirc device can be opened after register
media: rc: nuvoton: Keep device enabled during reg init
media: rc: nuvoton: Keep track of users on CIR enable/disable
media: rc: nuvoton: Tweak the interrupt enabling dance
media: uvcvideo: Support realtek's UVC 1.5 device
media: uvcvideo: Fix driver reference counting
media: gspca_zc3xx: Enable short exposure times for OV7648
...
Diffstat (limited to 'drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue')
5 files changed, 0 insertions, 966 deletions
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/interface/ia_css_queue.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/interface/ia_css_queue.h deleted file mode 100644 index aaf2e24..0000000 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/interface/ia_css_queue.h +++ /dev/null @@ -1,192 +0,0 @@ -#ifndef ISP2401 -/* - * Support for Intel Camera Imaging ISP subsystem. - * Copyright (c) 2015, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - */ -#else -/** -Support for Intel Camera Imaging ISP subsystem. -Copyright (c) 2010 - 2015, Intel Corporation. - -This program is free software; you can redistribute it and/or modify it -under the terms and conditions of the GNU General Public License, -version 2, as published by the Free Software Foundation. - -This program is distributed in the hope it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -more details. -*/ -#endif - -#ifndef __IA_CSS_QUEUE_H -#define __IA_CSS_QUEUE_H - -#include <platform_support.h> -#include <type_support.h> - -#include "ia_css_queue_comm.h" -#include "../src/queue_access.h" - -/* Local Queue object descriptor */ -struct ia_css_queue_local { - ia_css_circbuf_desc_t *cb_desc; /*Circbuf desc for local queues*/ - ia_css_circbuf_elem_t *cb_elems; /*Circbuf elements*/ -}; -typedef struct ia_css_queue_local ia_css_queue_local_t; - -/* Handle for queue object*/ -typedef struct ia_css_queue ia_css_queue_t; - - -/***************************************************************************** - * Queue Public APIs - *****************************************************************************/ -/* @brief Initialize a local queue instance. - * - * @param[out] qhandle. Handle to queue instance for use with API - * @param[in] desc. Descriptor with queue properties filled-in - * @return 0 - Successful init of local queue instance. - * @return EINVAL - Invalid argument. - * - */ -extern int ia_css_queue_local_init( - ia_css_queue_t *qhandle, - ia_css_queue_local_t *desc); - -/* @brief Initialize a remote queue instance - * - * @param[out] qhandle. Handle to queue instance for use with API - * @param[in] desc. Descriptor with queue properties filled-in - * @return 0 - Successful init of remote queue instance. - * @return EINVAL - Invalid argument. - */ -extern int ia_css_queue_remote_init( - ia_css_queue_t *qhandle, - ia_css_queue_remote_t *desc); - -/* @brief Uninitialize a queue instance - * - * @param[in] qhandle. Handle to queue instance - * @return 0 - Successful uninit. - * - */ -extern int ia_css_queue_uninit( - ia_css_queue_t *qhandle); - -/* @brief Enqueue an item in the queue instance - * - * @param[in] qhandle. Handle to queue instance - * @param[in] item. Object to be enqueued. - * @return 0 - Successful enqueue. - * @return EINVAL - Invalid argument. - * @return ENOBUFS - Queue is full. - * - */ -extern int ia_css_queue_enqueue( - ia_css_queue_t *qhandle, - uint32_t item); - -/* @brief Dequeue an item from the queue instance - * - * @param[in] qhandle. Handle to queue instance - * @param[out] item. Object to be dequeued into this item. - - * @return 0 - Successful dequeue. - * @return EINVAL - Invalid argument. - * @return ENODATA - Queue is empty. - * - */ -extern int ia_css_queue_dequeue( - ia_css_queue_t *qhandle, - uint32_t *item); - -/* @brief Check if the queue is empty - * - * @param[in] qhandle. Handle to queue instance - * @param[in] is_empty True if empty, False if not. - * @return 0 - Successful access state. - * @return EINVAL - Invalid argument. - * @return ENOSYS - Function not implemented. - * - */ -extern int ia_css_queue_is_empty( - ia_css_queue_t *qhandle, - bool *is_empty); - -/* @brief Check if the queue is full - * - * @param[in] qhandle. Handle to queue instance - * @param[in] is_full True if Full, False if not. - * @return 0 - Successfully access state. - * @return EINVAL - Invalid argument. - * @return ENOSYS - Function not implemented. - * - */ -extern int ia_css_queue_is_full( - ia_css_queue_t *qhandle, - bool *is_full); - -/* @brief Get used space in the queue - * - * @param[in] qhandle. Handle to queue instance - * @param[in] size Number of available elements in the queue - * @return 0 - Successfully access state. - * @return EINVAL - Invalid argument. - * - */ -extern int ia_css_queue_get_used_space( - ia_css_queue_t *qhandle, - uint32_t *size); - -/* @brief Get free space in the queue - * - * @param[in] qhandle. Handle to queue instance - * @param[in] size Number of free elements in the queue - * @return 0 - Successfully access state. - * @return EINVAL - Invalid argument. - * - */ -extern int ia_css_queue_get_free_space( - ia_css_queue_t *qhandle, - uint32_t *size); - -/* @brief Peek at an element in the queue - * - * @param[in] qhandle. Handle to queue instance - * @param[in] offset Offset of element to peek, - * starting from head of queue - * @param[in] element Value of element returned - * @return 0 - Successfully access state. - * @return EINVAL - Invalid argument. - * - */ -extern int ia_css_queue_peek( - ia_css_queue_t *qhandle, - uint32_t offset, - uint32_t *element); - -/* @brief Get the usable size for the queue - * - * @param[in] qhandle. Handle to queue instance - * @param[out] size Size value to be returned here. - * @return 0 - Successful get size. - * @return EINVAL - Invalid argument. - * @return ENOSYS - Function not implemented. - * - */ -extern int ia_css_queue_get_size( - ia_css_queue_t *qhandle, - uint32_t *size); - -#endif /* __IA_CSS_QUEUE_H */ - diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/interface/ia_css_queue_comm.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/interface/ia_css_queue_comm.h deleted file mode 100644 index 4ebaeb0..0000000 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/interface/ia_css_queue_comm.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef ISP2401 -/* - * Support for Intel Camera Imaging ISP subsystem. - * Copyright (c) 2015, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - */ -#else -/** -Support for Intel Camera Imaging ISP subsystem. -Copyright (c) 2010 - 2015, Intel Corporation. - -This program is free software; you can redistribute it and/or modify it -under the terms and conditions of the GNU General Public License, -version 2, as published by the Free Software Foundation. - -This program is distributed in the hope it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -more details. -*/ -#endif - -#ifndef __IA_CSS_QUEUE_COMM_H -#define __IA_CSS_QUEUE_COMM_H - -#include "type_support.h" -#include "ia_css_circbuf.h" -/***************************************************************************** - * Queue Public Data Structures - *****************************************************************************/ - -/* Queue location specifier */ -/* Avoiding enums to save space */ -#define IA_CSS_QUEUE_LOC_HOST 0 -#define IA_CSS_QUEUE_LOC_SP 1 -#define IA_CSS_QUEUE_LOC_ISP 2 - -/* Queue type specifier */ -/* Avoiding enums to save space */ -#define IA_CSS_QUEUE_TYPE_LOCAL 0 -#define IA_CSS_QUEUE_TYPE_REMOTE 1 - -/* for DDR Allocated queues, -allocate minimum these many elements. -DDR->SP' DMEM DMA transfer needs 32byte aligned address. -Since each element size is 4 bytes, 8 elements need to be -DMAed to access single element.*/ -#define IA_CSS_MIN_ELEM_COUNT 8 -#define IA_CSS_DMA_XFER_MASK (IA_CSS_MIN_ELEM_COUNT - 1) - -/* Remote Queue object descriptor */ -struct ia_css_queue_remote { - uint32_t cb_desc_addr; /*Circbuf desc address for remote queues*/ - uint32_t cb_elems_addr; /*Circbuf elements addr for remote queue*/ - uint8_t location; /* Cell location for queue */ - uint8_t proc_id; /* Processor id for queue access */ -}; -typedef struct ia_css_queue_remote ia_css_queue_remote_t; - - -#endif /* __IA_CSS_QUEUE_COMM_H */ diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/src/queue.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/src/queue.c deleted file mode 100644 index 606376f..0000000 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/src/queue.c +++ /dev/null @@ -1,412 +0,0 @@ -/* - * Support for Intel Camera Imaging ISP subsystem. - * Copyright (c) 2015, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - */ - -#include "ia_css_queue.h" -#include <math_support.h> -#include <ia_css_circbuf.h> -#include <ia_css_circbuf_desc.h> -#include "queue_access.h" - -/***************************************************************************** - * Queue Public APIs - *****************************************************************************/ -int ia_css_queue_local_init( - ia_css_queue_t *qhandle, - ia_css_queue_local_t *desc) -{ - if (NULL == qhandle || NULL == desc - || NULL == desc->cb_elems || NULL == desc->cb_desc) { - /* Invalid parameters, return error*/ - return EINVAL; - } - - /* Mark the queue as Local */ - qhandle->type = IA_CSS_QUEUE_TYPE_LOCAL; - - /* Create a local circular buffer queue*/ - ia_css_circbuf_create(&qhandle->desc.cb_local, - desc->cb_elems, - desc->cb_desc); - - return 0; -} - -int ia_css_queue_remote_init( - ia_css_queue_t *qhandle, - ia_css_queue_remote_t *desc) -{ - if (NULL == qhandle || NULL == desc) { - /* Invalid parameters, return error*/ - return EINVAL; - } - - /* Mark the queue as remote*/ - qhandle->type = IA_CSS_QUEUE_TYPE_REMOTE; - - /* Copy over the local queue descriptor*/ - qhandle->location = desc->location; - qhandle->proc_id = desc->proc_id; - qhandle->desc.remote.cb_desc_addr = desc->cb_desc_addr; - qhandle->desc.remote.cb_elems_addr = desc->cb_elems_addr; - - /* If queue is remote, we let the local processor - * do its init, before using it. This is just to get us - * started, we can remove this restriction as we go ahead - */ - - return 0; -} - -int ia_css_queue_uninit( - ia_css_queue_t *qhandle) -{ - if (!qhandle) - return EINVAL; - - /* Load the required queue object */ - if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) { - /* Local queues are created. Destroy it*/ - ia_css_circbuf_destroy(&qhandle->desc.cb_local); - } - - return 0; -} - -int ia_css_queue_enqueue( - ia_css_queue_t *qhandle, - uint32_t item) -{ - int error = 0; - if (NULL == qhandle) - return EINVAL; - - /* 1. Load the required queue object */ - if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) { - /* Directly de-ref the object and - * operate on the queue - */ - if (ia_css_circbuf_is_full(&qhandle->desc.cb_local)) { - /* Cannot push the element. Return*/ - return ENOBUFS; - } - - /* Push the element*/ - ia_css_circbuf_push(&qhandle->desc.cb_local, item); - } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) { - ia_css_circbuf_desc_t cb_desc; - ia_css_circbuf_elem_t cb_elem; - uint32_t ignore_desc_flags = QUEUE_IGNORE_STEP_FLAG; - - /* a. Load the queue cb_desc from remote */ - QUEUE_CB_DESC_INIT(&cb_desc); - error = ia_css_queue_load(qhandle, &cb_desc, ignore_desc_flags); - if (error != 0) - return error; - - /* b. Operate on the queue */ - if (ia_css_circbuf_desc_is_full(&cb_desc)) - return ENOBUFS; - - cb_elem.val = item; - - error = ia_css_queue_item_store(qhandle, cb_desc.end, &cb_elem); - if (error != 0) - return error; - - cb_desc.end = (cb_desc.end + 1) % cb_desc.size; - - /* c. Store the queue object */ - /* Set only fields requiring update with - * valid value. Avoids uncessary calls - * to load/store functions - */ - ignore_desc_flags = QUEUE_IGNORE_SIZE_START_STEP_FLAGS; - - error = ia_css_queue_store(qhandle, &cb_desc, ignore_desc_flags); - if (error != 0) - return error; - } - - return 0; -} - -int ia_css_queue_dequeue( - ia_css_queue_t *qhandle, - uint32_t *item) -{ - int error = 0; - if (qhandle == NULL || NULL == item) - return EINVAL; - - /* 1. Load the required queue object */ - if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) { - /* Directly de-ref the object and - * operate on the queue - */ - if (ia_css_circbuf_is_empty(&qhandle->desc.cb_local)) { - /* Nothing to pop. Return empty queue*/ - return ENODATA; - } - - *item = ia_css_circbuf_pop(&qhandle->desc.cb_local); - } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) { - /* a. Load the queue from remote */ - ia_css_circbuf_desc_t cb_desc; - ia_css_circbuf_elem_t cb_elem; - uint32_t ignore_desc_flags = QUEUE_IGNORE_STEP_FLAG; - - QUEUE_CB_DESC_INIT(&cb_desc); - - error = ia_css_queue_load(qhandle, &cb_desc, ignore_desc_flags); - if (error != 0) - return error; - - /* b. Operate on the queue */ - if (ia_css_circbuf_desc_is_empty(&cb_desc)) - return ENODATA; - - error = ia_css_queue_item_load(qhandle, cb_desc.start, &cb_elem); - if (error != 0) - return error; - - *item = cb_elem.val; - - cb_desc.start = OP_std_modadd(cb_desc.start, 1, cb_desc.size); - - /* c. Store the queue object */ - /* Set only fields requiring update with - * valid value. Avoids uncessary calls - * to load/store functions - */ - ignore_desc_flags = QUEUE_IGNORE_SIZE_END_STEP_FLAGS; - error = ia_css_queue_store(qhandle, &cb_desc, ignore_desc_flags); - if (error != 0) - return error; - } - return 0; -} - -int ia_css_queue_is_full( - ia_css_queue_t *qhandle, - bool *is_full) -{ - int error = 0; - if ((qhandle == NULL) || (is_full == NULL)) - return EINVAL; - - /* 1. Load the required queue object */ - if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) { - /* Directly de-ref the object and - * operate on the queue - */ - *is_full = ia_css_circbuf_is_full(&qhandle->desc.cb_local); - return 0; - } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) { - /* a. Load the queue from remote */ - ia_css_circbuf_desc_t cb_desc; - uint32_t ignore_desc_flags = QUEUE_IGNORE_STEP_FLAG; - QUEUE_CB_DESC_INIT(&cb_desc); - error = ia_css_queue_load(qhandle, &cb_desc, ignore_desc_flags); - if (error != 0) - return error; - - /* b. Operate on the queue */ - *is_full = ia_css_circbuf_desc_is_full(&cb_desc); - return 0; - } - - return EINVAL; -} - -int ia_css_queue_get_free_space( - ia_css_queue_t *qhandle, - uint32_t *size) -{ - int error = 0; - if ((qhandle == NULL) || (size == NULL)) - return EINVAL; - - /* 1. Load the required queue object */ - if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) { - /* Directly de-ref the object and - * operate on the queue - */ - *size = ia_css_circbuf_get_free_elems(&qhandle->desc.cb_local); - return 0; - } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) { - /* a. Load the queue from remote */ - ia_css_circbuf_desc_t cb_desc; - uint32_t ignore_desc_flags = QUEUE_IGNORE_STEP_FLAG; - QUEUE_CB_DESC_INIT(&cb_desc); - error = ia_css_queue_load(qhandle, &cb_desc, ignore_desc_flags); - if (error != 0) - return error; - - /* b. Operate on the queue */ - *size = ia_css_circbuf_desc_get_free_elems(&cb_desc); - return 0; - } - - return EINVAL; -} - -int ia_css_queue_get_used_space( - ia_css_queue_t *qhandle, - uint32_t *size) -{ - int error = 0; - if ((qhandle == NULL) || (size == NULL)) - return EINVAL; - - /* 1. Load the required queue object */ - if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) { - /* Directly de-ref the object and - * operate on the queue - */ - *size = ia_css_circbuf_get_num_elems(&qhandle->desc.cb_local); - return 0; - } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) { - /* a. Load the queue from remote */ - ia_css_circbuf_desc_t cb_desc; - uint32_t ignore_desc_flags = QUEUE_IGNORE_STEP_FLAG; - QUEUE_CB_DESC_INIT(&cb_desc); - error = ia_css_queue_load(qhandle, &cb_desc, ignore_desc_flags); - if (error != 0) - return error; - - /* b. Operate on the queue */ - *size = ia_css_circbuf_desc_get_num_elems(&cb_desc); - return 0; - } - - return EINVAL; -} - -int ia_css_queue_peek( - ia_css_queue_t *qhandle, - uint32_t offset, - uint32_t *element) -{ - uint32_t num_elems = 0; - int error = 0; - - if ((qhandle == NULL) || (element == NULL)) - return EINVAL; - - /* 1. Load the required queue object */ - if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) { - /* Directly de-ref the object and - * operate on the queue - */ - /* Check if offset is valid */ - num_elems = ia_css_circbuf_get_num_elems(&qhandle->desc.cb_local); - if (offset > num_elems) - return EINVAL; - - *element = ia_css_circbuf_peek_from_start(&qhandle->desc.cb_local, (int) offset); - return 0; - } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) { - /* a. Load the queue from remote */ - ia_css_circbuf_desc_t cb_desc; - ia_css_circbuf_elem_t cb_elem; - uint32_t ignore_desc_flags = QUEUE_IGNORE_STEP_FLAG; - - QUEUE_CB_DESC_INIT(&cb_desc); - - error = ia_css_queue_load(qhandle, &cb_desc, ignore_desc_flags); - if (error != 0) - return error; - - /* Check if offset is valid */ - num_elems = ia_css_circbuf_desc_get_num_elems(&cb_desc); - if (offset > num_elems) - return EINVAL; - - offset = OP_std_modadd(cb_desc.start, offset, cb_desc.size); - error = ia_css_queue_item_load(qhandle, (uint8_t)offset, &cb_elem); - if (error != 0) - return error; - - *element = cb_elem.val; - return 0; - } - - return EINVAL; -} - -int ia_css_queue_is_empty( - ia_css_queue_t *qhandle, - bool *is_empty) -{ - int error = 0; - if ((qhandle == NULL) || (is_empty == NULL)) - return EINVAL; - - /* 1. Load the required queue object */ - if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) { - /* Directly de-ref the object and - * operate on the queue - */ - *is_empty = ia_css_circbuf_is_empty(&qhandle->desc.cb_local); - return 0; - } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) { - /* a. Load the queue from remote */ - ia_css_circbuf_desc_t cb_desc; - uint32_t ignore_desc_flags = QUEUE_IGNORE_STEP_FLAG; - - QUEUE_CB_DESC_INIT(&cb_desc); - error = ia_css_queue_load(qhandle, &cb_desc, ignore_desc_flags); - if (error != 0) - return error; - - /* b. Operate on the queue */ - *is_empty = ia_css_circbuf_desc_is_empty(&cb_desc); - return 0; - } - - return EINVAL; -} - -int ia_css_queue_get_size( - ia_css_queue_t *qhandle, - uint32_t *size) -{ - int error = 0; - if ((qhandle == NULL) || (size == NULL)) - return EINVAL; - - /* 1. Load the required queue object */ - if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) { - /* Directly de-ref the object and - * operate on the queue - */ - /* Return maximum usable capacity */ - *size = ia_css_circbuf_get_size(&qhandle->desc.cb_local); - } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) { - /* a. Load the queue from remote */ - ia_css_circbuf_desc_t cb_desc; - uint32_t ignore_desc_flags = QUEUE_IGNORE_START_END_STEP_FLAGS; - - QUEUE_CB_DESC_INIT(&cb_desc); - - error = ia_css_queue_load(qhandle, &cb_desc, ignore_desc_flags); - if (error != 0) - return error; - - /* Return maximum usable capacity */ - *size = cb_desc.size; - } - - return 0; -} diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/src/queue_access.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/src/queue_access.c deleted file mode 100644 index 7bb2b49..0000000 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/src/queue_access.c +++ /dev/null @@ -1,192 +0,0 @@ -#ifndef ISP2401 -/* - * Support for Intel Camera Imaging ISP subsystem. - * Copyright (c) 2015, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - */ -#else -/* -Support for Intel Camera Imaging ISP subsystem. -Copyright (c) 2010 - 2015, Intel Corporation. - -This program is free software; you can redistribute it and/or modify it -under the terms and conditions of the GNU General Public License, -version 2, as published by the Free Software Foundation. - -This program is distributed in the hope it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -more details. -*/ -#endif - -#include "type_support.h" -#include "queue_access.h" -#include "ia_css_circbuf.h" -#include "sp.h" -#include "memory_access.h" -#include "assert_support.h" - -int ia_css_queue_load( - struct ia_css_queue *rdesc, - ia_css_circbuf_desc_t *cb_desc, - uint32_t ignore_desc_flags) -{ - if (rdesc == NULL || cb_desc == NULL) - return EINVAL; - - if (rdesc->location == IA_CSS_QUEUE_LOC_SP) { - assert(ignore_desc_flags <= QUEUE_IGNORE_DESC_FLAGS_MAX); - - if (0 == (ignore_desc_flags & QUEUE_IGNORE_SIZE_FLAG)) { - cb_desc->size = sp_dmem_load_uint8(rdesc->proc_id, - rdesc->desc.remote.cb_desc_addr - + offsetof(ia_css_circbuf_desc_t, size)); - - if (0 == cb_desc->size) { - /* Adding back the workaround which was removed - while refactoring queues. When reading size - through sp_dmem_load_*, sometimes we get back - the value as zero. This causes division by 0 - exception as the size is used in a modular - division operation. */ - return EDOM; - } - } - - if (0 == (ignore_desc_flags & QUEUE_IGNORE_START_FLAG)) - cb_desc->start = sp_dmem_load_uint8(rdesc->proc_id, - rdesc->desc.remote.cb_desc_addr - + offsetof(ia_css_circbuf_desc_t, start)); - - if (0 == (ignore_desc_flags & QUEUE_IGNORE_END_FLAG)) - cb_desc->end = sp_dmem_load_uint8(rdesc->proc_id, - rdesc->desc.remote.cb_desc_addr - + offsetof(ia_css_circbuf_desc_t, end)); - - if (0 == (ignore_desc_flags & QUEUE_IGNORE_STEP_FLAG)) - cb_desc->step = sp_dmem_load_uint8(rdesc->proc_id, - rdesc->desc.remote.cb_desc_addr - + offsetof(ia_css_circbuf_desc_t, step)); - - } else if (rdesc->location == IA_CSS_QUEUE_LOC_HOST) { - /* doing DMA transfer of entire structure */ - mmgr_load(rdesc->desc.remote.cb_desc_addr, - (void *)cb_desc, - sizeof(ia_css_circbuf_desc_t)); - } else if (rdesc->location == IA_CSS_QUEUE_LOC_ISP) { - /* Not supported yet */ - return ENOTSUP; - } - - return 0; -} - -int ia_css_queue_store( - struct ia_css_queue *rdesc, - ia_css_circbuf_desc_t *cb_desc, - uint32_t ignore_desc_flags) -{ - if (rdesc == NULL || cb_desc == NULL) - return EINVAL; - - if (rdesc->location == IA_CSS_QUEUE_LOC_SP) { - assert(ignore_desc_flags <= QUEUE_IGNORE_DESC_FLAGS_MAX); - - if (0 == (ignore_desc_flags & QUEUE_IGNORE_SIZE_FLAG)) - sp_dmem_store_uint8(rdesc->proc_id, - rdesc->desc.remote.cb_desc_addr - + offsetof(ia_css_circbuf_desc_t, size), - cb_desc->size); - - if (0 == (ignore_desc_flags & QUEUE_IGNORE_START_FLAG)) - sp_dmem_store_uint8(rdesc->proc_id, - rdesc->desc.remote.cb_desc_addr - + offsetof(ia_css_circbuf_desc_t, start), - cb_desc->start); - - if (0 == (ignore_desc_flags & QUEUE_IGNORE_END_FLAG)) - sp_dmem_store_uint8(rdesc->proc_id, - rdesc->desc.remote.cb_desc_addr - + offsetof(ia_css_circbuf_desc_t, end), - cb_desc->end); - - if (0 == (ignore_desc_flags & QUEUE_IGNORE_STEP_FLAG)) - sp_dmem_store_uint8(rdesc->proc_id, - rdesc->desc.remote.cb_desc_addr - + offsetof(ia_css_circbuf_desc_t, step), - cb_desc->step); - } else if (rdesc->location == IA_CSS_QUEUE_LOC_HOST) { - /* doing DMA transfer of entire structure */ - mmgr_store(rdesc->desc.remote.cb_desc_addr, - (void *)cb_desc, - sizeof(ia_css_circbuf_desc_t)); - } else if (rdesc->location == IA_CSS_QUEUE_LOC_ISP) { - /* Not supported yet */ - return ENOTSUP; - } - - return 0; -} - -int ia_css_queue_item_load( - struct ia_css_queue *rdesc, - uint8_t position, - ia_css_circbuf_elem_t *item) -{ - if (rdesc == NULL || item == NULL) - return EINVAL; - - if (rdesc->location == IA_CSS_QUEUE_LOC_SP) { - sp_dmem_load(rdesc->proc_id, - rdesc->desc.remote.cb_elems_addr - + position * sizeof(ia_css_circbuf_elem_t), - item, - sizeof(ia_css_circbuf_elem_t)); - } else if (rdesc->location == IA_CSS_QUEUE_LOC_HOST) { - mmgr_load(rdesc->desc.remote.cb_elems_addr - + position * sizeof(ia_css_circbuf_elem_t), - (void *)item, - sizeof(ia_css_circbuf_elem_t)); - } else if (rdesc->location == IA_CSS_QUEUE_LOC_ISP) { - /* Not supported yet */ - return ENOTSUP; - } - - return 0; -} - -int ia_css_queue_item_store( - struct ia_css_queue *rdesc, - uint8_t position, - ia_css_circbuf_elem_t *item) -{ - if (rdesc == NULL || item == NULL) - return EINVAL; - - if (rdesc->location == IA_CSS_QUEUE_LOC_SP) { - sp_dmem_store(rdesc->proc_id, - rdesc->desc.remote.cb_elems_addr - + position * sizeof(ia_css_circbuf_elem_t), - item, - sizeof(ia_css_circbuf_elem_t)); - } else if (rdesc->location == IA_CSS_QUEUE_LOC_HOST) { - mmgr_store(rdesc->desc.remote.cb_elems_addr - + position * sizeof(ia_css_circbuf_elem_t), - (void *)item, - sizeof(ia_css_circbuf_elem_t)); - } else if (rdesc->location == IA_CSS_QUEUE_LOC_ISP) { - /* Not supported yet */ - return ENOTSUP; - } - - return 0; -} diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/src/queue_access.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/src/queue_access.h deleted file mode 100644 index 4775513..0000000 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/runtime/queue/src/queue_access.h +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef ISP2401 -/* - * Support for Intel Camera Imaging ISP subsystem. - * Copyright (c) 2015, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - */ -#else -/** -Support for Intel Camera Imaging ISP subsystem. -Copyright (c) 2010 - 2015, Intel Corporation. - -This program is free software; you can redistribute it and/or modify it -under the terms and conditions of the GNU General Public License, -version 2, as published by the Free Software Foundation. - -This program is distributed in the hope it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -more details. -*/ -#endif - -#ifndef __QUEUE_ACCESS_H -#define __QUEUE_ACCESS_H - -#include <type_support.h> -#include <ia_css_queue_comm.h> -#include <ia_css_circbuf.h> -#include <error_support.h> - -#define QUEUE_IGNORE_START_FLAG 0x0001 -#define QUEUE_IGNORE_END_FLAG 0x0002 -#define QUEUE_IGNORE_SIZE_FLAG 0x0004 -#define QUEUE_IGNORE_STEP_FLAG 0x0008 -#define QUEUE_IGNORE_DESC_FLAGS_MAX 0x000f - -#define QUEUE_IGNORE_SIZE_START_STEP_FLAGS \ - (QUEUE_IGNORE_SIZE_FLAG | \ - QUEUE_IGNORE_START_FLAG | \ - QUEUE_IGNORE_STEP_FLAG) - -#define QUEUE_IGNORE_SIZE_END_STEP_FLAGS \ - (QUEUE_IGNORE_SIZE_FLAG | \ - QUEUE_IGNORE_END_FLAG | \ - QUEUE_IGNORE_STEP_FLAG) - -#define QUEUE_IGNORE_START_END_STEP_FLAGS \ - (QUEUE_IGNORE_START_FLAG | \ - QUEUE_IGNORE_END_FLAG | \ - QUEUE_IGNORE_STEP_FLAG) - -#define QUEUE_CB_DESC_INIT(cb_desc) \ - do { \ - (cb_desc)->size = 0; \ - (cb_desc)->step = 0; \ - (cb_desc)->start = 0; \ - (cb_desc)->end = 0; \ - } while(0) - -struct ia_css_queue { - uint8_t type; /* Specify remote/local type of access */ - uint8_t location; /* Cell location for queue */ - uint8_t proc_id; /* Processor id for queue access */ - union { - ia_css_circbuf_t cb_local; - struct { - uint32_t cb_desc_addr; /*Circbuf desc address for remote queues*/ - uint32_t cb_elems_addr; /*Circbuf elements addr for remote queue*/ - } remote; - } desc; -}; - -extern int ia_css_queue_load( - struct ia_css_queue *rdesc, - ia_css_circbuf_desc_t *cb_desc, - uint32_t ignore_desc_flags); - -extern int ia_css_queue_store( - struct ia_css_queue *rdesc, - ia_css_circbuf_desc_t *cb_desc, - uint32_t ignore_desc_flags); - -extern int ia_css_queue_item_load( - struct ia_css_queue *rdesc, - uint8_t position, - ia_css_circbuf_elem_t *item); - -extern int ia_css_queue_item_store( - struct ia_css_queue *rdesc, - uint8_t position, - ia_css_circbuf_elem_t *item); - -#endif /* __QUEUE_ACCESS_H */ |