/* * iav_ucode_ioctl.h * * History: * 2012/10/25 - [Cao Rongrong] Created file * 2015/10/14 - [Jian Tang] Modified file * * Copyright (c) 2016 Ambarella, Inc. * * This file and its contents ("Software") are protected by intellectual * property rights including, without limitation, U.S. and/or foreign * copyrights. This Software is also the confidential and proprietary * information of Ambarella, Inc. and its licensors. You may not use, reproduce, * disclose, distribute, modify, or otherwise prepare derivative works of this * Software or any portion thereof except pursuant to a signed license agreement * or nondisclosure agreement with Ambarella, Inc. or its authorized affiliates. * In the absence of such an agreement, you agree to promptly notify and return * this Software to Ambarella, Inc. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, * MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL AMBARELLA, INC. OR ITS AFFILIATES BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; COMPUTER FAILURE OR MALFUNCTION; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * */ #ifndef __UCODE_IOCTL_ARCH_H__ #define __UCODE_IOCTL_ARCH_H__ /*! @file iav_ucode_ioctl.h * @brief This file defines video output configuration ioctl */ #ifdef __cplusplus extern "C" { #endif #include /*! @addtogroup iav-ioctl-ucode-helper */ #define UCODE_LOAD_ITEM_MAX 4 /*! @addtogroup iav-ioctl-ucode-struct * @{ */ typedef struct ucode_load_item_s { unsigned long addr_offset; /*!< ucode address offset */ char filename[24]; /*!< ucode file name */ } ucode_load_item_t; typedef struct ucode_load_info_s { unsigned long map_size; /*!< ucode map size */ unsigned long nr_item; /*!< ucode nr item */ ucode_load_item_t items[UCODE_LOAD_ITEM_MAX]; /*!< ucode item info */ } ucode_load_info_t; typedef struct ucode_version_s { u16 year; /*!< ucode modifed time: year */ u8 month; /*!< ucode modifed time: month */ u8 day; /*!< ucode modifed time: day */ u32 edition_num; /*!< ucode edition number */ u32 edition_ver; /*!< ucode edition version */ u32 chip_arch; /*!< ucode chip arch, @sa ucode_arch */ } ucode_version_t; /*! @} */ /* End of iav-ioctl-ucode-struct */ /*! @addtogroup iav-ioctl-ucode-helper * @{ */ /* * Ucode IOCTL definitions */ #define UCODE_IOC_MAGIC 'u' typedef enum { // Basic functions (0x00 ~ 0x2F) IOC_GET_UCODE_INFO = 0x00, /*!< 0x00, Basic functions */ IOC_GET_UCODE_VERSION = 0x01, /*!< 0x01 */ IOC_UPDATE_UCODE = 0x02, /*!< 0x02 */ // Reserved: 0x30 ~ 0xFF } UCODE_IOC; enum ucode_arch { UCODE_ARCH_UNKNOWN = 0xFFFF, /*!< 0xFFFF */ UCODE_ARCH_A5S = 0, /*!< 0 */ UCODE_ARCH_S2 = 1, /*!< 1 */ UCODE_ARCH_S2L = 2, /*!< 2 */ UCODE_ARCH_S2E = 3, /*!< 3 */ UCODE_ARCH_S3L = 4, /*!< 4 */ UCODE_ARCH_S5 = 5, /*!< 5 */ UCODE_ARCH_S5L = 6, /*!< 6 */ UCODE_ARCH_CV1 = 7, /*!< 7 */ UCODE_ARCH_CV22 = 8, /*!< 8 */ UCODE_ARCH_CV2 = 9, /*!< 9 */ UCODE_ARCH_CV25 = 10, /*!< 10 */ UCODE_ARCH_S6LM = 11, /*!< 11 */ UCODE_ARCH_NUM, UCODE_ARCH_FIRST = 0, /*!< 0 */ UCODE_ARCH_LAST = UCODE_ARCH_NUM, /*!< UCODE_ARCH_NUM */ /* For new chips */ }; /*! @} */ /* End of iav-ioctl-ucode-helper */ /*! @addtogroup iav-ioctl-ucode-api * @{ */ /*! * This API retrieve ucode load information to enable the application level program to load the ucode to a corresponding memory position. */ #define IAV_IOC_GET_UCODE_INFO _IOR(UCODE_IOC_MAGIC, IOC_GET_UCODE_INFO, ucode_load_info_t) /*! * This API can be used to retrieve the current ucode version */ #define IAV_IOC_GET_UCODE_VERSION _IOR(UCODE_IOC_MAGIC, IOC_GET_UCODE_VERSION, ucode_version_t) /*! * This API can be used to update ucode. */ #define IAV_IOC_UPDATE_UCODE _IOW(UCODE_IOC_MAGIC, IOC_UPDATE_UCODE, int) /*! @} */ /* End of iav-ioctl-ucode-api */ #ifdef __cplusplus } #endif #endif