WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
oal_mem_hcm.h
浏览该文件的文档.
1/*
2 * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2022. All rights reserved.
3 * Description: netbuf memory manage interface
4 * Create: 2022-04-20
5 */
6#ifndef __OAL_MEM_HCM_H__
7#define __OAL_MEM_HCM_H__
8#include "oal_spinlock.h"
9#include "oal_list.h"
10#include "osal_types.h"
11
12#include "soc_diag_wdk.h"
13#include "wlan_types_common.h"
14#include "oal_netbuf_ext.h"
15
16#include "common_dft_rom.h"
17
18#ifdef __cplusplus
19#if __cplusplus
20extern "C" {
21#endif
22#endif
23
24#undef THIS_FILE_ID
25#define THIS_FILE_ID OAM_FILE_ID_OAL_MEM_HCM_H
26
27/*****************************************************************************
28 2 宏定义
29*****************************************************************************/
30
31/* 对于enhanced类型的申请接口与释放接口, 每一个内存块都包含一个4字节的头部 用来指向内存块管理结构体oal_mem_struc */
32/* 整个内存块的结构如下所示 */
33/* +-------------------+------------------------------------------+---------+--------------------------------+ */
34/* | oal_mem_stru addr | payload | dog tag | 4/8 byte | | 4 byte | */
35/* +-------------------+------------------------------------------+---------+--------------------------------| */
36
37#define OAL_HMAC_DOG_TAG 0x5b3a293e /* 狗牌,用于检测内存越界 */
38#define OAL_SDIO_FLOWCTRL_MAX 114 /* ini可配sdio流控的最大值 */
39
40#if defined(_PRE_WLAN_DFR_STAT) || defined(_PRE_WLAN_DFT_STAT)
41#define WLAN_MEM_MAX_SUBPOOL_NUM 8 /* 内存池中出netbuf内存池外最大子内存池个数 */
42#endif
43#define HAL_NORMAL_RX_MAX_RX_OPT_BUFFS 128 /* 普通优先级描述符优化规格 */
44
45#define oal_mem_alloc(_en_pool_id, _us_len, _uc_lock) \
46 oal_mem_alloc_etc(THIS_FILE_ID, __LINE__, _en_pool_id, _us_len, _uc_lock)
47#define oal_mem_free(_p_data, _uc_lock) \
48 oal_mem_free_etc(THIS_FILE_ID, __LINE__, _p_data, _uc_lock)
49
50/*****************************************************************************
51 枚举名 : oal_mem_pool_id_enum_uint8
52 协议表格:
53 枚举说明: HOST侧内存池ID
54*****************************************************************************/
55typedef enum {
56 OAL_MEM_POOL_ID_EVENT = 0, /* 事件内存池 */
57 OAL_MEM_POOL_ID_SHARED_DATA_PKT, /* 共享数据帧内存池 */
58 OAL_MEM_POOL_ID_SHARED_MGMT_PKT, /* 共享管理帧内存池 */
59 OAL_MEM_POOL_ID_LOCAL, /* 本地变量内存池 */
60 OAL_MEM_POOL_ID_MIB, /* MIB内存池 */
61 OAL_MEM_POOL_ID_SHARED_DSCR, /* 共享描述符内存池 */
62
63 OAL_MEM_POOL_ID_NETBUF, /* netbuf内存池 */
64 OAL_MEM_POOL_ID_RX_DSCR, /* 共享接收描述符内存池 */
65 OAL_MEM_POOL_ID_TX_DSCR, /* 共享发送描述符1内存池 */
69
70#ifdef _PRE_WLAN_DFR_STAT
71/*****************************************************************************
72 结构名 : oal_mem_stru
73 结构说明: 内存块结构体
74*****************************************************************************/
75struct oal_mem_stru_tag {
76 osal_u8 *data; /* 存放数据的指针 */
77 osal_u8 *origin_data; /* 记录数据的原始指针 */
78 osal_u16 len; /* 内存块的长度 */
79 osal_u8 user_cnt : 4; /* 申请本内存块的用户计数 */
80 oal_mem_state_enum_uint8 mem_state_flag : 4; /* 内存块状态 */
81 oal_mem_pool_id_enum_uint8 pool_id : 4; /* 本内存属于哪一个内存池 */
82 osal_u8 subpool_id : 4; /* 本内存是属于哪一级子内存池 */
83
84 osal_ulong return_addr; /* alloc内存的函数地址 新增 */
85};
86typedef struct oal_mem_stru_tag oal_mem_stru;
87
88/*****************************************************************************
89 结构名 : oal_mem_subpool_stru
90 结构说明: 子内存池结构体
91*****************************************************************************/
92typedef struct {
93 osal_spinlock spinlock;
94 osal_u16 len; /* 本子内存池的内存块长度 */
95 osal_u16 free_cnt; /* 本子内存池可用内存块数 */
96
97 /* 记录oal_mem_stru可用内存索引表的栈顶元素,其内容为oal_mem_stru指针 */
98 void **ppst_free_stack;
99
100 osal_u16 total_cnt; /* 本子内存池内存块总数 */
101 osal_u8 auc_resv[2];
102} oal_mem_subpool_stru;
103
104/*****************************************************************************
105 结构名 : oal_mem_pool_stru
106 结构说明: 内存池结构体
107*****************************************************************************/
108typedef struct {
109 osal_u16 max_byte_len; /* 本内存池可分配内存块最大长度 */
110 osal_u8 subpool_cnt; /* 本内存池一共有多少子内存池 */
111 osal_u8 resv;
112 /* 子内存池索引表数组 */
113 oal_mem_subpool_stru subpool_table[WLAN_MEM_MAX_SUBPOOL_NUM];
114
115 osal_u16 mem_used_cnt; /* 本内存池已用内存块 */
116 osal_u16 mem_total_cnt; /* 本内存池一共有多少内存块 */
117 oal_mem_stru *mem_start_addr;
118} oal_mem_pool_stru;
119#endif
120
121/*****************************************************************************
122 10 函数声明
123*****************************************************************************/
125 oal_mem_pool_id_enum_uint8 pool_id, osal_u16 len, osal_u8 lock);
127
129
131
136
137/*****************************************************************************
138 功能描述 : 获取skb数据头部(偏移mac头后的数据)
139*****************************************************************************/
140static inline osal_u8 *oal_netbuf_wifi_data(const oal_netbuf_stru *netbuf)
141{
142 osal_u8 *payload = oal_netbuf_payload(netbuf);
143 return (payload + OAL_HDR_TOTAL_LEN);
144}
145
146#ifdef __cplusplus
147#if __cplusplus
148}
149#endif
150#endif
151
152#endif /* end of oal_mem_hcm.h */
#define WLAN_MEM_MAX_SUBPOOL_NUM
Definition chip_mem.h:35
oal_netbuf_stru * oal_mem_multi_netbuf_alloc(osal_u16 len)
osal_u8 oal_mem_pool_id_enum_uint8
Definition oal_mem_hcm.h:68
osal_u8 * oal_netbuf_cb_buf(oal_netbuf_stru *netbuf)
osal_u32 oal_mem_free_etc(osal_u32 file_id, osal_u32 line_num, osal_void *data, osal_u8 lock)
osal_void * oal_mem_alloc_etc(osal_u32 file_id, osal_u32 line_num, oal_mem_pool_id_enum_uint8 pool_id, osal_u16 len, osal_u8 lock)
oal_netbuf_stru * oal_netbuf_alloc_ext(td_u32 size)
osal_u8 * oal_netbuf_header_buf(const oal_netbuf_stru *netbuf)
const osal_u8 * oal_netbuf_cb_buf_const(const oal_netbuf_stru *netbuf)
const osal_u8 * oal_netbuf_header_buf_const(const oal_netbuf_stru *netbuf)
oal_mem_pool_id_enum
Definition oal_mem_hcm.h:55
@ OAL_MEM_POOL_ID_TX_DSCR
Definition oal_mem_hcm.h:65
@ OAL_MEM_POOL_ID_SHARED_DSCR
Definition oal_mem_hcm.h:61
@ OAL_MEM_POOL_ID_EVENT
Definition oal_mem_hcm.h:56
@ OAL_MEM_POOL_ID_SHARED_MGMT_PKT
Definition oal_mem_hcm.h:58
@ OAL_MEM_POOL_ID_SHARED_DATA_PKT
Definition oal_mem_hcm.h:57
@ OAL_MEM_POOL_ID_RX_DSCR
Definition oal_mem_hcm.h:64
@ OAL_MEM_POOL_ID_LOCAL
Definition oal_mem_hcm.h:59
@ OAL_MEM_POOL_ID_MIB
Definition oal_mem_hcm.h:60
@ OAL_MEM_POOL_ID_NETBUF
Definition oal_mem_hcm.h:63
@ OAL_MEM_POOL_ID_BUTT
Definition oal_mem_hcm.h:66
osal_u8 oal_mem_state_enum_uint8
Definition oal_net_pkt_rom.h:76
#define OAL_HDR_TOTAL_LEN
Definition oal_netbuf_common_rom.h:25
unsigned char osal_u8
Definition osal_types.h:11
void osal_void
Definition osal_types.h:29
unsigned int osal_u32
Definition osal_types.h:13
unsigned short osal_u16
Definition osal_types.h:12
unsigned long osal_ulong
Definition osal_types.h:15
Definition osal_spinlock.h:18
Definition oal_skbuff.h:82
unsigned int td_u32
Definition td_type.h:38
Definition hal_uart_v151_regs_def.h:38