You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

232 lines
9.2 KiB

/*
* amba_netlink.h
*
* History:
* 2018/07/06 - [Zhaoyang Chen] created 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 ___AMBA_NL_H__
#define ___AMBA_NL_H__
#ifdef __cplusplus
extern "C" {
#endif
#define AMBA_NL_MAX_MSG_LEN (1024)
enum AMBA_NL_OBJ {
AMBA_NL_OBJ_IMAGE = 0x00,
AMBA_NL_OBJ_SYS = 0x01,
AMBA_NL_OBJ_VP = 0x02,
AMBA_NL_OBJ_ERROR = 0x03,
AMBA_NL_OBJ_MAX_NUM = 0x04,
};
enum AMBA_NL_MODULE {
AMBA_NL_MODULE_DSP = 0x00,
AMBA_NL_MODULE_VIN = 0x01,
AMBA_NL_MODULE_IAV = 0x02,
AMBA_NL_MODULE_IMG = 0x03,
AMBA_NL_DEFINED_MODULE_NUM = 0x04, /* Pre-defined module num */
AMBA_NL_MODULE_MAX_NUM = 0xFF, /* Total supported module num */
AMBA_NL_MODULE_FIRST = AMBA_NL_MODULE_DSP,
AMBA_NL_MODULE_CUSTOM_FIRST = AMBA_NL_DEFINED_MODULE_NUM,
AMBA_NL_MODULE_LAST = AMBA_NL_MODULE_MAX_NUM,
AMBA_NL_MODULE_INVALID = AMBA_NL_MODULE_MAX_NUM,
};
enum AMBA_NL_PORT {
AMBA_NL_PORT_BASE = 24,
AMBA_NL_PORT_IMAGE = AMBA_NL_PORT_BASE + AMBA_NL_OBJ_IMAGE,
AMBA_NL_PORT_SYS = AMBA_NL_PORT_BASE + AMBA_NL_OBJ_SYS,
AMBA_NL_PORT_VP = AMBA_NL_PORT_BASE + AMBA_NL_OBJ_VP,
AMBA_NL_PORT_ERROR = AMBA_NL_PORT_BASE + AMBA_NL_OBJ_ERROR,
};
enum AMBA_NL_MSG_IMAGE {
/* 0x18020000 */
AMBA_NL_MSG_IMG_START_AAA = ((AMBA_NL_PORT_IMAGE) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0000),
/* 0x18020001 */
AMBA_NL_MSG_IMG_STOP_AAA = ((AMBA_NL_PORT_IMAGE) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0001),
/* 0x18020002 */
AMBA_NL_MSG_IMG_PREPARE_AAA = ((AMBA_NL_PORT_IMAGE) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0002),
/* 0x18020003 */
AMBA_NL_MSG_IMG_DPTZ_MAIN = ((AMBA_NL_PORT_IMAGE) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0003),
/* 0x18020004 */
AMBA_NL_MSG_IMG_WARP = ((AMBA_NL_PORT_IMAGE) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0004),
AMBA_NL_MSG_IMG_LAST = ((AMBA_NL_PORT_IMAGE) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0005),
AMBA_NL_MSG_IMG_FIRST = AMBA_NL_MSG_IMG_START_AAA,
};
enum AMBA_NL_MSG_SYS {
/* 0x19020000 */
AMBA_NL_MSG_SYS_THAW_DONE = ((AMBA_NL_PORT_SYS) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0000),
/* 0x19020001 */
AMBA_NL_MSG_SYS_IDLE = ((AMBA_NL_PORT_SYS) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0001),
/* 0x19020002 */
AMBA_NL_MSG_SYS_PREVIEW = ((AMBA_NL_PORT_SYS) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0002),
/* 0x19020003 */
AMBA_NL_MSG_SYS_ENCODE = ((AMBA_NL_PORT_SYS) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0003),
AMBA_NL_MSG_SYS_LAST = ((AMBA_NL_PORT_SYS) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0004),
AMBA_NL_MSG_SYS_FIRST = AMBA_NL_MSG_SYS_THAW_DONE,
};
enum AMBA_NL_MSG_VP {
/* 0x1A020000 */
AMBA_NL_MSG_VP_START_INFO = ((AMBA_NL_PORT_VP) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0000),
AMBA_NL_MSG_VP_LAST = ((AMBA_NL_PORT_VP) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0001),
AMBA_NL_MSG_VP_FIRST = AMBA_NL_MSG_VP_START_INFO,
};
enum AMBA_NL_MSG_ERR_DSP {
/* 0x1B000000: Failed to issue DSP cmd */
AMBA_NL_MSG_ERR_DSP_ISSUE_CMD = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_DSP) << 16 | 0x0000),
/* 0x1B000001: DSP cmd num exceeds the limit */
AMBA_NL_MSG_ERR_DSP_CMD_EXCEED = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_DSP) << 16 | 0x0001),
/* 0x1B000002: Invalide DSP cmd code */
AMBA_NL_MSG_ERR_DSP_CMD_CODE = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_DSP) << 16 | 0x0002),
/* 0x1B000003: DSP triggers assertion */
AMBA_NL_MSG_ERR_DSP_ASSERTION = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_DSP) << 16 | 0x0003),
AMBA_NL_MSG_ERR_DSP_LAST = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_DSP) << 16 | 0x0004),
AMBA_NL_MSG_ERR_DSP_FIRST = AMBA_NL_MSG_ERR_DSP_ISSUE_CMD,
};
enum AMBA_NL_MSG_ERR_VIN {
/* 0x1B010000: Failed to apply VIN shutter/gain config */
AMBA_NL_MSG_ERR_VIN_APPLY_CFG = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_VIN) << 16 | 0x0000),
/* 0x1B010001: Failed to switch context for current vin src */
AMBA_NL_MSG_ERR_VIN_SWITCH_CTX = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_VIN) << 16 | 0x0001),
AMBA_NL_MSG_ERR_VIN_LAST = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_VIN) << 16 | 0x0002),
AMBA_NL_MSG_ERR_VIN_FIRST = AMBA_NL_MSG_ERR_VIN_APPLY_CFG,
};
enum AMBA_NL_MSG_ERR_IAV {
/* 0x1B020000: Vsync lost signal from DSP */
AMBA_NL_MSG_ERR_IAV_VSYNC_LOST = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0000),
/* 0x1B020001: Failed to sync frame sync cmd */
AMBA_NL_MSG_ERR_IAV_FRAME_SYNC = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0001),
/* 0x1B020002: Failed to sync stream sync cmd */
AMBA_NL_MSG_ERR_IAV_STREAM_SYNC = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0002),
/* 0x1B020003: Invalid DSP msg code */
AMBA_NL_MSG_ERR_IAV_MSG_CODE = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0003),
/* 0x1B020004: Invalid stream ID from DSP msg */
AMBA_NL_MSG_ERR_IAV_STREAM_ID = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0004),
/* 0x1B020005: Invalid stream state from DSP msg */
AMBA_NL_MSG_ERR_IAV_STREAM_STATE = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0005),
AMBA_NL_MSG_ERR_IAV_LAST = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_IAV) << 16 | 0x0006),
AMBA_NL_MSG_ERR_IAV_FIRST = AMBA_NL_MSG_ERR_IAV_VSYNC_LOST,
};
enum AMBA_NL_MSG_ERR_IMG {
/* 0x1B030000: Incorrect chan ID for the image statistics */
AMBA_NL_MSG_ERR_IMG_CHAN_ID = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_IMG) << 16 | 0x0000),
/* 0x1B030001: DSP overwrites unread image statistics */
AMBA_NL_MSG_ERR_IMG_STATIS_OVERWRITE = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_IMG) << 16 | 0x0001),
/* 0x1B030002: DSP sends out disordered image statistics */
AMBA_NL_MSG_ERR_IMG_STATIS_DISORDER = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_IMG) << 16 | 0x0002),
/* 0x1B030003: Invalid slice num in image statistics from DSP */
AMBA_NL_MSG_ERR_IMG_STATIS_SLICE_NUM = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_IMG) << 16 | 0x0003),
AMBA_NL_MSG_ERR_IMG_LAST = ((AMBA_NL_PORT_ERROR) << 24 | (AMBA_NL_MODULE_IMG) << 16 | 0x0004),
AMBA_NL_MSG_ERR_IMG_FIRST = AMBA_NL_MSG_ERR_IMG_CHAN_ID,
};
#define AMBA_NL_GET_MSG_PORT(msg) (((msg) >> 24) & 0xFF)
#define AMBA_NL_GET_MSG_MODULE(msg) (((msg) >> 16) & 0xFF)
#define AMBA_NL_GET_MSG_CODE(msg) ((msg) & 0xFFFF)
enum AMBA_NL_MSG_SESSION {
AMBA_NL_MSG_SESS_CONNECT = 0x00,
AMBA_NL_MSG_SESS_DISCONNECT = 0x01,
AMBA_NL_MSG_SESS_NUM = 0x02,
AMBA_NL_MSG_SESS_FIRST = AMBA_NL_MSG_SESS_CONNECT,
AMBA_NL_MSG_SESS_LAST = AMBA_NL_MSG_SESS_NUM,
};
enum AMBA_NL_MSG_STATUS {
AMBA_NL_MSG_STATUS_SUCCESS = 0x00,
AMBA_NL_MSG_STATUS_FAIL = 0x01,
AMBA_NL_MSG_STATUS_NUM = 0x02,
AMBA_NL_MSG_STATUS_FIRST = AMBA_NL_MSG_STATUS_SUCCESS,
AMBA_NL_MSG_STATUS_LAST = AMBA_NL_MSG_STATUS_NUM,
};
enum AMBA_NL_MSG_TYPE {
AMBA_NL_MSG_TYPE_SESSION = 0x00,
AMBA_NL_MSG_TYPE_NORMAL = 0x01,
AMBA_NL_MSG_TYPE_NUM = 0x02,
AMBA_NL_MSG_TYPE_FIRST = AMBA_NL_MSG_TYPE_SESSION,
AMBA_NL_MSG_TYPE_LAST = AMBA_NL_MSG_TYPE_NUM,
};
enum AMBA_NL_MSG_DIR {
AMBA_NL_MSG_DIR_MSG = 0x00,
AMBA_NL_MSG_DIR_STATUS = 0x01,
AMBA_NL_MSG_DIR_NUM = 0x02,
AMBA_NL_MSG_DIR_FIRST = AMBA_NL_MSG_DIR_MSG,
AMBA_NL_MSG_DIR_LAST = AMBA_NL_MSG_TYPE_NUM,
};
#define AMBA_NL_MSG_SIZE (512)
#define AMBA_NL_MSG_HEADER_SIZE (24)
#define AMBA_NL_MSG_PAYLOAD_SIZE (AMBA_NL_MSG_SIZE - AMBA_NL_MSG_HEADER_SIZE)
struct amba_nl_msg_vsync_data {
u16 vinc_map;
u16 reserved[3];
};
struct amba_nl_msg_data {
u32 src_pid; /* The pid for the sender, 0 means kernel */
u32 dst_pid; /* The pid for the receiver, 0 means kernel */
u32 msg; /* The msg code */
u8 status; /* The status for the msg, if any */
u8 port; /* The netlink port for the msg */
u8 type; /* The msg type, session msg or normal msg */
u8 dir; /* The original msg or the status for the msg */
u64 hw_tick; /* The hw tick value from hw timer */
u8 payload[AMBA_NL_MSG_PAYLOAD_SIZE];
};
#ifdef __cplusplus
}
#endif
#endif