• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  * Description: Header file for oal_net_pkt_rom
15  */
16 
17 #ifndef OAL_NET_PKT_ROM_H
18 #define OAL_NET_PKT_ROM_H
19 #include "osal_types.h"
20 #include "soc_osal.h"
21 #include "oal_types_device_rom.h"
22 #ifdef __cplusplus
23 #if __cplusplus
24 extern "C" {
25 #endif
26 #endif
27 
28 typedef enum {
29     PKT_BUF_SRC_DMAC = 0,
30     PKT_BUF_SRC_LWIP,
31     PKT_BUF_SRC_HMAC,
32     SKB_BUF_SRC_DMAC,
33     SKB_BUF_SRC_LWIP,
34     SKB_BUF_SRC_HMAC,
35     PBUF_SRC_DMAC,
36     PBUF_SRC_LWIP,
37     PBUF_SRC_HMAC,
38 
39     PKT_BUF_SRC_BUTT
40 } oal_pkt_buf_src_type;
41 
42 /*****************************************************************************
43   枚举名  : oal_netbuf_id_enum_uint8
44   协议表格:
45   枚举说明: 对外提供netbuf内存池ID
46 *****************************************************************************/
47 typedef enum {
48     OAL_NORMAL_NETBUF = 0,                /* 包括短帧、长帧内存池 */
49     OAL_MGMT_NETBUF   = 1,                /* 管理帧内存池 */
50 
51     OAL_NETBUF_POOL_ID_BUTT
52 }oal_netbuf_id_enum;
53 typedef osal_u8 oal_netbuf_id_enum_uint8;
54 
55 /*****************************************************************************
56   枚举名  : oal_netbuf_priority_enum_uint8
57   协议表格:
58   枚举说明: netbuf优先级
59 *****************************************************************************/
60 typedef enum {
61     OAL_NETBUF_PRIORITY_LOW     = 0,  // 最低优先级,不能跨池申请
62     OAL_NETBUF_PRIORITY_MID     = 1,  // 中间优先级,可以跨池申请,但不能申请大包的最后N片
63     OAL_NETBUF_PRIORITY_HIGH    = 2,  // 最高优先级,可以跨池申请,且可以申请大包的最后N片
64 
65     OAL_NETBUF_PRIORITY_BUTT
66 }oal_netbuf_priority_enum;
67 typedef osal_u8 oal_netbuf_priority_enum_uint8;
68 
69 #define OAL_MEM_INFO_SIZE 4
70 
71 #define OAL_MACHDR_LEN 80 /* netbuf mac头长度 */
72 #define MAC_HEAD_OFFSET (OAL_MACHDR_LEN - OAL_MAX_MAC_HDR_LEN)
73 #define CB_OFFSET (OAL_MACHDR_LEN - OAL_MAX_MAC_HDR_LEN - OAL_MAX_CB_LEN)
74 
75 #define WLAN_MEM_MAX_SUBPOOL_NUM 8 /* 内存池中出netbuf内存池外最大子内存池个数 */
76 
77 /*****************************************************************************
78   枚举名  : oal_mem_state_enum_uint8
79   协议表格:
80   枚举说明: 内存块状态
81 *****************************************************************************/
82 typedef enum {
83     OAL_MEM_STATE_FREE = 0, /* 该内存空闲 */
84     OAL_MEM_STATE_ALLOC,    /* 该内存已分配 */
85     OAL_MEM_STATE_BUTT
86 } oal_mem_state_enum;
87 typedef osal_u8 oal_mem_state_enum_uint8;
88 
89 /*****************************************************************************
90    结构名  : oal_dmac_netbuf_stru
91    结构说明: 描述每一个netbuf内存块信息
92  *****************************************************************************/
93 /* netbuf_stru加dmac */
94 struct oal_dmac_netbuf_stru_tag {
95     struct oal_dmac_netbuf_stru_tag  *next;
96     oal_mem_state_enum_uint8    mem_state;              /* 内存块状态 */
97     osal_u8                       is_high_priority : 1;   /* 是否是被高优先级申请 */
98     osal_u8                       subpool_id : 3;         /* 记录所属子池id */
99     osal_u8                       is_ram : 1;   /* 是否属于系统内存申请 */
100     osal_u8                       resv : 3;
101     osal_u16                      index;                  /* 序号 */
102     osal_s16                      pkt_buf_offset;
103     osal_u8                       pkt_src;
104     osal_u8                       resv1;
105 #ifdef _PRE_MEM_DEBUG
106     osal_u32                      return_addr;            /* 调用alloc内存的函数地址 */
107 #endif
108 };
109 typedef struct oal_dmac_netbuf_stru_tag oal_dmac_netbuf_stru;
110 
111 /* netbuf_stru加dmac */
112 typedef struct {
113     oal_dmac_netbuf_stru *next;
114     oal_dmac_netbuf_stru *prev;
115     osal_u32 num;
116     osal_u8 auc_resv[4]; /* 此处添加4个保留字节是为了让整个结构体与linux下大小一致 */
117 } oal_dmac_netbuf_head_stru;
118 
119 oal_dmac_netbuf_stru *oal_mem_netbuf_alloc(osal_u8 netbuf_id, osal_u16 len, oal_netbuf_priority_enum_uint8 flag);
120 osal_void oal_mem_netbuf_free(oal_dmac_netbuf_stru *netbuf);
121 osal_u8 *oal_dmac_netbuf_end(const oal_dmac_netbuf_stru *netbuf);
122 osal_u8 *oal_dmac_netbuf_payload(const oal_dmac_netbuf_stru *netbuf);
123 osal_u8 *oal_netbuf_hcchdr(const oal_dmac_netbuf_stru *netbuf);
124 osal_u8 *oal_netbuf_mac_header(const oal_dmac_netbuf_stru *netbuf);
125 osal_u8 *oal_dmac_netbuf_cb(const oal_dmac_netbuf_stru *netbuf);
126 osal_u8 *oal_netbuf_lwip(const oal_dmac_netbuf_stru *netbuf);
127 osal_u8 *oal_netbuf_skb(const oal_dmac_netbuf_stru *netbuf);
128 typedef osal_u32 (*oal_mem_netbuf_pbuf_free_cb)(oal_dmac_netbuf_stru *netbuf);
129 typedef osal_u32 (*oal_mem_netbuf_alloc_from_ram_cb)(osal_u8 subpool_id, osal_u32 return_addr,
130     oal_dmac_netbuf_stru **out_netbuf);
131 typedef osal_u32 (*oal_mem_netbuf_free_from_ram_cb)(oal_dmac_netbuf_stru *netbuf);
132 osal_u32 oal_mem_get_buf_size(osal_void);
133 osal_u32 oal_mem_get_skb_size(osal_void);
134 osal_u32 oal_mem_get_zerocopy_hdr_size(osal_void);
135 
136 /* ****************************************************************************
137  功能描述  : 获取skb数据头部(偏移mac头后的数据)
138 **************************************************************************** */
oal_dmac_netbuf_data(const oal_dmac_netbuf_stru * netbuf)139 static INLINE__ osal_u8 *oal_dmac_netbuf_data(const oal_dmac_netbuf_stru *netbuf)
140 {
141     osal_u8 *payload = oal_dmac_netbuf_payload(netbuf);
142     return (payload + OAL_MACHDR_LEN);
143 }
144 
145 #ifdef __cplusplus
146 #if __cplusplus
147 }
148 #endif
149 #endif
150 
151 #endif /* end of oal_net_pkt_rom.h */
152 
153