2026-01-21 18:59:54 +08:00

73 lines
1.5 KiB
C

// SPDX-License-Identifier: GPL-2.0
/* Huawei Hifc PCI Express Linux driver
* Copyright(c) 2017 Huawei Technologies Co., Ltd
*
*/
#include "hifc_utils.h"
#include "unf_log.h"
#include "unf_common.h"
void hifc_cpu_to_big64(void *v_addr, unsigned int size)
{
unsigned int index = 0;
unsigned int cnt = 0;
unsigned long long *temp = NULL;
UNF_CHECK_VALID(INVALID_VALUE32, UNF_TRUE,
v_addr, dump_stack(); return);
UNF_CHECK_VALID(INVALID_VALUE32, UNF_TRUE,
(size % HIFC_QWORD_BYTE) == 0, dump_stack(); return);
temp = (unsigned long long *)v_addr;
cnt = HIFC_SHIFT_TO_U64(size);
for (index = 0; index < cnt; index++) {
*temp = cpu_to_be64(*temp);
temp++;
}
}
void hifc_big_to_cpu64(void *v_addr, unsigned int size)
{
unsigned int index = 0;
unsigned int cnt = 0;
unsigned long long *tmp = NULL;
UNF_CHECK_VALID(INVALID_VALUE32, UNF_TRUE,
v_addr, dump_stack(); return);
UNF_CHECK_VALID(INVALID_VALUE32, UNF_TRUE,
(size % HIFC_QWORD_BYTE) == 0, dump_stack(); return);
tmp = (unsigned long long *)v_addr;
cnt = HIFC_SHIFT_TO_U64(size);
for (index = 0; index < cnt; index++) {
*tmp = be64_to_cpu(*tmp);
tmp++;
}
}
void hifc_cpu_to_big32(void *v_addr, unsigned int size)
{
unf_cpu_to_big_end(v_addr, size);
}
void hifc_big_to_cpu32(void *v_addr, unsigned int size)
{
if (size % UNF_BYTES_OF_DWORD)
dump_stack();
unf_big_end_to_cpu(v_addr, size);
}
unsigned int hifc_log2n(unsigned int val)
{
unsigned int result = 0;
unsigned int logn = (val >> 1);
while (logn) {
logn >>= 1;
result++;
}
return result;
}