blob: 1cae854df15953b020fbdefb5b29387711d40d51 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) 2020 MediaTek Inc. All Rights Reserved.
*
* OS-dependent definitions for NAND Mapped-block Management (NMBM)
*
* Author: Weijie Gao <weijie.gao@mediatek.com>
*/
#ifndef _NMBM_OS_H_
#define _NMBM_OS_H_
#include <linux/kernel.h>
#include <linux/limits.h>
#include <linux/string.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/crc32.h>
#include <linux/log2.h>
#include <asm/div64.h>
static inline uint32_t nmbm_crc32(uint32_t crcval, const void *buf, size_t size)
{
uint chksz;
const unsigned char *p = buf;
while (size) {
if (size > UINT_MAX)
chksz = UINT_MAX;
else
chksz = (uint)size;
crcval = crc32_le(crcval, p, chksz);
size -= chksz;
p += chksz;
}
return crcval;
}
static inline uint32_t nmbm_lldiv(uint64_t dividend, uint32_t divisor)
{
#if BITS_PER_LONG == 64
return dividend / divisor;
#else
do_div(dividend, divisor);
return dividend;
#endif
}
#define WATCHDOG_RESET()
#ifdef CONFIG_NMBM_LOG_LEVEL_DEBUG
#define NMBM_DEFAULT_LOG_LEVEL 0
#elif defined(NMBM_LOG_LEVEL_INFO)
#define NMBM_DEFAULT_LOG_LEVEL 1
#elif defined(NMBM_LOG_LEVEL_WARN)
#define NMBM_DEFAULT_LOG_LEVEL 2
#elif defined(NMBM_LOG_LEVEL_ERR)
#define NMBM_DEFAULT_LOG_LEVEL 3
#elif defined(NMBM_LOG_LEVEL_EMERG)
#define NMBM_DEFAULT_LOG_LEVEL 4
#elif defined(NMBM_LOG_LEVEL_NONE)
#define NMBM_DEFAULT_LOG_LEVEL 5
#else
#define NMBM_DEFAULT_LOG_LEVEL 1
#endif
#endif /* _NMBM_OS_H_ */