// 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.
|
*/
|
|
#include "tag.h"
|
#include <platform_support.h> /* NULL */
|
#include <assert_support.h>
|
#include "tag_local.h"
|
|
/*
|
* @brief Creates the tag description from the given parameters.
|
* @param[in] num_captures
|
* @param[in] skip
|
* @param[in] offset
|
* @param[out] tag_descr
|
*/
|
void
|
sh_css_create_tag_descr(int num_captures,
|
unsigned int skip,
|
int offset,
|
unsigned int exp_id,
|
struct sh_css_tag_descr *tag_descr)
|
{
|
assert(tag_descr);
|
|
tag_descr->num_captures = num_captures;
|
tag_descr->skip = skip;
|
tag_descr->offset = offset;
|
tag_descr->exp_id = exp_id;
|
}
|
|
/*
|
* @brief Encodes the members of tag description into a 32-bit value.
|
* @param[in] tag Pointer to the tag description
|
* @return (unsigned int) Encoded 32-bit tag-info
|
*/
|
unsigned int
|
sh_css_encode_tag_descr(struct sh_css_tag_descr *tag)
|
{
|
int num_captures;
|
unsigned int num_captures_sign;
|
unsigned int skip;
|
int offset;
|
unsigned int offset_sign;
|
unsigned int exp_id;
|
unsigned int encoded_tag;
|
|
assert(tag);
|
|
if (tag->num_captures < 0) {
|
num_captures = -tag->num_captures;
|
num_captures_sign = 1;
|
} else {
|
num_captures = tag->num_captures;
|
num_captures_sign = 0;
|
}
|
skip = tag->skip;
|
if (tag->offset < 0) {
|
offset = -tag->offset;
|
offset_sign = 1;
|
} else {
|
offset = tag->offset;
|
offset_sign = 0;
|
}
|
exp_id = tag->exp_id;
|
|
if (exp_id != 0) {
|
/* we encode either an exp_id or capture data */
|
assert((num_captures == 0) && (skip == 0) && (offset == 0));
|
|
encoded_tag = TAG_EXP | (exp_id & 0xFF) << TAG_EXP_ID_SHIFT;
|
} else {
|
encoded_tag = TAG_CAP
|
| ((num_captures_sign & 0x00000001) << TAG_NUM_CAPTURES_SIGN_SHIFT)
|
| ((offset_sign & 0x00000001) << TAG_OFFSET_SIGN_SHIFT)
|
| ((num_captures & 0x000000FF) << TAG_NUM_CAPTURES_SHIFT)
|
| ((skip & 0x000000FF) << TAG_OFFSET_SHIFT)
|
| ((offset & 0x000000FF) << TAG_SKIP_SHIFT);
|
}
|
return encoded_tag;
|
}
|