73 lines
1.5 KiB
C
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;
|
|
}
|