WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
oal_util.h
浏览该文件的文档.
1/*
2 * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2020-2020. All rights reserved.
3 * Description: oal util interface
4 * Create: 2020-05-02
5 */
6
7#ifndef __OAL_UTIL_H__
8#define __OAL_UTIL_H__
9#if defined(_PRE_OS_VERSION_LINUX) && defined(_PRE_OS_VERSION) && (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
10/*****************************************************************************
11 1 其他头文件包含
12*****************************************************************************/
13#include <linux/compiler.h>
14#include <linux/kernel.h>
15#include <linux/kallsyms.h>
16#include <asm/string.h>
17#include <linux/thread_info.h>
18#include <asm/byteorder.h>
19#include <linux/byteorder/generic.h>
20#include <linux/bitops.h>
21#include <linux/fs.h>
22#include <linux/delay.h>
23#include <asm/delay.h>
24#include <linux/kobject.h> /* add sys for 51/02 */
25#include <linux/device.h>
26#include <linux/sysfs.h>
27#include <linux/etherdevice.h> /* for random mac address */
28#include <linux/version.h>
29#include <linux/math64.h>
30
31#include <linux/ktime.h>
32#endif
33
34/*****************************************************************************
35 1 其他头文件包含
36*****************************************************************************/
37#include "oal_types.h"
38#include "oal_mm.h"
39#include "securec.h"
40
41#include "oal_util_hcm.h"
42
43#ifdef __cplusplus
44#if __cplusplus
45extern "C" {
46#endif
47#endif
48
49/* linux arch相关的代码,待合并处理 */
50#if defined(_PRE_OS_VERSION_LINUX) && defined(_PRE_OS_VERSION) && (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
51
52/*****************************************************************************
53 2 宏定义
54*****************************************************************************/
55
56#define OAL_CONST const
57
58typedef struct file oal_file_stru;
59#define OAL_FILE_FAIL OAL_PTR_NULL
60
61/* 内存读屏障 */
62#define OAL_RMB() rmb()
63
64/* 内存写屏障 */
65#define OAL_WMB() wmb()
66
67/* 内存屏障 */
68#define OAL_MB() mb()
69
70#define OAL_OFFSET_OF offsetof
71
72#define OAL_PLAT_MEM_BASE_ADDR 0x80000000
73
74typedef struct device_attribute oal_device_attribute_stru;
75typedef struct device oal_device_stru;
76#define OAL_DEVICE_ATTR DEVICE_ATTR
77#define OAL_S_IRUGO S_IRUGO
78#define OAL_S_IWGRP S_IWGRP
79#define OAL_S_IWUSR S_IWUSR
80typedef struct kobject oal_kobject;
81
82#define OAL_STRCMP strcmp
83#define OAL_STRNCMP strncmp
84#define OAL_STRNCASECMP strncasecmp
85
86/* for sys interface 51/02 */
87
88/* 检查size1不大于size2, 其中size1/2可以使用sizeof(a) */
89#define SIZE_OF_SIZE1_NOT_LARGER_THAN_SIZE2_BY_NAME(name, size1, size2) \
90static inline char size_of_##name##_size1_not_larger_than_size2(void) \
91{ \
92 char __dummy1[size2 - size1]; \
93 return __dummy1[0]; \
94}
95
96/* 检查结构体的大小是否不大于特定值 */
97#define SIZE_OF_TYPE_NOT_LARGER_THAN_DETECT(type, size) \
98static inline char size_of_##type##_not_larger_than_##size(void) \
99{ \
100 char __dummy1[size - sizeof(type)]; \
101 return __dummy1[0]; \
102}
103
104/* us time cost sub */
105#define time_cost_var_start(name) local_cost_time_start_##name
106#define time_cost_var_end(name) local_cost_time_end_##name
107#define time_cost_var_sub(name) trans_us_##name
108
109#define oal_get_time_cost_start(name) time_cost_var_start(name) = ktime_get()
110#define oal_get_time_cost_end(name) time_cost_var_end(name) = ktime_get()
111#define oal_calc_time_cost_sub(name) time_cost_var_sub(name) = \
112 (osal_u64)ktime_to_us(ktime_sub(time_cost_var_end(name), time_cost_var_start(name)))
113
114/*****************************************************************************
115 功能描述 : 打印函数调用栈
116*****************************************************************************/
118{
119 dump_stack();
120}
121
122OAL_STATIC OAL_INLINE osal_void oal_print_hex_dump(osal_u8 *addr, osal_s32 len, osal_s32 groupsize, osal_s8 *pre_str)
123{
124#ifdef CONFIG_PRINTK
125 oal_reference(groupsize);
126 printk("buf %p,len:%d\n",
127 addr,
128 len);
129 print_hex_dump(KERN_ERR, pre_str, DUMP_PREFIX_ADDRESS, 16, 1, /* 打印16字节一行 */
130 addr, len, true);
131 printk("\n");
132#endif
133}
134
135/*****************************************************************************
136 功能描述 : linux osal_ulong 除法
137*****************************************************************************/
138OAL_STATIC OAL_INLINE osal_u64 oal_div_u64(osal_u64 dividend, osal_u32 divisor)
139{
140 osal_u64 ull_tmp;
141
142 ull_tmp = div_u64(dividend, divisor);
143
144 return ull_tmp;
145}
146#endif
147
148/*****************************************************************************
149 2 宏定义
150*****************************************************************************/
151
152#define OAL_VA_START va_start
153#define OAL_VA_END va_end
154
155#define OAL_VA_LIST va_list
156
157#define HCC_DATA_LEN_ALIGN 32
158
159/* 拼接为16 bit或者 32bit */
160
161/* 获取大小 */
162#define OAL_SIZEOF sizeof
163
164/* 获取数组大小 */
165#define OAL_ARRAY_SIZE(_ast_array) (sizeof(_ast_array) / sizeof((_ast_array)[0]))
166
167/* 四字节对齐 */
168#define OAL_GET_4BYTE_ALIGN_VALUE(_ul_size) (((_ul_size) + 0x03) & (~0x03))
169
170/* 获取当前线程信息 */
171#define OAL_CURRENT_TASK (current_thread_info()->task)
172
173/* BIG_ENDIAN */
174#if defined(_PRE_BIG_CPU_ENDIAN) && defined(_PRE_CPU_ENDIAN) && (_PRE_BIG_CPU_ENDIAN == _PRE_CPU_ENDIAN)
175#define oal_byteorder_to_le32(_val) oal_swap_byteorder_32(_val)
176#define oal_byteorder_to_le16(_val) oal_swap_byteorder_16(_val)
177
178/* LITTLE_ENDIAN */
179#elif defined(_PRE_LITTLE_CPU_ENDIAN) && defined(_PRE_CPU_ENDIAN) && (_PRE_LITTLE_CPU_ENDIAN == _PRE_CPU_ENDIAN)
180#define oal_byteorder_to_le32(_val) (_val)
181#define oal_byteorder_to_le16(_val) (_val)
182#endif
183
184/* 比较宏 */
185#define OAL_MIN(_A, _B) (((_A) < (_B)) ? (_A) : (_B))
186
187/* 比较宏 */
188#define OAL_MAX(_A, _B) (((_A) > (_B)) ? (_A) : (_B))
189
190#define OAL_SUB(_A, _B) (((_A) > (_B)) ? ((_A) - (_B)) : (0))
191
192#define OAL_ABSOLUTE_SUB(_A, _B) (((_A) > (_B)) ? ((_A) - (_B)) : ((_B) - (_A)))
193
194#define ALL 0xFFFF
195#ifndef BIT
196#define BIT(nr) (1UL << (nr))
197#endif
198
199#define OAL_BITS_PER_BYTE 8 /* 一个字节中包含的bit数目 */
200
201/* 位操作 */
202#define OAL_SET_BIT(_val) (1 << (_val))
203#define oal_write_bits(_data, _val, _bits, _pos) do { \
204 (_data) &= ~((((osal_u32)1 << (_bits)) - 1) << (_pos)); \
205 (_data) |= (((_val) & (((osal_u32)1 << (_bits)) - 1)) << (_pos)); \
206 } while (0)
207
208#define OAL_IPV6_ADDR_LEN 16
209
210#ifdef __cplusplus
211 #if __cplusplus
212 }
213 #endif
214#endif
215
216#endif /* end of oal_util.h */
#define OAL_INLINE
Definition driver_soc_common.h:47
#define oal_reference(data)
Definition oal_types.h:43
int osal_s32
Definition osal_types.h:19
unsigned char osal_u8
Definition osal_types.h:11
signed char osal_s8
Definition osal_types.h:17
unsigned long long osal_u64
Definition osal_types.h:14
void osal_void
Definition osal_types.h:29
unsigned int osal_u32
Definition osal_types.h:13
#define OAL_STATIC
Definition soc_wifi_service_api.c:30