/*
 * 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 __TAG_GLOBAL_H_INCLUDED__
#define __TAG_GLOBAL_H_INCLUDED__

/* offsets for encoding/decoding the tag into an uint32_t */

#define TAG_CAP	1
#define TAG_EXP	2

#define TAG_NUM_CAPTURES_SIGN_SHIFT	 6
#define TAG_OFFSET_SIGN_SHIFT 		 7
#define TAG_NUM_CAPTURES_SHIFT 		 8
#define TAG_OFFSET_SHIFT 		16
#define TAG_SKIP_SHIFT 			24

#define TAG_EXP_ID_SHIFT 		 8

/* Data structure containing the tagging information which is used in
 * continuous mode to specify which frames should be captured.
 * num_captures		The number of RAW frames to be processed to
 *                      YUV. Setting this to -1 will make continuous
 *                      capture run until it is stopped.
 * skip			Skip N frames in between captures. This can be
 *                      used to select a slower capture frame rate than
 *                      the sensor output frame rate.
 * offset		Start the RAW-to-YUV processing at RAW buffer
 *                      with this offset. This allows the user to
 *                      process RAW frames that were captured in the
 *                      past or future.
 * exp_id		Exposure id of the RAW frame to tag.
 *
 * NOTE: Either exp_id = 0 or all other fields are 0
 *	 (so yeah, this could be a union)
 */

struct sh_css_tag_descr {
	int num_captures;
	unsigned int skip;
	int offset;
	unsigned int exp_id;
};

#endif /* __TAG_GLOBAL_H_INCLUDED__ */
