123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /*
- * Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
- */
- #ifndef _CAM_COMMON_UTIL_H_
- #define _CAM_COMMON_UTIL_H_
- #include <linux/types.h>
- #include <linux/kernel.h>
- #define CAM_BITS_MASK_SHIFT(x, mask, shift) (((x) & (mask)) >> shift)
- #define PTR_TO_U64(ptr) ((uint64_t)(uintptr_t)ptr)
- #define U64_TO_PTR(ptr) ((void *)(uintptr_t)ptr)
- #define CAM_GET_TIMESTAMP(timestamp) ktime_get_real_ts64(&(timestamp))
- #define CAM_GET_TIMESTAMP_DIFF_IN_MICRO(ts_start, ts_end, diff_microsec) \
- ({ \
- diff_microsec = 0; \
- if (ts_end.tv_nsec >= ts_start.tv_nsec) { \
- diff_microsec = \
- (ts_end.tv_nsec - ts_start.tv_nsec) / 1000; \
- diff_microsec += \
- (ts_end.tv_sec - ts_start.tv_sec) * 1000 * 1000; \
- } else { \
- diff_microsec = \
- (ts_end.tv_nsec + \
- (1000*1000*1000 - ts_start.tv_nsec)) / 1000; \
- diff_microsec += \
- (ts_end.tv_sec - ts_start.tv_sec - 1) * 1000 * 1000; \
- } \
- })
- /**
- * cam_common_util_get_string_index()
- *
- * @brief Match the string from list of strings to return
- * matching index
- *
- * @strings: Pointer to list of strings
- * @num_strings: Number of strings in 'strings'
- * @matching_string: String to match
- * @index: Pointer to index to return matching index
- *
- * @return: 0 for success
- * -EINVAL for Fail
- */
- int cam_common_util_get_string_index(const char **strings,
- uint32_t num_strings, const char *matching_string, uint32_t *index);
- /**
- * cam_common_util_remove_duplicate_arr()
- *
- * @brief Move all the unique integers to the start of
- * the array and return the number of unique integers
- *
- * @array: Pointer to the first integer of array
- * @num: Number of elements in array
- *
- * @return: Number of unique integers in array
- */
- uint32_t cam_common_util_remove_duplicate_arr(int32_t *array,
- uint32_t num);
- /**
- * cam_common_wait_for_completion_timeout()
- *
- * @brief common interface to implement wait for completion
- * for slow environment like presil, single debug
- * timeout variable can take care
- *
- * @complete: Pointer to the first integer of array
- * @timeout_jiffies: Timeout value in jiffie
- *
- * @return: Remaining jiffies, non-zero for success, zero
- * in case of failure
- */
- unsigned long cam_common_wait_for_completion_timeout(
- struct completion *complete,
- unsigned long timeout_jiffies);
- /**
- * cam_common_read_poll_timeout()
- *
- * @brief common interface to read poll timeout
- *
- * @addr: Address of IO register
- * @delay: Delay interval of poll
- * @timeout: Timeout for poll
- * @mask: Mask to be checked
- * @check_val: Value to be compared to break poll
- * @status: Status of register of IO
- *
- * @return: 0 if success and negative if fail
- * */
- int cam_common_read_poll_timeout(
- void __iomem *addr,
- unsigned long delay,
- unsigned long timeout,
- uint32_t mask,
- uint32_t check_val,
- uint32_t *status);
- #endif /* _CAM_COMMON_UTIL_H_ */
|