| /* SPDX-License-Identifier: GPL-2.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. |
| */ |
| |
| #ifndef __IA_CSS_CONTROL_H |
| #define __IA_CSS_CONTROL_H |
| |
| /* @file |
| * This file contains functionality for starting and controlling CSS |
| */ |
| |
| #include <type_support.h> |
| #include <ia_css_env.h> |
| #include <ia_css_firmware.h> |
| #include <ia_css_irq.h> |
| |
| /* @brief Initialize the CSS API. |
| * @param[in] env Environment, provides functions to access the |
| * environment in which the CSS code runs. This is |
| * used for host side memory access and message |
| * printing. May not be NULL. |
| * @param[in] fw Firmware package containing the firmware for all |
| * predefined ISP binaries. |
| * if fw is NULL the firmware must be loaded before |
| * through a call of ia_css_load_firmware |
| * @param[in] l1_base Base index (isp2400) |
| * of the L1 page table. This is a physical |
| * address or index. |
| * @param[in] irq_type The type of interrupt to be used (edge or level) |
| * @return Returns -EINVAL in case of any |
| * errors and 0 otherwise. |
| * |
| * This function initializes the API which includes allocating and initializing |
| * internal data structures. This also interprets the firmware package. All |
| * contents of this firmware package are copied into local data structures, so |
| * the fw pointer could be freed after this function completes. |
| */ |
| int ia_css_init(struct device *dev, |
| const struct ia_css_env *env, |
| const struct ia_css_fw *fw, |
| u32 l1_base, |
| enum ia_css_irq_type irq_type); |
| |
| /* @brief Un-initialize the CSS API. |
| * @return None |
| * |
| * This function deallocates all memory that has been allocated by the CSS API |
| * Exception: if you explicitly loaded firmware through ia_css_load_firmware |
| * you need to call ia_css_unload_firmware to deallocate the memory reserved |
| * for the firmware. |
| * After this function is called, no other CSS functions should be called |
| * with the exception of ia_css_init which will re-initialize the CSS code, |
| * ia_css_unload_firmware to unload the firmware or ia_css_load_firmware |
| * to load new firmware |
| */ |
| void |
| ia_css_uninit(void); |
| |
| /* @brief Enable use of a separate queue for ISYS events. |
| * |
| * @param[in] enable: enable or disable use of separate ISYS event queues. |
| * @return error if called when SP is running. |
| * |
| * @deprecated{This is a temporary function that allows drivers to migrate to |
| * the use of the separate ISYS event queue. Once all drivers supports this, it |
| * will be made the default and this function will be removed. |
| * This function should only be called when the SP is not running, calling it |
| * when the SP is running will result in an error value being returned. } |
| */ |
| int |
| ia_css_enable_isys_event_queue(bool enable); |
| |
| /* @brief Test whether the ISP has started. |
| * |
| * @return Boolean flag true if the ISP has started or false otherwise. |
| * |
| * Temporary function to poll whether the ISP has been started. Once it has, |
| * the sensor can also be started. */ |
| bool |
| ia_css_isp_has_started(void); |
| |
| /* @brief Test whether the SP has initialized. |
| * |
| * @return Boolean flag true if the SP has initialized or false otherwise. |
| * |
| * Temporary function to poll whether the SP has been initialized. Once it has, |
| * we can enqueue buffers. */ |
| bool |
| ia_css_sp_has_initialized(void); |
| |
| /* @brief Test whether the SP has terminated. |
| * |
| * @return Boolean flag true if the SP has terminated or false otherwise. |
| * |
| * Temporary function to poll whether the SP has been terminated. Once it has, |
| * we can switch mode. */ |
| bool |
| ia_css_sp_has_terminated(void); |
| |
| /* @brief start SP hardware |
| * |
| * @return 0 or error code upon error. |
| * |
| * It will boot the SP hardware and start multi-threading infrastructure. |
| * All threads will be started and blocked by semaphore. This function should |
| * be called before any ia_css_stream_start(). |
| */ |
| int |
| ia_css_start_sp(void); |
| |
| /* @brief stop SP hardware |
| * |
| * @return 0 or error code upon error. |
| * |
| * This function will terminate all threads and shut down SP. It should be |
| * called after all ia_css_stream_stop(). |
| */ |
| int |
| ia_css_stop_sp(void); |
| |
| #endif /* __IA_CSS_CONTROL_H */ |